OSDN Git Service

* recog.c (general_operand, immediate_operand,
[pf3gnuchains/gcc-fork.git] / gcc / gcc.1
1 .\" Automatically generated by Pod::Man version 1.1
2 .\" Fri Mar  9 21:54:51 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
13 ..
14 .de Sp \" Vertical space (when we can't use .PP)
15 .if t .sp .5v
16 .if n .sp
17 ..
18 .de Ip \" List item
19 .br
20 .ie \\n(.$>=3 .ne \\$3
21 .el .ne 3
22 .IP "\\$1" \\$2
23 ..
24 .de Vb \" Begin verbatim text
25 .ft CW
26 .nf
27 .ne \\$1
28 ..
29 .de Ve \" End verbatim text
30 .ft R
31
32 .fi
33 ..
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"
66 ..
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 /
102 .\}
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'
110 .\}
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 \
126 \{\
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
136 .\}
137 .rm #[ #] #H #V #F C
138 .\" ======================================================================
139 .\"
140 .IX Title "GCC 1"
141 .TH GCC 1 "gcc-3.1" "2001-03-09" "GNU"
142 .UC
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...
154 .PP
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.
164 .PP
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.
169 .PP
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.
175 .PP
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.
179 .PP
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.
184 .PP
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 \&\-funsafe-math-optimizations \-fno-trapping-math 
286 \&\-fomit-frame-pointer  \-foptimize-register-move 
287 \&\-foptimize-sibling-calls  \-freduce-all-givs 
288 \&\-fregmove  \-frename-registers 
289 \&\-frerun-cse-after-loop  \-frerun-loop-opt 
290 \&\-fschedule-insns  \-fschedule-insns2 
291 \&\-fsingle-precision-constant  \-fssa 
292 \&\-fstrength-reduce  \-fstrict-aliasing  \-fthread-jumps  \-ftrapv 
293 \&\-funroll-all-loops  \-funroll-loops  
294 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
295 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os\fR
296 .Ip "\fIPreprocessor Options\fR" 4
297 .IX Item "Preprocessor Options"
298 \&\fB\-$  \-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR  \fB\-A-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
299 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
300 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
301 \&\-idirafter\fR \fIdir\fR 
302 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
303 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
304 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR \fB\-isystem-c++\fR \fIdir\fR 
305 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  \-P  \-remap 
306 \&\-trigraphs  \-undef  \-U\fR\fImacro\fR  \fB\-Wp,\fR\fIoption\fR
307 .Ip "\fIAssembler Option\fR" 4
308 .IX Item "Assembler Option"
309 \&\fB\-Wa,\fR\fIoption\fR
310 .Ip "\fILinker Options\fR" 4
311 .IX Item "Linker Options"
312 \&\fB
313 \&\fR\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
314 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib 
315 \&\-s  \-static  \-static-libgcc  \-shared  \-shared-libgcc  \-symbolic 
316 \&\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
317 \&\fB\-u\fR \fIsymbol\fR
318 .Ip "\fIDirectory Options\fR" 4
319 .IX Item "Directory Options"
320 \&\fB\-B\fR\fIprefix\fR  \fB\-I\fR\fIdir\fR  \fB\-I-  \-L\fR\fIdir\fR  \fB\-specs=\fR\fIfile\fR
321 .Ip "\fITarget Options\fR" 4
322 .IX Item "Target Options"
323 \&\fB\-b\fR \fImachine\fR  \fB\-V\fR \fIversion\fR
324 .Ip "\fIMachine Dependent Options\fR" 4
325 .IX Item "Machine Dependent Options"
326 \&\fIM680x0 Options\fR
327 .Sp
328 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
329 \&\-m68060  \-mcpu32 \-m5200  \-m68881  \-mbitfield  \-mc68000  \-mc68020   
330 \&\-mfpa \-mnobitfield  \-mrtd  \-mshort  \-msoft-float  \-mpcrel 
331 \&\-malign-int \-mstrict-align\fR
332 .Sp
333 \&\fIM68hc1x Options\fR
334 .Sp
335 \&\fB\-m6811  \-m6812  \-m68hc11  \-m68hc12 
336 \&\-mauto-incdec  \-mshort  \-msoft-reg-count=\fR\fIcount\fR
337 .Sp
338 \&\fI\s-1VAX\s0 Options\fR
339 .Sp
340 \&\fB\-mg  \-mgnu  \-munix\fR
341 .Sp
342 \&\fI\s-1SPARC\s0 Options\fR
343 .Sp
344 \&\fB\-mcpu=\fR\fIcpu type\fR 
345 \&\fB\-mtune=\fR\fIcpu type\fR 
346 \&\fB\-mcmodel=\fR\fIcode model\fR 
347 \&\fB\-m32  \-m64 
348 \&\-mapp-regs  \-mbroken-saverestore  \-mcypress 
349 \&\-mepilogue \-mfaster-structs \-mflat 
350 \&\-mfpu  \-mhard-float  \-mhard-quad-float 
351 \&\-mimpure-text  \-mlive-g0  \-mno-app-regs 
352 \&\-mno-epilogue \-mno-faster-structs \-mno-flat  \-mno-fpu 
353 \&\-mno-impure-text \-mno-stack-bias  \-mno-unaligned-doubles 
354 \&\-msoft-float  \-msoft-quad-float  \-msparclite  \-mstack-bias 
355 \&\-msupersparc  \-munaligned-doubles  \-mv8\fR
356 .Sp
357 \&\fIConvex Options\fR
358 .Sp
359 \&\fB\-mc1  \-mc2  \-mc32  \-mc34  \-mc38 
360 \&\-margcount  \-mnoargcount 
361 \&\-mlong32  \-mlong64 
362 \&\-mvolatile-cache  \-mvolatile-nocache\fR
363 .Sp
364 \&\fI\s-1AMD29K\s0 Options\fR
365 .Sp
366 \&\fB\-m29000  \-m29050  \-mbw  \-mnbw  \-mdw  \-mndw 
367 \&\-mlarge  \-mnormal  \-msmall 
368 \&\-mkernel-registers  \-mno-reuse-arg-regs 
369 \&\-mno-stack-check  \-mno-storem-bug 
370 \&\-mreuse-arg-regs  \-msoft-float  \-mstack-check 
371 \&\-mstorem-bug  \-muser-registers\fR
372 .Sp
373 \&\fI\s-1ARM\s0 Options\fR
374 .Sp
375 \&\fB\-mapcs-frame \-mno-apcs-frame 
376 \&\-mapcs-26 \-mapcs-32 
377 \&\-mapcs-stack-check \-mno-apcs-stack-check 
378 \&\-mapcs-float \-mno-apcs-float 
379 \&\-mapcs-reentrant \-mno-apcs-reentrant 
380 \&\-msched-prolog \-mno-sched-prolog 
381 \&\-mlittle-endian \-mbig-endian \-mwords-little-endian 
382 \&\-malignment-traps \-mno-alignment-traps 
383 \&\-msoft-float \-mhard-float \-mfpe 
384 \&\-mthumb-interwork \-mno-thumb-interwork 
385 \&\-mcpu= \-march= \-mfpe=  
386 \&\-mstructure-size-boundary= 
387 \&\-mbsd \-mxopen \-mno-symrename 
388 \&\-mabort-on-noreturn 
389 \&\-mlong-calls \-mno-long-calls 
390 \&\-mnop-fun-dllimport \-mno-nop-fun-dllimport 
391 \&\-msingle-pic-base \-mno-single-pic-base 
392 \&\-mpic-register=\fR
393 .Sp
394 \&\fIThumb Options\fR
395 .Sp
396 \&\fB\-mtpcs-frame \-mno-tpcs-frame 
397 \&\-mtpcs-leaf-frame \-mno-tpcs-leaf-frame 
398 \&\-mlittle-endian  \-mbig-endian 
399 \&\-mthumb-interwork \-mno-thumb-interwork 
400 \&\-mstructure-size-boundary= 
401 \&\-mnop-fun-dllimport \-mno-nop-fun-dllimport 
402 \&\-mcallee-super-interworking \-mno-callee-super-interworking 
403 \&\-mcaller-super-interworking \-mno-caller-super-interworking 
404 \&\-msingle-pic-base \-mno-single-pic-base 
405 \&\-mpic-register=\fR
406 .Sp
407 \&\fI\s-1MN10200\s0 Options\fR
408 .Sp
409 \&\fB\-mrelax\fR
410 .Sp
411 \&\fI\s-1MN10300\s0 Options\fR
412 .Sp
413 \&\fB\-mmult-bug 
414 \&\-mno-mult-bug 
415 \&\-mam33 
416 \&\-mno-am33 
417 \&\-mrelax\fR
418 .Sp
419 \&\fIM32R/D Options\fR
420 .Sp
421 \&\fB\-mcode-model=\fR\fImodel type\fR  \fB\-msdata=\fR\fIsdata type\fR 
422 \&\fB\-G\fR \fInum\fR
423 .Sp
424 \&\fIM88K Options\fR
425 .Sp
426 \&\fB\-m88000  \-m88100  \-m88110  \-mbig-pic 
427 \&\-mcheck-zero-division  \-mhandle-large-shift 
428 \&\-midentify-revision  \-mno-check-zero-division 
429 \&\-mno-ocs-debug-info  \-mno-ocs-frame-position 
430 \&\-mno-optimize-arg-area  \-mno-serialize-volatile 
431 \&\-mno-underscores  \-mocs-debug-info 
432 \&\-mocs-frame-position  \-moptimize-arg-area 
433 \&\-mserialize-volatile  \-mshort-data-\fR\fInum\fR  \fB\-msvr3 
434 \&\-msvr4  \-mtrap-large-shift  \-muse-div-instruction 
435 \&\-mversion-03.00  \-mwarn-passed-structs\fR
436 .Sp
437 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
438 .Sp
439 \&\fB\-mcpu=\fR\fIcpu type\fR 
440 \&\fB\-mtune=\fR\fIcpu type\fR 
441 \&\fB\-mpower  \-mno-power  \-mpower2  \-mno-power2 
442 \&\-mpowerpc  \-mpowerpc64  \-mno-powerpc 
443 \&\-mpowerpc-gpopt  \-mno-powerpc-gpopt 
444 \&\-mpowerpc-gfxopt  \-mno-powerpc-gfxopt 
445 \&\-mnew-mnemonics  \-mold-mnemonics 
446 \&\-mfull-toc   \-mminimal-toc  \-mno-fop-in-toc  \-mno-sum-in-toc 
447 \&\-m64  \-m32  \-mxl-call  \-mno-xl-call  \-mthreads  \-mpe 
448 \&\-msoft-float  \-mhard-float  \-mmultiple  \-mno-multiple 
449 \&\-mstring  \-mno-string  \-mupdate  \-mno-update 
450 \&\-mfused-madd  \-mno-fused-madd  \-mbit-align  \-mno-bit-align 
451 \&\-mstrict-align  \-mno-strict-align  \-mrelocatable 
452 \&\-mno-relocatable  \-mrelocatable-lib  \-mno-relocatable-lib 
453 \&\-mtoc  \-mno-toc \-mlittle  \-mlittle-endian  \-mbig  \-mbig-endian 
454 \&\-mcall-aix  \-mcall-sysv  \-mprototype  \-mno-prototype 
455 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb \-msdata 
456 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks \-G\fR \fInum\fR
457 .Sp
458 \&\fI\s-1RT\s0 Options\fR
459 .Sp
460 \&\fB\-mcall-lib-mul  \-mfp-arg-in-fpregs  \-mfp-arg-in-gregs 
461 \&\-mfull-fp-blocks  \-mhc-struct-return  \-min-line-mul 
462 \&\-mminimum-fp-blocks  \-mnohc-struct-return\fR
463 .Sp
464 \&\fI\s-1MIPS\s0 Options\fR
465 .Sp
466 \&\fB\-mabicalls  \-mcpu=\fR\fIcpu type\fR
467 \&\fB\-membedded-data  \-muninit-const-in-rodata 
468 \&\-membedded-pic  \-mfp32  \-mfp64  \-mgas  \-mgp32  \-mgp64 
469 \&\-mgpopt  \-mhalf-pic  \-mhard-float  \-mint64  \-mips1 
470 \&\-mips2  \-mips3 \-mips4 \-mlong64  \-mlong32 \-mlong-calls  \-mmemcpy 
471 \&\-mmips-as  \-mmips-tfile  \-mno-abicalls 
472 \&\-mno-embedded-data  \-mno-uninit-const-in-rodata  \-mno-embedded-pic 
473 \&\-mno-gpopt  \-mno-long-calls 
474 \&\-mno-memcpy  \-mno-mips-tfile  \-mno-rnames  \-mno-stats 
475 \&\-mrnames  \-msoft-float 
476 \&\-m4650  \-msingle-float  \-mmad 
477 \&\-mstats  \-EL  \-EB  \-G\fR \fInum\fR  \fB\-nocpp 
478 \&\-mabi=32 \-mabi=n32 \-mabi=64 \-mabi=eabi 
479 \&\-mfix7000 \-mno-crt0\fR
480 .Sp
481 \&\fIi386 Options\fR
482 .Sp
483 \&\fB\-mcpu=\fR\fIcpu type\fR \fB\-march=\fR\fIcpu type\fR 
484 \&\fB\-mintel-syntax \-mieee-fp  \-mno-fancy-math-387 
485 \&\-mno-fp-ret-in-387  \-msoft-float  \-msvr3\-shlib 
486 \&\-mno-wide-multiply  \-mrtd  \-malign-double 
487 \&\-malign-jumps=\fR\fInum\fR  \fB\-malign-loops=\fR\fInum\fR 
488 \&\fB\-malign-functions=\fR\fInum\fR \fB\-mpreferred-stack-boundary=\fR\fInum\fR 
489 \&\fB\-mthreads \-mno-align-stringops \-minline-all-stringops 
490 \&\-mpush-args \-maccumulate-outgoing-args \-m128bit-long-double 
491 \&\-m96bit-long-double \-mregparm=\fR\fInum\fR
492 .Sp
493 \&\fI\s-1HPPA\s0 Options\fR
494 .Sp
495 \&\fB\-march=\fR\fIarchitecture type\fR 
496 \&\fB\-mbig-switch  \-mdisable-fpregs  \-mdisable-indexing   
497 \&\-mfast-indirect-calls \-mgas  \-mjump-in-delay   
498 \&\-mlong-load-store  \-mno-big-switch  \-mno-disable-fpregs 
499 \&\-mno-disable-indexing  \-mno-fast-indirect-calls  \-mno-gas 
500 \&\-mno-jump-in-delay  \-mno-long-load-store   
501 \&\-mno-portable-runtime  \-mno-soft-float 
502 \&\-mno-space-regs  \-msoft-float  \-mpa-risc-1\-0   
503 \&\-mpa-risc-1\-1  \-mpa-risc-2\-0 \-mportable-runtime 
504 \&\-mschedule=\fR\fIcpu type\fR  \fB\-mspace-regs\fR
505 .Sp
506 \&\fIIntel 960 Options\fR
507 .Sp
508 \&\fB\-m\fR\fIcpu type\fR  \fB\-masm-compat  \-mclean-linkage 
509 \&\-mcode-align  \-mcomplex-addr  \-mleaf-procedures 
510 \&\-mic-compat  \-mic2.0\-compat  \-mic3.0\-compat 
511 \&\-mintel-asm  \-mno-clean-linkage  \-mno-code-align 
512 \&\-mno-complex-addr  \-mno-leaf-procedures 
513 \&\-mno-old-align  \-mno-strict-align  \-mno-tail-call 
514 \&\-mnumerics  \-mold-align  \-msoft-float  \-mstrict-align 
515 \&\-mtail-call\fR
516 .Sp
517 \&\fI\s-1DEC\s0 Alpha Options\fR
518 .Sp
519 \&\fB\-mfp-regs  \-mno-fp-regs \-mno-soft-float  \-msoft-float 
520 \&\-malpha-as \-mgas 
521 \&\-mieee  \-mieee-with-inexact  \-mieee-conformant 
522 \&\-mfp-trap-mode=\fR\fImode\fR  \fB\-mfp-rounding-mode=\fR\fImode\fR 
523 \&\fB\-mtrap-precision=\fR\fImode\fR  \fB\-mbuild-constants 
524 \&\-mcpu=\fR\fIcpu type\fR 
525 \&\fB\-mbwx \-mno-bwx \-mcix \-mno-cix \-mmax \-mno-max 
526 \&\-mmemory-latency=\fR\fItime\fR
527 .Sp
528 \&\fIClipper Options\fR
529 .Sp
530 \&\fB\-mc300  \-mc400\fR
531 .Sp
532 \&\fIH8/300 Options\fR
533 .Sp
534 \&\fB\-mrelax  \-mh \-ms \-mint32  \-malign-300\fR
535 .Sp
536 \&\fI\s-1SH\s0 Options\fR
537 .Sp
538 \&\fB\-m1  \-m2  \-m3  \-m3e 
539 \&\-m4\-nofpu  \-m4\-single-only  \-m4\-single  \-m4 
540 \&\-mb  \-ml  \-mdalign  \-mrelax 
541 \&\-mbigtable  \-mfmovd  \-mhitachi  \-mnomacsave 
542 \&\-misize  \-mpadstruct  \-mspace 
543 \&\-mprefergot
544 \&\-musermode\fR
545 .Sp
546 \&\fISystem V Options\fR
547 .Sp
548 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
549 .Sp
550 \&\fI\s-1ARC\s0 Options\fR
551 .Sp
552 \&\fB\-EB  \-EL 
553 \&\-mmangle-cpu  \-mcpu=\fR\fIcpu\fR  \fB\-mtext=\fR\fItext section\fR 
554 \&\fB\-mdata=\fR\fIdata section\fR  \fB\-mrodata=\fR\fIreadonly data section\fR
555 .Sp
556 \&\fITMS320C3x/C4x Options\fR
557 .Sp
558 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-mbig \-msmall \-mregparm \-mmemparm 
559 \&\-mfast-fix \-mmpyi \-mbk \-mti \-mdp-isr-reload 
560 \&\-mrpts=\fR\fIcount\fR  \fB\-mrptb \-mdb \-mloop-unsigned 
561 \&\-mparallel-insns \-mparallel-mpy \-mpreserve-float\fR
562 .Sp
563 \&\fIV850 Options\fR
564 .Sp
565 \&\fB\-mlong-calls \-mno-long-calls \-mep \-mno-ep 
566 \&\-mprolog-function \-mno-prolog-function \-mspace 
567 \&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR 
568 \&\fB\-mv850 \-mbig-switch\fR
569 .Sp
570 \&\fI\s-1NS32K\s0 Options\fR
571 .Sp
572 \&\fB\-m32032 \-m32332 \-m32532 \-m32081 \-m32381 \-mmult-add \-mnomult-add 
573 \&\-msoft-float \-mrtd \-mnortd \-mregparam \-mnoregparam \-msb \-mnosb 
574 \&\-mbitfield \-mnobitfield \-mhimem \-mnohimem\fR
575 .Sp
576 \&\fI\s-1AVR\s0 Options\fR
577 .Sp
578 \&\fB\-mmcu=\fR\fImcu\fR \fB\-msize \-minit-stack=\fR\fIn\fR \fB\-mno-interrupts 
579 \&\-mcall-prologues \-mno-tablejump \-mtiny-stack\fR
580 .Sp
581 \&\fIMCore Options\fR
582 .Sp
583 \&\fB\-mhardlit \-mno-hardlit \-mdiv \-mno-div \-mrelax-immediates  
584 \&\-mno-relax-immediates \-mwide-bitfields \-mno-wide-bitfields 
585 \&\-m4byte-functions \-mno-4byte-functions \-mcallgraph-data 
586 \&\-mno-callgraph-data \-mslow-bytes \-mno-slow-bytes \-mno-lsim 
587 \&\-mlittle-endian \-mbig-endian \-m210 \-m340 \-mstack-increment\fR
588 .Sp
589 \&\fI\s-1IA-64\s0 Options\fR
590 .Sp
591 \&\fB\-mbig-endian \-mlittle-endian \-mgnu-as \-mgnu-ld \-mno-pic 
592 \&\-mvolatile-asm-stop \-mb-step \-mregister-names \-mno-sdata 
593 \&\-mconstant-gp \-mauto-pic \-minline-divide-min-latency 
594 \&\-minline-divide-max-throughput \-mno-dwarf2\-asm 
595 \&\-mfixed-range=\fR\fIregister range\fR
596 .Ip "\fICode Generation Options\fR" 4
597 .IX Item "Code Generation Options"
598 \&\fB\-fcall-saved-\fR\fIreg\fR  \fB\-fcall-used-\fR\fIreg\fR 
599 \&\fB\-fexceptions  \-funwind-tables  \-ffixed-\fR\fIreg\fR 
600 \&\fB\-finhibit-size-directive  \-finstrument-functions 
601 \&\-fcheck-memory-usage  \-fprefix-function-name 
602 \&\-fno-common  \-fno-ident  \-fno-gnu-linker 
603 \&\-fpcc-struct-return  \-fpic  \-fPIC 
604 \&\-freg-struct-return  \-fshared-data  \-fshort-enums 
605 \&\-fshort-double  \-fvolatile  \-fvolatile-global \-fvolatile-static 
606 \&\-fverbose-asm  \-fpack-struct  \-fstack-check 
607 \&\-fstack-limit-register=\fR\fIreg\fR  \fB\-fstack-limit-symbol=\fR\fIsym\fR 
608 \&\fB\-fargument-alias  \-fargument-noalias 
609 \&\-fargument-noalias-global 
610 \&\-fleading-underscore\fR
611 .Sh "Options Controlling the Kind of Output"
612 .IX Subsection "Options Controlling the Kind of Output"
613 Compilation can involve up to four stages: preprocessing, compilation
614 proper, assembly and linking, always in that order.  The first three
615 stages apply to an individual source file, and end by producing an
616 object file; linking combines all the object files (those newly
617 compiled, and those specified as input) into an executable file.
618 .PP
619 For any given input file, the file name suffix determines what kind of
620 compilation is done:
621 .Ip "\fIfile\fR\fB.c\fR" 4
622 .IX Item "file.c"
623 C source code which must be preprocessed.
624 .Ip "\fIfile\fR\fB.i\fR" 4
625 .IX Item "file.i"
626 C source code which should not be preprocessed.
627 .Ip "\fIfile\fR\fB.ii\fR" 4
628 .IX Item "file.ii"
629 \&\*(C+ source code which should not be preprocessed.
630 .Ip "\fIfile\fR\fB.m\fR" 4
631 .IX Item "file.m"
632 Objective-C source code.  Note that you must link with the library
633 \&\fIlibobjc.a\fR to make an Objective-C program work.
634 .Ip "\fIfile\fR\fB.mi\fR" 4
635 .IX Item "file.mi"
636 Objective-C source code which should not be preprocessed.
637 .Ip "\fIfile\fR\fB.h\fR" 4
638 .IX Item "file.h"
639 C header file (not to be compiled or linked).
640 .Ip "\fIfile\fR\fB.cc\fR" 4
641 .IX Item "file.cc"
642 .PD 0
643 .Ip "\fIfile\fR\fB.cp\fR" 4
644 .IX Item "file.cp"
645 .Ip "\fIfile\fR\fB.cxx\fR" 4
646 .IX Item "file.cxx"
647 .Ip "\fIfile\fR\fB.cpp\fR" 4
648 .IX Item "file.cpp"
649 .Ip "\fIfile\fR\fB.c++\fR" 4
650 .IX Item "file.c++"
651 .Ip "\fIfile\fR\fB.C\fR" 4
652 .IX Item "file.C"
653 .PD
654 \&\*(C+ source code which must be preprocessed.  Note that in \fB.cxx\fR,
655 the last two letters must both be literally \fBx\fR.  Likewise,
656 \&\fB.C\fR refers to a literal capital C.
657 .Ip "\fIfile\fR\fB.f\fR" 4
658 .IX Item "file.f"
659 .PD 0
660 .Ip "\fIfile\fR\fB.for\fR" 4
661 .IX Item "file.for"
662 .Ip "\fIfile\fR\fB.FOR\fR" 4
663 .IX Item "file.FOR"
664 .PD
665 Fortran source code which should not be preprocessed.
666 .Ip "\fIfile\fR\fB.F\fR" 4
667 .IX Item "file.F"
668 .PD 0
669 .Ip "\fIfile\fR\fB.fpp\fR" 4
670 .IX Item "file.fpp"
671 .Ip "\fIfile\fR\fB.FPP\fR" 4
672 .IX Item "file.FPP"
673 .PD
674 Fortran source code which must be preprocessed (with the traditional
675 preprocessor).
676 .Ip "\fIfile\fR\fB.r\fR" 4
677 .IX Item "file.r"
678 Fortran source code which must be preprocessed with a \s-1RATFOR\s0
679 preprocessor (not included with \s-1GCC\s0).
680 .Ip "\fIfile\fR\fB.ch\fR" 4
681 .IX Item "file.ch"
682 .PD 0
683 .Ip "\fIfile\fR\fB.chi\fR" 4
684 .IX Item "file.chi"
685 .PD
686 \&\s-1CHILL\s0 source code (preprocessed with the traditional preprocessor).
687 .Ip "\fIfile\fR\fB.s\fR" 4
688 .IX Item "file.s"
689 Assembler code.
690 .Ip "\fIfile\fR\fB.S\fR" 4
691 .IX Item "file.S"
692 Assembler code which must be preprocessed.
693 .Ip "\fIother\fR" 4
694 .IX Item "other"
695 An object file to be fed straight into linking.
696 Any file name with no recognized suffix is treated this way.
697 .PP
698 You can specify the input language explicitly with the \fB\-x\fR option:
699 .Ip "\fB\-x\fR \fIlanguage\fR" 4
700 .IX Item "-x language"
701 Specify explicitly the \fIlanguage\fR for the following input files
702 (rather than letting the compiler choose a default based on the file
703 name suffix).  This option applies to all following input files until
704 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
705 .Sp
706 .Vb 6
707 \&        c  c-header  cpp-output
708 \&        c++  c++-cpp-output
709 \&        objective-c  objc-cpp-output
710 \&        assembler  assembler-with-cpp
711 \&        f77  f77-cpp-input  ratfor
712 \&        java  chill
713 .Ve
714 .Ip "\fB\-x none\fR" 4
715 .IX Item "-x none"
716 Turn off any specification of a language, so that subsequent files are
717 handled according to their file name suffixes (as they are if \fB\-x\fR
718 has not been used at all).
719 .Ip "\fB\-pass-exit-codes\fR" 4
720 .IX Item "-pass-exit-codes"
721 Normally the \fBgcc\fR program will exit with the code of 1 if any
722 phase of the compiler returns a non-success return code.  If you specify
723 \&\fB\-pass-exit-codes\fR, the \fBgcc\fR program will instead return with
724 numerically highest error produced by any phase that returned an error
725 indication.
726 .PP
727 If you only want some of the stages of compilation, you can use
728 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
729 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
730 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
731 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
732 .Ip "\fB\-c\fR" 4
733 .IX Item "-c"
734 Compile or assemble the source files, but do not link.  The linking
735 stage simply is not done.  The ultimate output is in the form of an
736 object file for each source file.
737 .Sp
738 By default, the object file name for a source file is made by replacing
739 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
740 .Sp
741 Unrecognized input files, not requiring compilation or assembly, are
742 ignored.
743 .Ip "\fB\-S\fR" 4
744 .IX Item "-S"
745 Stop after the stage of compilation proper; do not assemble.  The output
746 is in the form of an assembler code file for each non-assembler input
747 file specified.
748 .Sp
749 By default, the assembler file name for a source file is made by
750 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
751 .Sp
752 Input files that don't require compilation are ignored.
753 .Ip "\fB\-E\fR" 4
754 .IX Item "-E"
755 Stop after the preprocessing stage; do not run the compiler proper.  The
756 output is in the form of preprocessed source code, which is sent to the
757 standard output.
758 .Sp
759 Input files which don't require preprocessing are ignored.
760 .Ip "\fB\-o\fR \fIfile\fR" 4
761 .IX Item "-o file"
762 Place output in file \fIfile\fR.  This applies regardless to whatever
763 sort of output is being produced, whether it be an executable file,
764 an object file, an assembler file or preprocessed C code.
765 .Sp
766 Since only one output file can be specified, it does not make sense to
767 use \fB\-o\fR when compiling more than one input file, unless you are
768 producing an executable file as output.
769 .Sp
770 If \fB\-o\fR is not specified, the default is to put an executable file
771 in \fIa.out\fR, the object file for \fI\fIsource\fI.\fIsuffix\fI\fR in
772 \&\fI\fIsource\fI.o\fR, its assembler file in \fI\fIsource\fI.s\fR, and
773 all preprocessed C source on standard output.
774 .Ip "\fB\-v\fR" 4
775 .IX Item "-v"
776 Print (on standard error output) the commands executed to run the stages
777 of compilation.  Also print the version number of the compiler driver
778 program and of the preprocessor and the compiler proper.
779 .Ip "\fB\-pipe\fR" 4
780 .IX Item "-pipe"
781 Use pipes rather than temporary files for communication between the
782 various stages of compilation.  This fails to work on some systems where
783 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
784 no trouble.
785 .Ip "\fB\*(--help\fR" 4
786 .IX Item "help"
787 Print (on the standard output) a description of the command line options
788 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
789 then \fB\*(--help\fR will also be passed on to the various processes
790 invoked by \fBgcc\fR, so that they can display the command line options
791 they accept.  If the \fB\-W\fR option is also specified then command
792 line options which have no documentation associated with them will also
793 be displayed.
794 .Ip "\fB\*(--target-help\fR" 4
795 .IX Item "target-help"
796 Print (on the standard output) a description of target specific command
797 line options for each tool.
798 .Sh "Compiling \*(C+ Programs"
799 .IX Subsection "Compiling  Programs"
800 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
801 \&\fB.cc\fR, \fB.cpp\fR, \fB.c++\fR, \fB.cp\fR, or \fB.cxx\fR;
802 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
803 files with these names and compiles them as \*(C+ programs even if you
804 call the compiler the same way as for compiling C programs (usually with
805 the name \fBgcc\fR).
806 .PP
807 However, \*(C+ programs often require class libraries as well as a
808 compiler that understands the \*(C+ language\-\-\-and under some
809 circumstances, you might want to compile programs from standard input,
810 or otherwise without a suffix that flags them as \*(C+ programs.
811 \&\fBg++\fR is a program that calls \s-1GCC\s0 with the default language
812 set to \*(C+, and automatically specifies linking against the \*(C+
813 library.  On many systems, \fBg++\fR is also
814 installed with the name \fBc++\fR.
815 .PP
816 When you compile \*(C+ programs, you may specify many of the same
817 command-line options that you use for compiling programs in any
818 language; or command-line options meaningful for C and related
819 languages; or options that are meaningful only for \*(C+ programs.
820 .Sh "Options Controlling C Dialect"
821 .IX Subsection "Options Controlling C Dialect"
822 The following options control the dialect of C (or languages derived
823 from C, such as \*(C+ and Objective C) that the compiler accepts:
824 .Ip "\fB\-ansi\fR" 4
825 .IX Item "-ansi"
826 In C mode, support all \s-1ISO\s0 C89 programs.  In \*(C+ mode,
827 remove \s-1GNU\s0 extensions that conflict with \s-1ISO\s0 \*(C+.
828 .Sp
829 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
830 C (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
831 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
832 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
833 type of system you are using.  It also enables the undesirable and
834 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler, 
835 it disables recognition of \*(C+ style \fB//\fR comments as well as
836 the \f(CW\*(C`inline\*(C'\fR keyword.
837 .Sp
838 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
839 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
840 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
841 course, but it is useful to put them in header files that might be included
842 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
843 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
844 without \fB\-ansi\fR.
845 .Sp
846 The \fB\-ansi\fR option does not cause non-ISO programs to be
847 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
848 addition to \fB\-ansi\fR.  
849 .Sp
850 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
851 option is used.  Some header files may notice this macro and refrain
852 from declaring certain functions or defining certain macros that the
853 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
854 programs that might use these names for other things.
855 .Sp
856 Functions which would normally be builtin but do not have semantics
857 defined by \s-1ISO\s0 C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not builtin
858 functions with \fB\-ansi\fR is used.  
859 .Ip "\fB\-std=\fR" 4
860 .IX Item "-std="
861 Determine the language standard.  A value for this option must be provided;
862 possible values are 
863 .RS 4
864 .Ip "\fBiso9899:1990\fR" 4
865 .IX Item "iso9899:1990"
866 Same as \fB\-ansi\fR
867 .Ip "\fBiso9899:199409\fR" 4
868 .IX Item "iso9899:199409"
869 \&\s-1ISO\s0 C as modified in amend. 1
870 .Ip "\fBiso9899:1999\fR" 4
871 .IX Item "iso9899:1999"
872 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
873 <\fBhttp://gcc.gnu.org/c99status.html\fR> for more information.
874 .Ip "\fBc89\fR" 4
875 .IX Item "c89"
876 same as \fB\-std=iso9899:1990\fR
877 .Ip "\fBc99\fR" 4
878 .IX Item "c99"
879 same as \fB\-std=iso9899:1999\fR
880 .Ip "\fBgnu89\fR" 4
881 .IX Item "gnu89"
882 default, iso9899:1990 + gnu extensions
883 .Ip "\fBgnu99\fR" 4
884 .IX Item "gnu99"
885 iso9899:1999 + gnu extensions
886 .Ip "\fBiso9899:199x\fR" 4
887 .IX Item "iso9899:199x"
888 same as \fB\-std=iso9899:1999\fR, deprecated
889 .Ip "\fBc9x\fR" 4
890 .IX Item "c9x"
891 same as \fB\-std=iso9899:1999\fR, deprecated
892 .Ip "\fBgnu9x\fR" 4
893 .IX Item "gnu9x"
894 same as \fB\-std=gnu99\fR, deprecated
895 .RE
896 .RS 4
897 .Sp
898 Even when this option is not specified, you can still use some of the
899 features of newer standards in so far as they do not conflict with
900 previous C standards.  For example, you may use \f(CW\*(C`_\|_restrict_\|_\*(C'\fR even
901 when \fB\-std=c99\fR is not specified.
902 .Sp
903 The \fB\-std\fR options specifying some version of \s-1ISO\s0 C have the same
904 effects as \fB\-ansi\fR, except that features that were not in \s-1ISO\s0 C89
905 but are in the specified version (for example, \fB//\fR comments and
906 the \f(CW\*(C`inline\*(C'\fR keyword in \s-1ISO\s0 C99) are not disabled.
907 .RE
908 .Ip "\fB\-fno-asm\fR" 4
909 .IX Item "-fno-asm"
910 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
911 keyword, so that code can use these words as identifiers.  You can use
912 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
913 instead.  \fB\-ansi\fR implies \fB\-fno-asm\fR.
914 .Sp
915 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
916 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
917 use the \fB\-fno-gnu-keywords\fR flag instead, which has the same
918 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
919 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
920 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
921 .Ip "\fB\-fno-builtin\fR" 4
922 .IX Item "-fno-builtin"
923 Don't recognize builtin functions that do not begin with
924 \&\fB_\|_builtin_\fR as prefix.  
925 .Sp
926 \&\s-1GCC\s0 normally generates special code to handle certain builtin functions
927 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
928 instructions that adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
929 may become inline copy loops.  The resulting code is often both smaller
930 and faster, but since the function calls no longer appear as such, you
931 cannot set a breakpoint on those calls, nor can you change the behavior
932 of the functions by linking with a different library.
933 .Ip "\fB\-fhosted\fR" 4
934 .IX Item "-fhosted"
935 Assert that compilation takes place in a hosted environment.  This implies
936 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
937 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
938 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
939 This is equivalent to \fB\-fno-freestanding\fR.
940 .Ip "\fB\-ffreestanding\fR" 4
941 .IX Item "-ffreestanding"
942 Assert that compilation takes place in a freestanding environment.  This
943 implies \fB\-fno-builtin\fR.  A freestanding environment
944 is one in which the standard library may not exist, and program startup may
945 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
946 This is equivalent to \fB\-fno-hosted\fR.
947 .Ip "\fB\-trigraphs\fR" 4
948 .IX Item "-trigraphs"
949 Support \s-1ISO\s0 C trigraphs.  You don't want to know about this
950 brain-damage.  The \fB\-ansi\fR option (and \fB\-std\fR options for
951 strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
952 .Ip "\fB\-traditional\fR" 4
953 .IX Item "-traditional"
954 Attempt to support some aspects of traditional C compilers.
955 Specifically:
956 .RS 4
957 .Ip "\(bu" 4
958 All \f(CW\*(C`extern\*(C'\fR declarations take effect globally even if they
959 are written inside of a function definition.  This includes implicit
960 declarations of functions.
961 .Ip "\(bu" 4
962 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
963 and \f(CW\*(C`volatile\*(C'\fR are not recognized.  (You can still use the
964 alternative keywords such as \f(CW\*(C`_\|_typeof_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR, and
965 so on.)
966 .Ip "\(bu" 4
967 Comparisons between pointers and integers are always allowed.
968 .Ip "\(bu" 4
969 Integer types \f(CW\*(C`unsigned short\*(C'\fR and \f(CW\*(C`unsigned char\*(C'\fR promote
970 to \f(CW\*(C`unsigned int\*(C'\fR.
971 .Ip "\(bu" 4
972 Out-of-range floating point literals are not an error.
973 .Ip "\(bu" 4
974 Certain constructs which \s-1ISO\s0 regards as a single invalid preprocessing
975 number, such as \fB0xe-0xd\fR, are treated as expressions instead.
976 .Ip "\(bu" 4
977 String ``constants'' are not necessarily constant; they are stored in
978 writable space, and identical looking constants are allocated
979 separately.  (This is the same as the effect of
980 \&\fB\-fwritable-strings\fR.)
981 .Ip "\(bu" 4
982 All automatic variables not declared \f(CW\*(C`register\*(C'\fR are preserved by
983 \&\f(CW\*(C`longjmp\*(C'\fR.  Ordinarily, \s-1GNU\s0 C follows \s-1ISO\s0 C: automatic variables
984 not declared \f(CW\*(C`volatile\*(C'\fR may be clobbered.
985 .Ip "\(bu" 4
986 The character escape sequences \fB\ex\fR and \fB\ea\fR evaluate as the
987 literal characters \fBx\fR and \fBa\fR respectively.  Without
988 \&\fB\-traditional\fR, \fB\ex\fR is a prefix for the hexadecimal
989 representation of a character, and \fB\ea\fR produces a bell.
990 .RE
991 .RS 4
992 .Sp
993 You may wish to use \fB\-fno-builtin\fR as well as \fB\-traditional\fR
994 if your program uses names that are normally \s-1GNU\s0 C builtin functions for
995 other purposes of its own.
996 .Sp
997 You cannot use \fB\-traditional\fR if you include any header files that
998 rely on \s-1ISO\s0 C features.  Some vendors are starting to ship systems with
999 \&\s-1ISO\s0 C header files and you cannot use \fB\-traditional\fR on such
1000 systems to compile files that include any system headers.
1001 .Sp
1002 The \fB\-traditional\fR option also enables \fB\-traditional-cpp\fR,
1003 which is described next.
1004 .RE
1005 .Ip "\fB\-traditional-cpp\fR" 4
1006 .IX Item "-traditional-cpp"
1007 Attempt to support some aspects of traditional C preprocessors.
1008 Specifically:
1009 .RS 4
1010 .Ip "\(bu" 4
1011 Comments convert to nothing at all, rather than to a space.  This allows
1012 traditional token concatenation.
1013 .Ip "\(bu" 4
1014 In a preprocessing directive, the \fB#\fR symbol must appear as the first
1015 character of a line.
1016 .Ip "\(bu" 4
1017 Macro arguments are recognized within string constants in a macro
1018 definition (and their values are stringified, though without additional
1019 quote marks, when they appear in such a context).  The preprocessor
1020 always considers a string constant to end at a newline.
1021 .Ip "\(bu" 4
1022 The predefined macro \f(CW\*(C`_\|_STDC_\|_\*(C'\fR is not defined when you use
1023 \&\fB\-traditional\fR, but \f(CW\*(C`_\|_GNUC_\|_\*(C'\fR is (since the \s-1GNU\s0 extensions
1024 which \f(CW\*(C`_\|_GNUC_\|_\*(C'\fR indicates are not affected by
1025 \&\fB\-traditional\fR).  If you need to write header files that work
1026 differently depending on whether \fB\-traditional\fR is in use, by
1027 testing both of these predefined macros you can distinguish four
1028 situations: \s-1GNU\s0 C, traditional \s-1GNU\s0 C, other \s-1ISO\s0 C compilers, and other
1029 old C compilers.  The predefined macro \f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR is also
1030 not defined when you use \fB\-traditional\fR.  
1031 .Ip "\(bu" 4
1032 The preprocessor considers a string constant to end at a newline (unless
1033 the newline is escaped with \fB\e\fR).  (Without \fB\-traditional\fR,
1034 string constants can contain the newline character as typed.)
1035 .RE
1036 .RS 4
1037 .RE
1038 .Ip "\fB\-fcond-mismatch\fR" 4
1039 .IX Item "-fcond-mismatch"
1040 Allow conditional expressions with mismatched types in the second and
1041 third arguments.  The value of such an expression is void.  This option
1042 is not supported for \*(C+.
1043 .Ip "\fB\-funsigned-char\fR" 4
1044 .IX Item "-funsigned-char"
1045 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1046 .Sp
1047 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1048 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1049 \&\f(CW\*(C`signed char\*(C'\fR by default.
1050 .Sp
1051 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1052 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1053 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1054 expect it to be signed, or expect it to be unsigned, depending on the
1055 machines they were written for.  This option, and its inverse, let you
1056 make such a program work with the opposite default.
1057 .Sp
1058 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1059 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1060 is always just like one of those two.
1061 .Ip "\fB\-fsigned-char\fR" 4
1062 .IX Item "-fsigned-char"
1063 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1064 .Sp
1065 Note that this is equivalent to \fB\-fno-unsigned-char\fR, which is
1066 the negative form of \fB\-funsigned-char\fR.  Likewise, the option
1067 \&\fB\-fno-signed-char\fR is equivalent to \fB\-funsigned-char\fR.
1068 .Sp
1069 You may wish to use \fB\-fno-builtin\fR as well as \fB\-traditional\fR
1070 if your program uses names that are normally \s-1GNU\s0 C builtin functions for
1071 other purposes of its own.
1072 .Sp
1073 You cannot use \fB\-traditional\fR if you include any header files that
1074 rely on \s-1ISO\s0 C features.  Some vendors are starting to ship systems with
1075 \&\s-1ISO\s0 C header files and you cannot use \fB\-traditional\fR on such
1076 systems to compile files that include any system headers.
1077 .Ip "\fB\-fsigned-bitfields\fR" 4
1078 .IX Item "-fsigned-bitfields"
1079 .PD 0
1080 .Ip "\fB\-funsigned-bitfields\fR" 4
1081 .IX Item "-funsigned-bitfields"
1082 .Ip "\fB\-fno-signed-bitfields\fR" 4
1083 .IX Item "-fno-signed-bitfields"
1084 .Ip "\fB\-fno-unsigned-bitfields\fR" 4
1085 .IX Item "-fno-unsigned-bitfields"
1086 .PD
1087 These options control whether a bitfield is signed or unsigned, when the
1088 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1089 default, such a bitfield is signed, because this is consistent: the
1090 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1091 .Sp
1092 However, when \fB\-traditional\fR is used, bitfields are all unsigned
1093 no matter what.
1094 .Ip "\fB\-fwritable-strings\fR" 4
1095 .IX Item "-fwritable-strings"
1096 Store string constants in the writable data segment and don't uniquize
1097 them.  This is for compatibility with old programs which assume they can
1098 write into string constants.  The option \fB\-traditional\fR also has
1099 this effect.
1100 .Sp
1101 Writing into string constants is a very bad idea; ``constants'' should
1102 be constant.
1103 .Ip "\fB\-fallow-single-precision\fR" 4
1104 .IX Item "-fallow-single-precision"
1105 Do not promote single precision math operations to double precision,
1106 even when compiling with \fB\-traditional\fR.
1107 .Sp
1108 Traditional K&R C promotes all floating point operations to double
1109 precision, regardless of the sizes of the operands.   On the
1110 architecture for which you are compiling, single precision may be faster
1111 than double precision.   If you must use \fB\-traditional\fR, but want
1112 to use single precision operations when the operands are single
1113 precision, use this option.   This option has no effect when compiling
1114 with \s-1ISO\s0 or \s-1GNU\s0 C conventions (the default).
1115 .Ip "\fB\-fshort-wchar\fR" 4
1116 .IX Item "-fshort-wchar"
1117 Override the underlying type for \fBwchar_t\fR to be \fBshort
1118 unsigned int\fR instead of the default for the target.  This option is
1119 useful for building programs to run under \s-1WINE\s0.
1120 .Sh "Options Controlling \*(C+ Dialect"
1121 .IX Subsection "Options Controlling  Dialect"
1122 This section describes the command-line options that are only meaningful
1123 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1124 regardless of what language your program is in.  For example, you
1125 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1126 .PP
1127 .Vb 1
1128 \&        g++ -g -frepo -O -c firstClass.C
1129 .Ve
1130 In this example, only \fB\-frepo\fR is an option meant
1131 only for \*(C+ programs; you can use the other options with any
1132 language supported by \s-1GCC\s0.
1133 .PP
1134 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1135 .Ip "\fB\-fno-access-control\fR" 4
1136 .IX Item "-fno-access-control"
1137 Turn off all access checking.  This switch is mainly useful for working
1138 around bugs in the access control code.
1139 .Ip "\fB\-fcheck-new\fR" 4
1140 .IX Item "-fcheck-new"
1141 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1142 before attempting to modify the storage allocated.  The current Working
1143 Paper requires that \f(CW\*(C`operator new\*(C'\fR never return a null pointer, so
1144 this check is normally unnecessary.
1145 .Sp
1146 An alternative to using this option is to specify that your
1147 \&\f(CW\*(C`operator new\*(C'\fR does not throw any exceptions; if you declare it
1148 \&\fB\f(BIthrow()\fB\fR, g++ will check the return value.  See also \fBnew
1149 (nothrow)\fR.
1150 .Ip "\fB\-fconserve-space\fR" 4
1151 .IX Item "-fconserve-space"
1152 Put uninitialized or runtime-initialized global variables into the
1153 common segment, as C does.  This saves space in the executable at the
1154 cost of not diagnosing duplicate definitions.  If you compile with this
1155 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1156 completed, you may have an object that is being destroyed twice because
1157 two definitions were merged.
1158 .Sp
1159 This option is no longer useful on most targets, now that support has
1160 been added for putting variables into \s-1BSS\s0 without making them common.
1161 .Ip "\fB\-fdollars-in-identifiers\fR" 4
1162 .IX Item "-fdollars-in-identifiers"
1163 Accept \fB$\fR in identifiers.  You can also explicitly prohibit use of
1164 \&\fB$\fR with the option \fB\-fno-dollars-in-identifiers\fR.  (\s-1GNU\s0 C allows
1165 \&\fB$\fR by default on most target systems, but there are a few exceptions.)
1166 Traditional C allowed the character \fB$\fR to form part of
1167 identifiers.  However, \s-1ISO\s0 C and \*(C+ forbid \fB$\fR in identifiers.
1168 .Ip "\fB\-fno-elide-constructors\fR" 4
1169 .IX Item "-fno-elide-constructors"
1170 The \*(C+ standard allows an implementation to omit creating a temporary
1171 which is only used to initialize another object of the same type.
1172 Specifying this option disables that optimization, and forces g++ to
1173 call the copy constructor in all cases.
1174 .Ip "\fB\-fno-enforce-eh-specs\fR" 4
1175 .IX Item "-fno-enforce-eh-specs"
1176 Don't check for violation of exception specifications at runtime.  This
1177 option violates the \*(C+ standard, but may be useful for reducing code
1178 size in production builds, much like defining \fB\s-1NDEBUG\s0\fR.  The compiler
1179 will still optimize based on the exception specifications.
1180 .Ip "\fB\-fexternal-templates\fR" 4
1181 .IX Item "-fexternal-templates"
1182 Cause template instantiations to obey \fB#pragma interface\fR and
1183 \&\fBimplementation\fR; template instances are emitted or not according
1184 to the location of the template definition.  
1185 .Sp
1186 This option is deprecated.
1187 .Ip "\fB\-falt-external-templates\fR" 4
1188 .IX Item "-falt-external-templates"
1189 Similar to \-fexternal-templates, but template instances are emitted or
1190 not according to the place where they are first instantiated.
1191 .Sp
1192 This option is deprecated.
1193 .Ip "\fB\-ffor-scope\fR" 4
1194 .IX Item "-ffor-scope"
1195 .PD 0
1196 .Ip "\fB\-fno-for-scope\fR" 4
1197 .IX Item "-fno-for-scope"
1198 .PD
1199 If \-ffor-scope is specified, the scope of variables declared in
1200 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1201 as specified by the \*(C+ standard.
1202 If \-fno-for-scope is specified, the scope of variables declared in
1203 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1204 as was the case in old versions of gcc, and other (traditional)
1205 implementations of \*(C+.
1206 .Sp
1207 The default if neither flag is given to follow the standard,
1208 but to allow and give a warning for old-style code that would
1209 otherwise be invalid, or have different behavior.
1210 .Ip "\fB\-fno-gnu-keywords\fR" 4
1211 .IX Item "-fno-gnu-keywords"
1212 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1213 word as an identifier. You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.  
1214 \&\fB\-ansi\fR implies \fB\-fno-gnu-keywords\fR.
1215 .Ip "\fB\-fhonor-std\fR" 4
1216 .IX Item "-fhonor-std"
1217 Treat the \f(CW\*(C`namespace std\*(C'\fR as a namespace, instead of ignoring
1218 it. For compatibility with earlier versions of g++, the compiler will,
1219 by default, ignore \f(CW\*(C`namespace\-declarations\*(C'\fR,
1220 \&\f(CW\*(C`using\-declarations\*(C'\fR, \f(CW\*(C`using\-directives\*(C'\fR, and
1221 \&\f(CW\*(C`namespace\-names\*(C'\fR, if they involve \f(CW\*(C`std\*(C'\fR.
1222 .Ip "\fB\-fhuge-objects\fR" 4
1223 .IX Item "-fhuge-objects"
1224 Support virtual function calls for objects that exceed the size
1225 representable by a \fBshort int\fR.  Users should not use this flag by
1226 default; if you need to use it, the compiler will tell you so.
1227 .Sp
1228 This flag is not useful when compiling with \-fvtable-thunks.
1229 .Sp
1230 Like all options that change the \s-1ABI\s0, all \*(C+ code, \fIincluding
1231 libgcc\fR must be built with the same setting of this option.
1232 .Ip "\fB\-fno-implicit-templates\fR" 4
1233 .IX Item "-fno-implicit-templates"
1234 Never emit code for non-inline templates which are instantiated
1235 implicitly (i.e. by use); only emit code for explicit instantiations.
1236 .Ip "\fB\-fno-implicit-inline-templates\fR" 4
1237 .IX Item "-fno-implicit-inline-templates"
1238 Don't emit code for implicit instantiations of inline templates, either.
1239 The default is to handle inlines differently so that compiles with and
1240 without optimization will need the same set of explicit instantiations.
1241 .Ip "\fB\-fno-implement-inlines\fR" 4
1242 .IX Item "-fno-implement-inlines"
1243 To save space, do not emit out-of-line copies of inline functions
1244 controlled by \fB#pragma implementation\fR.  This will cause linker
1245 errors if these functions are not inlined everywhere they are called.
1246 .Ip "\fB\-fms-extensions\fR" 4
1247 .IX Item "-fms-extensions"
1248 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
1249 int and getting a pointer to member function via non-standard syntax.
1250 .Ip "\fB\-fno-operator-names\fR" 4
1251 .IX Item "-fno-operator-names"
1252 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
1253 \&\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
1254 synonyms as keywords.
1255 .Ip "\fB\-fno-optional-diags\fR" 4
1256 .IX Item "-fno-optional-diags"
1257 Disable diagnostics that the standard says a compiler does not need to
1258 issue.  Currently, the only such diagnostic issued by g++ is the one for
1259 a name having multiple meanings within a class.
1260 .Ip "\fB\-fpermissive\fR" 4
1261 .IX Item "-fpermissive"
1262 Downgrade messages about nonconformant code from errors to warnings.  By
1263 default, g++ effectively sets \fB\-pedantic-errors\fR without
1264 \&\fB\-pedantic\fR; this option reverses that.  This behavior and this
1265 option are superseded by \fB\-pedantic\fR, which works as it does for \s-1GNU\s0 C.
1266 .Ip "\fB\-frepo\fR" 4
1267 .IX Item "-frepo"
1268 Enable automatic template instantiation.  This option also implies
1269 \&\fB\-fno-implicit-templates\fR.  
1270 .Ip "\fB\-fno-rtti\fR" 4
1271 .IX Item "-fno-rtti"
1272 Disable generation of information about every class with virtual
1273 functions for use by the \*(C+ runtime type identification features
1274 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
1275 of the language, you can save some space by using this flag.  Note that
1276 exception handling uses the same information, but it will generate it as
1277 needed.
1278 .Ip "\fB\-ftemplate-depth-\fR\fIn\fR" 4
1279 .IX Item "-ftemplate-depth-n"
1280 Set the maximum instantiation depth for template classes to \fIn\fR.
1281 A limit on the template instantiation depth is needed to detect
1282 endless recursions during template class instantiation. \s-1ANSI/ISO\s0 \*(C+
1283 conforming programs must not rely on a maximum depth greater than 17.
1284 .Ip "\fB\-fuse-cxa-atexit\fR" 4
1285 .IX Item "-fuse-cxa-atexit"
1286 Register destructors for objects with static storage duration with the
1287 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
1288 This option is required for fully standards-compliant handling of static
1289 destructors, but will only work if your C library supports
1290 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
1291 .Ip "\fB\-fvtable-thunks\fR" 4
1292 .IX Item "-fvtable-thunks"
1293 Use \fBthunks\fR to implement the virtual function dispatch table
1294 (\fBvtable\fR).  The traditional (cfront-style) approach to
1295 implementing vtables was to store a pointer to the function and two
1296 offsets for adjusting the \fBthis\fR pointer at the call site.  Newer
1297 implementations store a single pointer to a \fBthunk\fR function which
1298 does any necessary adjustment and then calls the target function.
1299 .Sp
1300 This option also enables a heuristic for controlling emission of
1301 vtables; if a class has any non-inline virtual functions, the vtable
1302 will be emitted in the translation unit containing the first one of
1303 those.
1304 .Sp
1305 Like all options that change the \s-1ABI\s0, all \*(C+ code, \fIincluding
1306 libgcc.a\fR must be built with the same setting of this option.
1307 .Ip "\fB\-nostdinc++\fR" 4
1308 .IX Item "-nostdinc++"
1309 Do not search for header files in the standard directories specific to
1310 \&\*(C+, but do still search the other standard directories.  (This option
1311 is used when building the \*(C+ library.)
1312 .PP
1313 In addition, these optimization, warning, and code generation options
1314 have meanings only for \*(C+ programs:
1315 .Ip "\fB\-fno-default-inline\fR" 4
1316 .IX Item "-fno-default-inline"
1317 Do not assume \fBinline\fR for functions defined inside a class scope.
1318   Note that these
1319 functions will have linkage like inline functions; they just won't be
1320 inlined by default.
1321 .Ip "\fB\-Wctor-dtor-privacy (\*(C+ only)\fR" 4
1322 .IX Item "-Wctor-dtor-privacy ( only)"
1323 Warn when a class seems unusable, because all the constructors or
1324 destructors in a class are private and the class has no friends or
1325 public static member functions.
1326 .Ip "\fB\-Wnon-virtual-dtor (\*(C+ only)\fR" 4
1327 .IX Item "-Wnon-virtual-dtor ( only)"
1328 Warn when a class declares a non-virtual destructor that should probably
1329 be virtual, because it looks like the class will be used polymorphically.
1330 .Ip "\fB\-Wreorder (\*(C+ only)\fR" 4
1331 .IX Item "-Wreorder ( only)"
1332 Warn when the order of member initializers given in the code does not
1333 match the order in which they must be executed.  For instance:
1334 .Sp
1335 .Vb 5
1336 \&        struct A {
1337 \&          int i;
1338 \&          int j;
1339 \&          A(): j (0), i (1) { }
1340 \&        };
1341 .Ve
1342 Here the compiler will warn that the member initializers for \fBi\fR
1343 and \fBj\fR will be rearranged to match the declaration order of the
1344 members.
1345 .PP
1346 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
1347 .Ip "\fB\-Weffc++ (\*(C+ only)\fR" 4
1348 .IX Item "-Weffc++ ( only)"
1349 Warn about violations of various style guidelines from Scott Meyers'
1350 \&\fIEffective \*(C+\fR books.  If you use this option, you should be aware
1351 that the standard library headers do not obey all of these guidelines;
1352 you can use \fBgrep \-v\fR to filter out those warnings.
1353 .Ip "\fB\-Wno-deprecated (\*(C+ only)\fR" 4
1354 .IX Item "-Wno-deprecated ( only)"
1355 Do not warn about usage of deprecated features. 
1356 .Ip "\fB\-Wno-non-template-friend (\*(C+ only)\fR" 4
1357 .IX Item "-Wno-non-template-friend ( only)"
1358 Disable warnings when non-templatized friend functions are declared
1359 within a template. With the advent of explicit template specification
1360 support in g++, if the name of the friend is an unqualified-id (ie,
1361 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
1362 friend declare or define an ordinary, nontemplate function. (Section
1363 14.5.3). Before g++ implemented explicit specification, unqualified-ids
1364 could be interpreted as a particular specialization of a templatized
1365 function. Because this non-conforming behavior is no longer the default
1366 behavior for g++, \fB\-Wnon-template-friend\fR allows the compiler to
1367 check existing code for potential trouble spots, and is on by default.
1368 This new compiler behavior can be turned off with
1369 \&\fB\-Wno-non-template-friend\fR which keeps the conformant compiler code
1370 but disables the helpful warning.
1371 .Ip "\fB\-Wold-style-cast (\*(C+ only)\fR" 4
1372 .IX Item "-Wold-style-cast ( only)"
1373 Warn if an old-style (C-style) cast is used within a \*(C+ program.  The
1374 new-style casts (\fBstatic_cast\fR, \fBreinterpret_cast\fR, and
1375 \&\fBconst_cast\fR) are less vulnerable to unintended effects.
1376 .Ip "\fB\-Woverloaded-virtual (\*(C+ only)\fR" 4
1377 .IX Item "-Woverloaded-virtual ( only)"
1378 Warn when a function declaration hides virtual functions from a
1379 base class.  For example, in:
1380 .Sp
1381 .Vb 3
1382 \&        struct A {
1383 \&          virtual void f();
1384 \&        };
1385 .Ve
1386 .Vb 3
1387 \&        struct B: public A {
1388 \&          void f(int);
1389 \&        };
1390 .Ve
1391 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
1392 like this:
1393 .Sp
1394 .Vb 2
1395 \&        B* b;
1396 \&        b->f();
1397 .Ve
1398 will fail to compile.
1399 .Ip "\fB\-Wno-pmf-conversions (\*(C+ only)\fR" 4
1400 .IX Item "-Wno-pmf-conversions ( only)"
1401 Disable the diagnostic for converting a bound pointer to member function
1402 to a plain pointer.
1403 .Ip "\fB\-Wsign-promo (\*(C+ only)\fR" 4
1404 .IX Item "-Wsign-promo ( only)"
1405 Warn when overload resolution chooses a promotion from unsigned or
1406 enumeral type to a signed type over a conversion to an unsigned type of
1407 the same size.  Previous versions of g++ would try to preserve
1408 unsignedness, but the standard mandates the current behavior.
1409 .Ip "\fB\-Wsynth (\*(C+ only)\fR" 4
1410 .IX Item "-Wsynth ( only)"
1411 Warn when g++'s synthesis behavior does not match that of cfront.  For
1412 instance:
1413 .Sp
1414 .Vb 4
1415 \&        struct A {
1416 \&          operator int ();
1417 \&          A& operator = (int);
1418 \&        };
1419 .Ve
1420 .Vb 5
1421 \&        main ()
1422 \&        {
1423 \&          A a,b;
1424 \&          a = b;
1425 \&        }
1426 .Ve
1427 In this example, g++ will synthesize a default \fBA& operator =
1428 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
1429 .Sh "Options to Control Diagnostic Messages Formatting"
1430 .IX Subsection "Options to Control Diagnostic Messages Formatting"
1431 Traditionally, diagnostic messages have been formatted irrespective of
1432 the output device's aspect (e.g. its width, ...).  The options described
1433 below can be used to control the diagnostic messages formatting
1434 algorithm, e.g. how many characters per line, how often source location
1435 information should be reported.  Right now, only the \*(C+ front-end can
1436 honor these options.  However it is expected, in the near future, that
1437 the remaining front-ends would be able to digest them correctly. 
1438 .Ip "\fB\-fmessage-length=\fR\fIn\fR" 4
1439 .IX Item "-fmessage-length=n"
1440 Try to format error messages so that they fit on lines of about \fIn\fR
1441 characters.  The default is 72 characters for g++ and 0 for the rest of
1442 the front-ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
1443 line-wrapping will be done; each error message will appear on a single 
1444 line.
1445 .Ip "\fB\-fdiagnostics-show-location=once\fR" 4
1446 .IX Item "-fdiagnostics-show-location=once"
1447 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
1448 reporter to emit \fIonce\fR source location information; that is, in
1449 case the message is too long to fit on a single physical line and has to
1450 be wrapped, the source location won't be emitted (as prefix) again,
1451 over and over, in subsequent continuation lines.  This is the default
1452 behaviour. 
1453 .Ip "\fB\-fdiagnostics-show-location=every-line\fR" 4
1454 .IX Item "-fdiagnostics-show-location=every-line"
1455 Only meaningful in line-wrapping mode.  Instructs the diagnostic
1456 messages reporter to emit the same source location information (as
1457 prefix) for physical lines that result from the process of breaking a
1458 a message which is too long to fit on a single line.
1459 .Sh "Options to Request or Suppress Warnings"
1460 .IX Subsection "Options to Request or Suppress Warnings"
1461 Warnings are diagnostic messages that report constructions which
1462 are not inherently erroneous but which are risky or suggest there
1463 may have been an error.
1464 .PP
1465 You can request many specific warnings with options beginning \fB\-W\fR,
1466 for example \fB\-Wimplicit\fR to request warnings on implicit
1467 declarations.  Each of these specific warning options also has a
1468 negative form beginning \fB\-Wno-\fR to turn off warnings;
1469 for example, \fB\-Wno-implicit\fR.  This manual lists only one of the
1470 two forms, whichever is not the default.
1471 .PP
1472 These options control the amount and kinds of warnings produced by \s-1GCC:\s0
1473 .Ip "\fB\-fsyntax-only\fR" 4
1474 .IX Item "-fsyntax-only"
1475 Check the code for syntax errors, but don't do anything beyond that.
1476 .Ip "\fB\-pedantic\fR" 4
1477 .IX Item "-pedantic"
1478 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
1479 reject all programs that use forbidden extensions, and some other
1480 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
1481 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
1482 .Sp
1483 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
1484 this option (though a rare few will require \fB\-ansi\fR or a
1485 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
1486 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
1487 features are supported as well.  With this option, they are rejected.
1488 .Sp
1489 \&\fB\-pedantic\fR does not cause warning messages for use of the
1490 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
1491 warnings are also disabled in the expression that follows
1492 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
1493 these escape routes; application programs should avoid them.
1494 .Sp
1495 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
1496 C conformance.  They soon find that it does not do quite what they want:
1497 it finds some non-ISO practices, but not all\-\-\-only those for which
1498 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
1499 diagnostics have been added.
1500 .Sp
1501 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
1502 some instances, but would require considerable additional work and would
1503 be quite different from \fB\-pedantic\fR.  We don't have plans to
1504 support such a feature in the near future.
1505 .Ip "\fB\-pedantic-errors\fR" 4
1506 .IX Item "-pedantic-errors"
1507 Like \fB\-pedantic\fR, except that errors are produced rather than
1508 warnings.
1509 .Ip "\fB\-w\fR" 4
1510 .IX Item "-w"
1511 Inhibit all warning messages.
1512 .Ip "\fB\-Wno-import\fR" 4
1513 .IX Item "-Wno-import"
1514 Inhibit warning messages about the use of \fB#import\fR.
1515 .Ip "\fB\-Wchar-subscripts\fR" 4
1516 .IX Item "-Wchar-subscripts"
1517 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
1518 of error, as programmers often forget that this type is signed on some
1519 machines.
1520 .Ip "\fB\-Wcomment\fR" 4
1521 .IX Item "-Wcomment"
1522 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
1523 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
1524 .Ip "\fB\-Wformat\fR" 4
1525 .IX Item "-Wformat"
1526 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
1527 the arguments supplied have types appropriate to the format string
1528 specified, and that the conversions specified in the format string make
1529 sense.  This includes standard functions, and others specified by format
1530 attributes, in the \f(CW\*(C`printf\*(C'\fR,
1531 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
1532 not in the C standard) families.
1533 .Sp
1534 The formats are checked against the format features supported by \s-1GNU\s0
1535 libc version 2.2.  These include all \s-1ISO\s0 C89 and C99 features, as well
1536 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
1537 extensions.  Other library implementations may not support all these
1538 features; \s-1GCC\s0 does not support warning about features that go beyond a
1539 particular library's limitations.  However, if \fB\-pedantic\fR is used
1540 with \fB\-Wformat\fR, warnings will be given about format features not
1541 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
1542 since those are not in any version of the C standard).  
1543 .Sp
1544 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
1545 aspects of format checking, the options \fB\-Wno-format-y2k\fR,
1546 \&\fB\-Wno-format-extra-args\fR, \fB\-Wformat-nonliteral\fR,
1547 \&\fB\-Wformat-security\fR and \fB\-Wformat=2\fR are available, but are
1548 not included in \fB\-Wall\fR.
1549 .Ip "\fB\-Wno-format-y2k\fR" 4
1550 .IX Item "-Wno-format-y2k"
1551 If \fB\-Wformat\fR is specified, do not warn about \f(CW\*(C`strftime\*(C'\fR
1552 formats which may yield only a two-digit year.
1553 .Ip "\fB\-Wno-format-extra-args\fR" 4
1554 .IX Item "-Wno-format-extra-args"
1555 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
1556 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
1557 that such arguments are ignored.
1558 .Ip "\fB\-Wformat-nonliteral\fR" 4
1559 .IX Item "-Wformat-nonliteral"
1560 If \fB\-Wformat\fR is specified, also warn if the format string is not a
1561 string literal and so cannot be checked, unless the format function
1562 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
1563 .Ip "\fB\-Wformat-security\fR" 4
1564 .IX Item "-Wformat-security"
1565 If \fB\-Wformat\fR is specified, also warn about uses of format
1566 functions that represent possible security problems.  At present, this
1567 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
1568 format string is not a string literal and there are no format arguments,
1569 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
1570 string came from untrusted input and contains \fB%n\fR.  (This is
1571 currently a subset of what \fB\-Wformat-nonliteral\fR warns about, but
1572 in future warnings may be added to \fB\-Wformat-security\fR that are not
1573 included in \fB\-Wformat-nonliteral\fR.)
1574 .Ip "\fB\-Wformat=2\fR" 4
1575 .IX Item "-Wformat=2"
1576 Enable \fB\-Wformat\fR plus format checks not included in
1577 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
1578 \&\-Wformat-nonliteral \-Wformat-security\fR.
1579 .Ip "\fB\-Wimplicit-int\fR" 4
1580 .IX Item "-Wimplicit-int"
1581 Warn when a declaration does not specify a type.
1582 .Ip "\fB\-Wimplicit-function-declaration\fR" 4
1583 .IX Item "-Wimplicit-function-declaration"
1584 .PD 0
1585 .Ip "\fB\-Werror-implicit-function-declaration\fR" 4
1586 .IX Item "-Werror-implicit-function-declaration"
1587 .PD
1588 Give a warning (or error) whenever a function is used before being
1589 declared.
1590 .Ip "\fB\-Wimplicit\fR" 4
1591 .IX Item "-Wimplicit"
1592 Same as \fB\-Wimplicit-int\fR and \fB\-Wimplicit-function-\fR\fBdeclaration\fR.
1593 .Ip "\fB\-Wmain\fR" 4
1594 .IX Item "-Wmain"
1595 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be a
1596 function with external linkage, returning int, taking either zero
1597 arguments, two, or three arguments of appropriate types.
1598 .Ip "\fB\-Wmultichar\fR" 4
1599 .IX Item "-Wmultichar"
1600 Warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.  Usually they
1601 indicate a typo in the user's code, as they have implementation-defined
1602 values, and should not be used in portable code.
1603 .Ip "\fB\-Wparentheses\fR" 4
1604 .IX Item "-Wparentheses"
1605 Warn if parentheses are omitted in certain contexts, such
1606 as when there is an assignment in a context where a truth value
1607 is expected, or when operators are nested whose precedence people
1608 often get confused about.
1609 .Sp
1610 Also warn about constructions where there may be confusion to which
1611 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
1612 such a case:
1613 .Sp
1614 .Vb 7
1615 \&        {
1616 \&          if (a)
1617 \&            if (b)
1618 \&              foo ();
1619 \&          else
1620 \&            bar ();
1621 \&        }
1622 .Ve
1623 In C, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible \f(CW\*(C`if\*(C'\fR
1624 statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is often not
1625 what the programmer expected, as illustrated in the above example by
1626 indentation the programmer chose.  When there is the potential for this
1627 confusion, \s-1GNU\s0 C will issue a warning when this flag is specified.
1628 To eliminate the warning, add explicit braces around the innermost
1629 \&\f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR could belong to
1630 the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would look like this:
1631 .Sp
1632 .Vb 9
1633 \&        {
1634 \&          if (a)
1635 \&            {
1636 \&              if (b)
1637 \&                foo ();
1638 \&              else
1639 \&                bar ();
1640 \&            }
1641 \&        }
1642 .Ve
1643 .Ip "\fB\-Wsequence-point\fR" 4
1644 .IX Item "-Wsequence-point"
1645 Warn about code that may have undefined semantics because of violations
1646 of sequence point rules in the C standard.
1647 .Sp
1648 The C standard defines the order in which expressions in a C program are
1649 evaluated in terms of \fIsequence points\fR, which represent a partial
1650 ordering between the execution of parts of the program: those executed
1651 before the sequence point, and those executed after it.  These occur
1652 after the evaluation of a full expression (one which is not part of a
1653 larger expression), after the evaluation of the first operand of a
1654 \&\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
1655 function is called (but after the evaluation of its arguments and the
1656 expression denoting the called function), and in certain other places.
1657 Other than as expressed by the sequence point rules, the order of
1658 evaluation of subexpressions of an expression is not specified.  All
1659 these rules describe only a partial order rather than a total order,
1660 since, for example, if two functions are called within one expression
1661 with no sequence point between them, the order in which the functions
1662 are called is not specified.  However, the standards committee have
1663 ruled that function calls do not overlap.
1664 .Sp
1665 It is not specified when between sequence points modifications to the
1666 values of objects take effect.  Programs whose behavior depends on this
1667 have undefined behavior; the C standard specifies that ``Between the
1668 previous and next sequence point an object shall have its stored value
1669 modified at most once by the evaluation of an expression.  Furthermore,
1670 the prior value shall be read only to determine the value to be
1671 stored.''.  If a program breaks these rules, the results on any
1672 particular implementation are entirely unpredictable.
1673 .Sp
1674 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
1675 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
1676 diagnosed by this option, and it may give an occasional false positive
1677 result, but in general it has been found fairly effective at detecting
1678 this sort of problem in programs.
1679 .Sp
1680 The present implementation of this option only works for C programs.  A
1681 future implementation may also work for \*(C+ programs.
1682 .Sp
1683 There is some controversy over the precise meaning of the sequence point
1684 rules in subtle cases.  Alternative formal definitions may be found in
1685 Clive Feather's ``Annex S''
1686 <\fBhttp://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n925.htm\fR> and in
1687 Michael Norrish's thesis
1688 <\fBhttp://www.cl.cam.ac.uk/users/mn200/PhD/thesis-report.ps.gz\fR>.
1689 Other discussions are by Raymond Mak
1690 <\fBhttp://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n926.htm\fR> and
1691 D. Hugh Redelmeier
1692 <\fBhttp://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n927.htm\fR>.
1693 .Ip "\fB\-Wreturn-type\fR" 4
1694 .IX Item "-Wreturn-type"
1695 Warn whenever a function is defined with a return-type that defaults to
1696 \&\f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
1697 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR. 
1698 .Sp
1699 For \*(C+, a function without return type always produces a diagnostic
1700 message, even when \fB\-Wno-return-type\fR is specified. The only
1701 exceptions are \fBmain\fR and functions defined in system headers.
1702 .Ip "\fB\-Wswitch\fR" 4
1703 .IX Item "-Wswitch"
1704 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumeral type
1705 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
1706 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
1707 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
1708 provoke warnings when this option is used.
1709 .Ip "\fB\-Wtrigraphs\fR" 4
1710 .IX Item "-Wtrigraphs"
1711 Warn if any trigraphs are encountered that might change the meaning of
1712 the program (trigraphs within comments are not warned about).
1713 .Ip "\fB\-Wunused-function\fR" 4
1714 .IX Item "-Wunused-function"
1715 Warn whenever a static function is declared but not defined or a
1716 non\e-inline static function is unused.
1717 .Ip "\fB\-Wunused-label\fR" 4
1718 .IX Item "-Wunused-label"
1719 Warn whenever a label is declared but not used.
1720 .Sp
1721 To suppress this warning use the \fBunused\fR attribute.
1722 .Ip "\fB\-Wunused-parameter\fR" 4
1723 .IX Item "-Wunused-parameter"
1724 Warn whenever a function parameter is unused aside from its declaration.
1725 .Sp
1726 To suppress this warning use the \fBunused\fR attribute.
1727 .Ip "\fB\-Wunused-variable\fR" 4
1728 .IX Item "-Wunused-variable"
1729 Warn whenever a local variable or non-constant static variable is unused
1730 aside from its declaration
1731 .Sp
1732 To suppress this warning use the \fBunused\fR attribute.
1733 .Ip "\fB\-Wunused-value\fR" 4
1734 .IX Item "-Wunused-value"
1735 Warn whenever a statement computes a result that is explicitly not used.
1736 .Sp
1737 To suppress this warning cast the expression to \fBvoid\fR.
1738 .Ip "\fB\-Wunused\fR" 4
1739 .IX Item "-Wunused"
1740 All all the above \fB\-Wunused\fR options combined.
1741 .Sp
1742 In order to get a warning about an unused function parameter, you must
1743 either specify \fB\-W \-Wunused\fR or separately specify
1744 \&\fB\-Wunused-parameter\fR.
1745 .Ip "\fB\-Wuninitialized\fR" 4
1746 .IX Item "-Wuninitialized"
1747 Warn if an automatic variable is used without first being initialized or
1748 if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call.
1749 .Sp
1750 These warnings are possible only in optimizing compilation,
1751 because they require data flow information that is computed only
1752 when optimizing.  If you don't specify \fB\-O\fR, you simply won't
1753 get these warnings.
1754 .Sp
1755 These warnings occur only for variables that are candidates for
1756 register allocation.  Therefore, they do not occur for a variable that
1757 is declared \f(CW\*(C`volatile\*(C'\fR, or whose address is taken, or whose size
1758 is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
1759 structures, unions or arrays, even when they are in registers.
1760 .Sp
1761 Note that there may be no warning about a variable that is used only
1762 to compute a value that itself is never used, because such
1763 computations may be deleted by data flow analysis before the warnings
1764 are printed.
1765 .Sp
1766 These warnings are made optional because \s-1GCC\s0 is not smart
1767 enough to see all the reasons why the code might be correct
1768 despite appearing to have an error.  Here is one example of how
1769 this can happen:
1770 .Sp
1771 .Vb 12
1772 \&        {
1773 \&          int x;
1774 \&          switch (y)
1775 \&            {
1776 \&            case 1: x = 1;
1777 \&              break;
1778 \&            case 2: x = 4;
1779 \&              break;
1780 \&            case 3: x = 5;
1781 \&            }
1782 \&          foo (x);
1783 \&        }
1784 .Ve
1785 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
1786 always initialized, but \s-1GCC\s0 doesn't know this.  Here is
1787 another common case:
1788 .Sp
1789 .Vb 6
1790 \&        {
1791 \&          int save_y;
1792 \&          if (change_y) save_y = y, y = new_y;
1793 \&          ...
1794 \&          if (change_y) y = save_y;
1795 \&        }
1796 .Ve
1797 This has no bug because \f(CW\*(C`save_y\*(C'\fR is used only if it is set.
1798 .Sp
1799 This option also warns when a non-volatile automatic variable might be
1800 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
1801 only in optimizing compilation.
1802 .Sp
1803 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
1804 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
1805 call it at any point in the code.  As a result, you may get a warning
1806 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
1807 in fact be called at the place which would cause a problem.
1808 .Sp
1809 Some spurious warnings can be avoided if you declare all the functions
1810 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.  
1811 .Ip "\fB\-Wreorder (\*(C+ only)\fR" 4
1812 .IX Item "-Wreorder ( only)"
1813 Warn when the order of member initializers given in the code does not
1814 match the order in which they must be executed.  For instance:
1815 .Ip "\fB\-Wunknown-pragmas\fR" 4
1816 .IX Item "-Wunknown-pragmas"
1817 Warn when a #pragma directive is encountered which is not understood by
1818 \&\s-1GCC\s0.  If this command line option is used, warnings will even be issued
1819 for unknown pragmas in system header files.  This is not the case if
1820 the warnings were only enabled by the \fB\-Wall\fR command line option.
1821 .Ip "\fB\-Wall\fR" 4
1822 .IX Item "-Wall"
1823 All of the above \fB\-W\fR options combined.  This enables all the
1824 warnings about constructions that some users consider questionable, and
1825 that are easy to avoid (or modify to prevent the warning), even in
1826 conjunction with macros.
1827 .Ip "\fB\-Wsystem-headers\fR" 4
1828 .IX Item "-Wsystem-headers"
1829 Print warning messages for constructs found in system header files.
1830 Warnings from system headers are normally suppressed, on the assumption
1831 that they usually do not indicate real problems and would only make the
1832 compiler output harder to read.  Using this command line option tells
1833 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
1834 code.  However, note that using \fB\-Wall\fR in conjunction with this
1835 option will \fInot\fR warn about unknown pragmas in system
1836 headers\-\-\-for that, \fB\-Wunknown-pragmas\fR must also be used.
1837 .PP
1838 The following \fB\-W...\fR options are not implied by \fB\-Wall\fR.
1839 Some of them warn about constructions that users generally do not
1840 consider questionable, but which occasionally you might wish to check
1841 for; others warn about constructions that are necessary or hard to avoid
1842 in some cases, and there is no simple way to modify the code to suppress
1843 the warning.
1844 .Ip "\fB\-W\fR" 4
1845 .IX Item "-W"
1846 Print extra warning messages for these events:
1847 .RS 4
1848 .Ip "\(bu" 4
1849 A function can return either with or without a value.  (Falling
1850 off the end of the function body is considered returning without
1851 a value.)  For example, this function would evoke such a
1852 warning:
1853 .Sp
1854 .Vb 5
1855 \&        foo (a)
1856 \&        {
1857 \&          if (a > 0)
1858 \&            return a;
1859 \&        }
1860 .Ve
1861 .Ip "\(bu" 4
1862 An expression-statement or the left-hand side of a comma expression
1863 contains no side effects.
1864 To suppress the warning, cast the unused expression to void.
1865 For example, an expression such as \fBx[i,j]\fR will cause a warning,
1866 but \fBx[(void)i,j]\fR will not.
1867 .Ip "\(bu" 4
1868 An unsigned value is compared against zero with \fB<\fR or \fB<=\fR.
1869 .Ip "\(bu" 4
1870 A comparison like \fBx<=y<=z\fR appears; this is equivalent to
1871 \&\fB(x<=y ? 1 : 0) <= z\fR, which is a different interpretation from
1872 that of ordinary mathematical notation.
1873 .Ip "\(bu" 4
1874 Storage-class specifiers like \f(CW\*(C`static\*(C'\fR are not the first things in
1875 a declaration.  According to the C Standard, this usage is obsolescent.
1876 .Ip "\(bu" 4
1877 The return type of a function has a type qualifier such as \f(CW\*(C`const\*(C'\fR.
1878 Such a type qualifier has no effect, since the value returned by a
1879 function is not an lvalue.  (But don't warn about the \s-1GNU\s0 extension of
1880 \&\f(CW\*(C`volatile void\*(C'\fR return types.  That extension will be warned about
1881 if \fB\-pedantic\fR is specified.)
1882 .Ip "\(bu" 4
1883 If \fB\-Wall\fR or \fB\-Wunused\fR is also specified, warn about unused
1884 arguments.
1885 .Ip "\(bu" 4
1886 A comparison between signed and unsigned values could produce an
1887 incorrect result when the signed value is converted to unsigned.
1888 (But don't warn if \fB\-Wno-sign-compare\fR is also specified.)
1889 .Ip "\(bu" 4
1890 An aggregate has a partly bracketed initializer.
1891 For example, the following code would evoke such a warning,
1892 because braces are missing around the initializer for \f(CW\*(C`x.h\*(C'\fR:
1893 .Sp
1894 .Vb 3
1895 \&        struct s { int f, g; };
1896 \&        struct t { struct s h; int i; };
1897 \&        struct t x = { 1, 2, 3 };
1898 .Ve
1899 .Ip "\(bu" 4
1900 An aggregate has an initializer which does not initialize all members.
1901 For example, the following code would cause such a warning, because
1902 \&\f(CW\*(C`x.h\*(C'\fR would be implicitly initialized to zero:
1903 .Sp
1904 .Vb 2
1905 \&        struct s { int f, g, h; };
1906 \&        struct s x = { 3, 4 };
1907 .Ve
1908 .RE
1909 .RS 4
1910 .RE
1911 .Ip "\fB\-Wfloat-equal\fR" 4
1912 .IX Item "-Wfloat-equal"
1913 Warn if floating point values are used in equality comparisons.
1914 .Sp
1915 The idea behind this is that sometimes it is convenient (for the
1916 programmer) to consider floating-point values as approximations to
1917 infinitely precise real numbers.  If you are doing this, then you need
1918 to compute (by analysing the code, or in some other way) the maximum or
1919 likely maximum error that the computation introduces, and allow for it
1920 when performing comparisons (and when producing output, but that's a
1921 different problem).  In particular, instead of testing for equality, you
1922 would check to see whether the two values have ranges that overlap; and
1923 this is done with the relational operators, so equality comparisons are
1924 probably mistaken.
1925 .Ip "\fB\-Wtraditional (C only)\fR" 4
1926 .IX Item "-Wtraditional (C only)"
1927 Warn about certain constructs that behave differently in traditional and
1928 \&\s-1ISO\s0 C.
1929 .RS 4
1930 .Ip "\(bu" 4
1931 Macro parameters that appear within string literals in the macro body.
1932 In traditional C macro replacement takes place within string literals,
1933 but does not in \s-1ISO\s0 C.
1934 .Ip "\(bu" 4
1935 In traditional C, some preprocessor directives did not exist.
1936 Traditional preprocessors would only consider a line to be a directive
1937 if the \fB#\fR appeared in column 1 on the line.  Therefore
1938 \&\fB\-Wtraditional\fR warns about directives that traditional C
1939 understands but would ignore because the \fB#\fR does not appear as the
1940 first character on the line.  It also suggests you hide directives like
1941 \&\fB#pragma\fR not understood by traditional C by indenting them.  Some
1942 traditional implementations would not recognise \fB#elif\fR, so it
1943 suggests avoiding it altogether.
1944 .Ip "\(bu" 4
1945 A function-like macro that appears without arguments.
1946 .Ip "\(bu" 4
1947 The unary plus operator.
1948 .Ip "\(bu" 4
1949 The `U' integer constant suffix, or the `F' or `L' floating point
1950 constant suffixes.  (Traditonal C does support the `L' suffix on integer
1951 constants.)  Note, these suffixes appear in macros defined in the system
1952 headers of most modern systems, e.g. the _MIN/_MAX macros in limits.h.
1953 Use of these macros can lead to spurious warnings as they do not
1954 necessarily reflect whether the code in question is any less portable to
1955 traditional C given that suitable backup definitions are provided.
1956 .Ip "\(bu" 4
1957 A function declared external in one block and then used after the end of
1958 the block.
1959 .Ip "\(bu" 4
1960 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
1961 .Ip "\(bu" 4
1962 A non-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
1963 This construct is not accepted by some traditional C compilers.
1964 .Ip "\(bu" 4
1965 The \s-1ISO\s0 type of an integer constant has a different width or
1966 signedness from its traditional type.  This warning is only issued if
1967 the base of the constant is ten.  I.e. hexadecimal or octal values, which
1968 typically represent bit patterns, are not warned about.
1969 .Ip "\(bu" 4
1970 Usage of \s-1ISO\s0 string concatenation is detected.
1971 .Ip "\(bu" 4
1972 Initialization of automatic aggregates.
1973 .Ip "\(bu" 4
1974 Identifier conflicts with labels.  Traditional C lacks a separate
1975 namespace for labels.
1976 .Ip "\(bu" 4
1977 Initialization of unions.  If the initializer is zero, the warning is
1978 omitted.  This is done under the assumption that the zero initializer in
1979 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
1980 initializer warnings and relies on default initialization to zero in the
1981 traditional C case.
1982 .RE
1983 .RS 4
1984 .RE
1985 .Ip "\fB\-Wundef\fR" 4
1986 .IX Item "-Wundef"
1987 Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
1988 .Ip "\fB\-Wshadow\fR" 4
1989 .IX Item "-Wshadow"
1990 Warn whenever a local variable shadows another local variable.
1991 .Ip "\fB\-Wid-clash-\fR\fIlen\fR" 4
1992 .IX Item "-Wid-clash-len"
1993 Warn whenever two distinct identifiers match in the first \fIlen\fR
1994 characters.  This may help you prepare a program that will compile
1995 with certain obsolete, brain-damaged compilers.
1996 .Ip "\fB\-Wlarger-than-\fR\fIlen\fR" 4
1997 .IX Item "-Wlarger-than-len"
1998 Warn whenever an object of larger than \fIlen\fR bytes is defined.
1999 .Ip "\fB\-Wpointer-arith\fR" 4
2000 .IX Item "-Wpointer-arith"
2001 Warn about anything that depends on the ``size of'' a function type or
2002 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
2003 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
2004 to functions.
2005 .Ip "\fB\-Wbad-function-cast (C only)\fR" 4
2006 .IX Item "-Wbad-function-cast (C only)"
2007 Warn whenever a function call is cast to a non-matching type.
2008 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
2009 .Ip "\fB\-Wcast-qual\fR" 4
2010 .IX Item "-Wcast-qual"
2011 Warn whenever a pointer is cast so as to remove a type qualifier from
2012 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
2013 to an ordinary \f(CW\*(C`char *\*(C'\fR.
2014 .Ip "\fB\-Wcast-align\fR" 4
2015 .IX Item "-Wcast-align"
2016 Warn whenever a pointer is cast such that the required alignment of the
2017 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
2018 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
2019 two- or four-byte boundaries.
2020 .Ip "\fB\-Wwrite-strings\fR" 4
2021 .IX Item "-Wwrite-strings"
2022 Give string constants the type \f(CW\*(C`const char[\f(CIlength\f(CW]\*(C'\fR so that
2023 copying the address of one into a non-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR
2024 pointer will get a warning.  These warnings will help you find at
2025 compile time code that can try to write into a string constant, but
2026 only if you have been very careful about using \f(CW\*(C`const\*(C'\fR in
2027 declarations and prototypes.  Otherwise, it will just be a nuisance;
2028 this is why we did not make \fB\-Wall\fR request these warnings.
2029 .Ip "\fB\-Wconversion\fR" 4
2030 .IX Item "-Wconversion"
2031 Warn if a prototype causes a type conversion that is different from what
2032 would happen to the same argument in the absence of a prototype.  This
2033 includes conversions of fixed point to floating and vice versa, and
2034 conversions changing the width or signedness of a fixed point argument
2035 except when the same as the default promotion.
2036 .Sp
2037 Also, warn if a negative integer constant expression is implicitly
2038 converted to an unsigned type.  For example, warn about the assignment
2039 \&\f(CW\*(C`x = \-1\*(C'\fR if \f(CW\*(C`x\*(C'\fR is unsigned.  But do not warn about explicit
2040 casts like \f(CW\*(C`(unsigned) \-1\*(C'\fR.
2041 .Ip "\fB\-Wsign-compare\fR" 4
2042 .IX Item "-Wsign-compare"
2043 Warn when a comparison between signed and unsigned values could produce
2044 an incorrect result when the signed value is converted to unsigned.
2045 This warning is also enabled by \fB\-W\fR; to get the other warnings
2046 of \fB\-W\fR without this warning, use \fB\-W \-Wno-sign-compare\fR.
2047 .Ip "\fB\-Waggregate-return\fR" 4
2048 .IX Item "-Waggregate-return"
2049 Warn if any functions that return structures or unions are defined or
2050 called.  (In languages where you can return an array, this also elicits
2051 a warning.)
2052 .Ip "\fB\-Wstrict-prototypes (C only)\fR" 4
2053 .IX Item "-Wstrict-prototypes (C only)"
2054 Warn if a function is declared or defined without specifying the
2055 argument types.  (An old-style function definition is permitted without
2056 a warning if preceded by a declaration which specifies the argument
2057 types.)
2058 .Ip "\fB\-Wmissing-prototypes (C only)\fR" 4
2059 .IX Item "-Wmissing-prototypes (C only)"
2060 Warn if a global function is defined without a previous prototype
2061 declaration.  This warning is issued even if the definition itself
2062 provides a prototype.  The aim is to detect global functions that fail
2063 to be declared in header files.
2064 .Ip "\fB\-Wmissing-declarations\fR" 4
2065 .IX Item "-Wmissing-declarations"
2066 Warn if a global function is defined without a previous declaration.
2067 Do so even if the definition itself provides a prototype.
2068 Use this option to detect global functions that are not declared in
2069 header files.
2070 .Ip "\fB\-Wmissing-noreturn\fR" 4
2071 .IX Item "-Wmissing-noreturn"
2072 Warn about functions which might be candidates for attribute \f(CW\*(C`noreturn\*(C'\fR.
2073 Note these are only possible candidates, not absolute ones.  Care should
2074 be taken to manually verify functions actually do not ever return before
2075 adding the \f(CW\*(C`noreturn\*(C'\fR attribute, otherwise subtle code generation
2076 bugs could be introduced.  You will not get a warning for \f(CW\*(C`main\*(C'\fR in
2077 hosted C environments.
2078 .Ip "\fB\-Wmissing-format-attribute\fR" 4
2079 .IX Item "-Wmissing-format-attribute"
2080 If \fB\-Wformat\fR is enabled, also warn about functions which might be
2081 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Note these are only possible
2082 candidates, not absolute ones.  \s-1GCC\s0 will guess that \f(CW\*(C`format\*(C'\fR
2083 attributes might be appropriate for any function that calls a function
2084 like \f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
2085 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
2086 appropriate may not be detected.  This option has no effect unless
2087 \&\fB\-Wformat\fR is enabled (possibly by \fB\-Wall\fR).
2088 .Ip "\fB\-Wpacked\fR" 4
2089 .IX Item "-Wpacked"
2090 Warn if a structure is given the packed attribute, but the packed
2091 attribute has no effect on the layout or size of the structure.  
2092 Such structures may be mis-aligned for little benefit.  For
2093 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
2094 will be misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
2095 have the packed attribute:
2096 .Sp
2097 .Vb 8
2098 \&        struct foo {
2099 \&          int x;
2100 \&          char a, b, c, d;
2101 \&        } __attribute__((packed));
2102 \&        struct bar {
2103 \&          char z;
2104 \&          struct foo f;
2105 \&        };
2106 .Ve
2107 .Ip "\fB\-Wpadded\fR" 4
2108 .IX Item "-Wpadded"
2109 Warn if padding is included in a structure, either to align an element
2110 of the structure or to align the whole structure.  Sometimes when this
2111 happens it is possible to rearrange the fields of the structure to
2112 reduce the padding and so make the structure smaller.
2113 .Ip "\fB\-Wredundant-decls\fR" 4
2114 .IX Item "-Wredundant-decls"
2115 Warn if anything is declared more than once in the same scope, even in
2116 cases where multiple declaration is valid and changes nothing.
2117 .Ip "\fB\-Wnested-externs (C only)\fR" 4
2118 .IX Item "-Wnested-externs (C only)"
2119 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
2120 .Ip "\fB\-Wunreachable-code\fR" 4
2121 .IX Item "-Wunreachable-code"
2122 Warn if the compiler detects that code will never be executed.
2123 .Sp
2124 This option is intended to warn when the compiler detects that at
2125 least a whole line of source code will never be executed, because
2126 some condition is never satisfied or because it is after a
2127 procedure that never returns.
2128 .Sp
2129 It is possible for this option to produce a warning even though there
2130 are circumstances under which part of the affected line can be executed,
2131 so care should be taken when removing apparently-unreachable code.
2132 .Sp
2133 For instance, when a function is inlined, a warning may mean that the
2134 line is unreachable in only one inlined copy of the function.  
2135 .Sp
2136 This option is not made part of \fB\-Wall\fR because in a debugging
2137 version of a program there is often substantial code which checks
2138 correct functioning of the program and is, hopefully, unreachable
2139 because the program does work.  Another common use of unreachable
2140 code is to provide behaviour which is selectable at compile-time.
2141 .Ip "\fB\-Winline\fR" 4
2142 .IX Item "-Winline"
2143 Warn if a function can not be inlined and it was declared as inline.
2144 .Ip "\fB\-Wlong-long\fR" 4
2145 .IX Item "-Wlong-long"
2146 Warn if \fBlong long\fR type is used.  This is default.  To inhibit
2147 the warning messages, use \fB\-Wno-long-long\fR.  Flags
2148 \&\fB\-Wlong-long\fR and \fB\-Wno-long-long\fR are taken into account
2149 only when \fB\-pedantic\fR flag is used.
2150 .Ip "\fB\-Wdisabled-optimization\fR" 4
2151 .IX Item "-Wdisabled-optimization"
2152 Warn if a requested optimization pass is disabled.  This warning does
2153 not generally indicate that there is anything wrong with your code; it
2154 merely indicates that \s-1GCC\s0's optimizers were unable to handle the code
2155 effectively.  Often, the problem is that your code is too big or too
2156 complex; \s-1GCC\s0 will refuse to optimize programs when the optimization
2157 itself is likely to take inordinate amounts of time.
2158 .Ip "\fB\-Werror\fR" 4
2159 .IX Item "-Werror"
2160 Make all warnings into errors.
2161 .Sh "Options for Debugging Your Program or \s-1GCC\s0"
2162 .IX Subsection "Options for Debugging Your Program or GCC"
2163 \&\s-1GCC\s0 has various special options that are used for debugging
2164 either your program or \s-1GCC:\s0
2165 .Ip "\fB\-g\fR" 4
2166 .IX Item "-g"
2167 Produce debugging information in the operating system's native format
2168 (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0).  \s-1GDB\s0 can work with this debugging
2169 information.
2170 .Sp
2171 On most systems that use stabs format, \fB\-g\fR enables use of extra
2172 debugging information that only \s-1GDB\s0 can use; this extra information
2173 makes debugging work better in \s-1GDB\s0 but will probably make other debuggers
2174 crash or
2175 refuse to read the program.  If you want to control for certain whether
2176 to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
2177 \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, \fB\-gdwarf-1+\fR, or \fB\-gdwarf-1\fR
2178 (see below).
2179 .Sp
2180 Unlike most other C compilers, \s-1GCC\s0 allows you to use \fB\-g\fR with
2181 \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
2182 produce surprising results: some variables you declared may not exist
2183 at all; flow of control may briefly move where you did not expect it;
2184 some statements may not be executed because they compute constant
2185 results or their values were already at hand; some statements may
2186 execute in different places because they were moved out of loops.
2187 .Sp
2188 Nevertheless it proves possible to debug optimized output.  This makes
2189 it reasonable to use the optimizer for programs that might have bugs.
2190 .Sp
2191 The following options are useful when \s-1GCC\s0 is generated with the
2192 capability for more than one debugging format.
2193 .Ip "\fB\-ggdb\fR" 4
2194 .IX Item "-ggdb"
2195 Produce debugging information for use by \s-1GDB\s0.  This means to use the
2196 most expressive format available (\s-1DWARF\s0 2, stabs, or the native format
2197 if neither of those are supported), including \s-1GDB\s0 extensions if at all
2198 possible.
2199 .Ip "\fB\-gstabs\fR" 4
2200 .IX Item "-gstabs"
2201 Produce debugging information in stabs format (if that is supported),
2202 without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
2203 systems.  On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
2204 produces stabs debugging output which is not understood by \s-1DBX\s0 or \s-1SDB\s0.
2205 On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
2206 .Ip "\fB\-gstabs+\fR" 4
2207 .IX Item "-gstabs+"
2208 Produce debugging information in stabs format (if that is supported),
2209 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
2210 use of these extensions is likely to make other debuggers crash or
2211 refuse to read the program.
2212 .Ip "\fB\-gcoff\fR" 4
2213 .IX Item "-gcoff"
2214 Produce debugging information in \s-1COFF\s0 format (if that is supported).
2215 This is the format used by \s-1SDB\s0 on most System V systems prior to
2216 System V Release 4.
2217 .Ip "\fB\-gxcoff\fR" 4
2218 .IX Item "-gxcoff"
2219 Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
2220 This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
2221 .Ip "\fB\-gxcoff+\fR" 4
2222 .IX Item "-gxcoff+"
2223 Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
2224 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
2225 use of these extensions is likely to make other debuggers crash or
2226 refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
2227 assembler (\s-1GAS\s0) to fail with an error.
2228 .Ip "\fB\-gdwarf\fR" 4
2229 .IX Item "-gdwarf"
2230 Produce debugging information in \s-1DWARF\s0 version 1 format (if that is
2231 supported).  This is the format used by \s-1SDB\s0 on most System V Release 4
2232 systems.
2233 .Ip "\fB\-gdwarf+\fR" 4
2234 .IX Item "-gdwarf+"
2235 Produce debugging information in \s-1DWARF\s0 version 1 format (if that is
2236 supported), using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger
2237 (\s-1GDB\s0).  The use of these extensions is likely to make other debuggers
2238 crash or refuse to read the program.
2239 .Ip "\fB\-gdwarf-2\fR" 4
2240 .IX Item "-gdwarf-2"
2241 Produce debugging information in \s-1DWARF\s0 version 2 format (if that is
2242 supported).  This is the format used by \s-1DBX\s0 on \s-1IRIX\s0 6.
2243 .Ip "\fB\-g\fR\fIlevel\fR" 4
2244 .IX Item "-glevel"
2245 .PD 0
2246 .Ip "\fB\-ggdb\fR\fIlevel\fR" 4
2247 .IX Item "-ggdblevel"
2248 .Ip "\fB\-gstabs\fR\fIlevel\fR" 4
2249 .IX Item "-gstabslevel"
2250 .Ip "\fB\-gcoff\fR\fIlevel\fR" 4
2251 .IX Item "-gcofflevel"
2252 .Ip "\fB\-gxcoff\fR\fIlevel\fR" 4
2253 .IX Item "-gxcofflevel"
2254 .Ip "\fB\-gdwarf\fR\fIlevel\fR" 4
2255 .IX Item "-gdwarflevel"
2256 .Ip "\fB\-gdwarf-2\fR\fIlevel\fR" 4
2257 .IX Item "-gdwarf-2level"
2258 .PD
2259 Request debugging information and also use \fIlevel\fR to specify how
2260 much information.  The default level is 2.
2261 .Sp
2262 Level 1 produces minimal information, enough for making backtraces in
2263 parts of the program that you don't plan to debug.  This includes
2264 descriptions of functions and external variables, but no information
2265 about local variables and no line numbers.
2266 .Sp
2267 Level 3 includes extra information, such as all the macro definitions
2268 present in the program.  Some debuggers support macro expansion when
2269 you use \fB\-g3\fR.
2270 .Ip "\fB\-p\fR" 4
2271 .IX Item "-p"
2272 Generate extra code to write profile information suitable for the
2273 analysis program \f(CW\*(C`prof\*(C'\fR.  You must use this option when compiling
2274 the source files you want data about, and you must also use it when
2275 linking.
2276 .Ip "\fB\-pg\fR" 4
2277 .IX Item "-pg"
2278 Generate extra code to write profile information suitable for the
2279 analysis program \f(CW\*(C`gprof\*(C'\fR.  You must use this option when compiling
2280 the source files you want data about, and you must also use it when
2281 linking.
2282 .Ip "\fB\-a\fR" 4
2283 .IX Item "-a"
2284 Generate extra code to write profile information for basic blocks, which will
2285 record the number of times each basic block is executed, the basic block start
2286 address, and the function name containing the basic block.  If \fB\-g\fR is
2287 used, the line number and filename of the start of the basic block will also be
2288 recorded.  If not overridden by the machine description, the default action is
2289 to append to the text file \fIbb.out\fR.
2290 .Sp
2291 This data could be analyzed by a program like \f(CW\*(C`tcov\*(C'\fR.  Note,
2292 however, that the format of the data is not what \f(CW\*(C`tcov\*(C'\fR expects.
2293 Eventually \s-1GNU\s0 \f(CW\*(C`gprof\*(C'\fR should be extended to process this data.
2294 .Ip "\fB\-Q\fR" 4
2295 .IX Item "-Q"
2296 Makes the compiler print out each function name as it is compiled, and
2297 print some statistics about each pass when it finishes.
2298 .Ip "\fB\-ax\fR" 4
2299 .IX Item "-ax"
2300 Generate extra code to profile basic blocks.  Your executable will
2301 produce output that is a superset of that produced when \fB\-a\fR is
2302 used.  Additional output is the source and target address of the basic
2303 blocks where a jump takes place, the number of times a jump is executed,
2304 and (optionally) the complete sequence of basic blocks being executed.
2305 The output is appended to file \fIbb.out\fR.
2306 .Sp
2307 You can examine different profiling aspects without recompilation.  Your
2308 executable will read a list of function names from file \fIbb.in\fR.
2309 Profiling starts when a function on the list is entered and stops when
2310 that invocation is exited.  To exclude a function from profiling, prefix
2311 its name with `\-'.  If a function name is not unique, you can
2312 disambiguate it by writing it in the form
2313 \&\fB/path/filename.d:functionname\fR.  Your executable will write the
2314 available paths and filenames in file \fIbb.out\fR.
2315 .Sp
2316 Several function names have a special meaning:
2317 .RS 4
2318 .if n .Ip "\f(CW""_\|_bb_jumps_\|_""\fR" 4
2319 .el .Ip "\f(CW_\|_bb_jumps_\|_\fR" 4
2320 .IX Item "__bb_jumps__"
2321 Write source, target and frequency of jumps to file \fIbb.out\fR.
2322 .if n .Ip "\f(CW""_\|_bb_hidecall_\|_""\fR" 4
2323 .el .Ip "\f(CW_\|_bb_hidecall_\|_\fR" 4
2324 .IX Item "__bb_hidecall__"
2325 Exclude function calls from frequency count.
2326 .if n .Ip "\f(CW""_\|_bb_showret_\|_""\fR" 4
2327 .el .Ip "\f(CW_\|_bb_showret_\|_\fR" 4
2328 .IX Item "__bb_showret__"
2329 Include function returns in frequency count.
2330 .if n .Ip "\f(CW""_\|_bb_trace_\|_""\fR" 4
2331 .el .Ip "\f(CW_\|_bb_trace_\|_\fR" 4
2332 .IX Item "__bb_trace__"
2333 Write the sequence of basic blocks executed to file \fIbbtrace.gz\fR.
2334 The file will be compressed using the program \fBgzip\fR, which must
2335 exist in your \fB\s-1PATH\s0\fR.  On systems without the \fBpopen\fR
2336 function, the file will be named \fIbbtrace\fR and will not be
2337 compressed.  \fBProfiling for even a few seconds on these systems
2338 will produce a very large file.\fR  Note: \f(CW\*(C`_\|_bb_hidecall_\|_\*(C'\fR and
2339 \&\f(CW\*(C`_\|_bb_showret_\|_\*(C'\fR will not affect the sequence written to
2340 \&\fIbbtrace.gz\fR.
2341 .RE
2342 .RS 4
2343 .Sp
2344 Here's a short example using different profiling parameters
2345 in file \fIbb.in\fR.  Assume function \f(CW\*(C`foo\*(C'\fR consists of basic blocks
2346 1 and 2 and is called twice from block 3 of function \f(CW\*(C`main\*(C'\fR.  After
2347 the calls, block 3 transfers control to block 4 of \f(CW\*(C`main\*(C'\fR.
2348 .Sp
2349 With \f(CW\*(C`_\|_bb_trace_\|_\*(C'\fR and \f(CW\*(C`main\*(C'\fR contained in file \fIbb.in\fR,
2350 the following sequence of blocks is written to file \fIbbtrace.gz\fR:
2351 0 3 1 2 1 2 4.  The return from block 2 to block 3 is not shown, because
2352 the return is to a point inside the block and not to the top.  The
2353 block address 0 always indicates, that control is transferred
2354 to the trace from somewhere outside the observed functions.  With
2355 \&\fB\-foo\fR added to \fIbb.in\fR, the blocks of function
2356 \&\f(CW\*(C`foo\*(C'\fR are removed from the trace, so only 0 3 4 remains.
2357 .Sp
2358 With \f(CW\*(C`_\|_bb_jumps_\|_\*(C'\fR and \f(CW\*(C`main\*(C'\fR contained in file \fIbb.in\fR,
2359 jump frequencies will be written to file \fIbb.out\fR.  The
2360 frequencies are obtained by constructing a trace of blocks
2361 and incrementing a counter for every neighbouring pair of blocks
2362 in the trace.  The trace 0 3 1 2 1 2 4 displays the following
2363 frequencies:
2364 .Sp
2365 .Vb 5
2366 \&        Jump from block 0x0 to block 0x3 executed 1 time(s)
2367 \&        Jump from block 0x3 to block 0x1 executed 1 time(s)
2368 \&        Jump from block 0x1 to block 0x2 executed 2 time(s)
2369 \&        Jump from block 0x2 to block 0x1 executed 1 time(s)
2370 \&        Jump from block 0x2 to block 0x4 executed 1 time(s)
2371 .Ve
2372 With \f(CW\*(C`_\|_bb_hidecall_\|_\*(C'\fR, control transfer due to call instructions
2373 is removed from the trace, that is the trace is cut into three parts: 0
2374 3 4, 0 1 2 and 0 1 2.  With \f(CW\*(C`_\|_bb_showret_\|_\*(C'\fR, control transfer due
2375 to return instructions is added to the trace.  The trace becomes: 0 3 1
2376 2 3 1 2 3 4.  Note, that this trace is not the same, as the sequence
2377 written to \fIbbtrace.gz\fR.  It is solely used for counting jump
2378 frequencies.
2379 .RE
2380 .Ip "\fB\-fprofile-arcs\fR" 4
2381 .IX Item "-fprofile-arcs"
2382 Instrument \fIarcs\fR during compilation.  For each function of your
2383 program, \s-1GCC\s0 creates a program flow graph, then finds a spanning tree
2384 for the graph.  Only arcs that are not on the spanning tree have to be
2385 instrumented: the compiler adds code to count the number of times that these
2386 arcs are executed.  When an arc is the only exit or only entrance to a
2387 block, the instrumentation code can be added to the block; otherwise, a
2388 new basic block must be created to hold the instrumentation code.
2389 .Sp
2390 Since not every arc in the program must be instrumented, programs
2391 compiled with this option run faster than programs compiled with
2392 \&\fB\-a\fR, which adds instrumentation code to every basic block in the
2393 program.  The tradeoff: since \f(CW\*(C`gcov\*(C'\fR does not have
2394 execution counts for all branches, it must start with the execution
2395 counts for the instrumented branches, and then iterate over the program
2396 flow graph until the entire graph has been solved.  Hence, \f(CW\*(C`gcov\*(C'\fR
2397 runs a little more slowly than a program which uses information from
2398 \&\fB\-a\fR.
2399 .Sp
2400 \&\fB\-fprofile-arcs\fR also makes it possible to estimate branch
2401 probabilities, and to calculate basic block execution counts.  In
2402 general, basic block execution counts do not give enough information to
2403 estimate all branch probabilities.  When the compiled program exits, it
2404 saves the arc execution counts to a file called
2405 \&\fI\fIsourcename\fI.da\fR.  Use the compiler option
2406 \&\fB\-fbranch-probabilities\fR when recompiling, to optimize using estimated
2407 branch probabilities.
2408 .Ip "\fB\-ftest-coverage\fR" 4
2409 .IX Item "-ftest-coverage"
2410 Create data files for the \f(CW\*(C`gcov\*(C'\fR code-coverage utility.
2411 The data file names begin with the name of your source file:
2412 .RS 4
2413 .Ip "\fIsourcename\fR\fB.bb\fR" 4
2414 .IX Item "sourcename.bb"
2415 A mapping from basic blocks to line numbers, which \f(CW\*(C`gcov\*(C'\fR uses to
2416 associate basic block execution counts with line numbers.
2417 .Ip "\fIsourcename\fR\fB.bbg\fR" 4
2418 .IX Item "sourcename.bbg"
2419 A list of all arcs in the program flow graph.  This allows \f(CW\*(C`gcov\*(C'\fR
2420 to reconstruct the program flow graph, so that it can compute all basic
2421 block and arc execution counts from the information in the
2422 \&\f(CW\*(C`\f(CIsourcename\f(CW.da\*(C'\fR file (this last file is the output from
2423 \&\fB\-fprofile-arcs\fR).
2424 .RE
2425 .RS 4
2426 .RE
2427 .Ip "\fB\-d\fR\fIletters\fR" 4
2428 .IX Item "-dletters"
2429 Says to make debugging dumps during compilation at times specified by
2430 \&\fIletters\fR.  This is used for debugging the compiler.  The file names
2431 for most of the dumps are made by appending a pass number and a word to
2432 the source file name (e.g.  \fIfoo.c.00.rtl\fR or \fIfoo.c.01.sibling\fR). 
2433 Here are the possible letters for use in \fIletters\fR, and their meanings:
2434 .RS 4
2435 .Ip "\fBA\fR" 4
2436 .IX Item "A"
2437 Annotate the assembler output with miscellaneous debugging information.
2438 .Ip "\fBb\fR" 4
2439 .IX Item "b"
2440 Dump after computing branch probabilities, to \fI\fIfile\fI.11.bp\fR.
2441 .Ip "\fBB\fR" 4
2442 .IX Item "B"
2443 Dump after block reordering, to \fI\fIfile\fI.26.bbro\fR.
2444 .Ip "\fBc\fR" 4
2445 .IX Item "c"
2446 Dump after instruction combination, to the file \fI\fIfile\fI.14.combine\fR.
2447 .Ip "\fBC\fR" 4
2448 .IX Item "C"
2449 Dump after the first if conversion, to the file \fI\fIfile\fI.15.ce\fR.
2450 .Ip "\fBd\fR" 4
2451 .IX Item "d"
2452 Dump after delayed branch scheduling, to \fI\fIfile\fI.29.dbr\fR.
2453 .Ip "\fBD\fR" 4
2454 .IX Item "D"
2455 Dump all macro definitions, at the end of preprocessing, in addition to
2456 normal output.
2457 .Ip "\fBe\fR" 4
2458 .IX Item "e"
2459 Dump after \s-1SSA\s0 optimizations, to \fI\fIfile\fI.05.ssa\fR and
2460 \&\fI\fIfile\fI.06.ussa\fR.
2461 .Ip "\fBE\fR" 4
2462 .IX Item "E"
2463 Dump after the second if conversion, to \fI\fIfile\fI.24.ce2\fR.
2464 .Ip "\fBf\fR" 4
2465 .IX Item "f"
2466 Dump after life analysis, to \fI\fIfile\fI.13.life\fR.
2467 .Ip "\fBF\fR" 4
2468 .IX Item "F"
2469 Dump after purging \f(CW\*(C`ADDRESSOF\*(C'\fR codes, to \fI\fIfile\fI.04.addressof\fR.
2470 .Ip "\fBg\fR" 4
2471 .IX Item "g"
2472 Dump after global register allocation, to \fI\fIfile\fI.19.greg\fR.
2473 .Ip "\fBo\fR" 4
2474 .IX Item "o"
2475 Dump after post-reload \s-1CSE\s0 and other optimizations, to \fI\fIfile\fI.20.postreload\fR.
2476 .Ip "\fBG\fR" 4
2477 .IX Item "G"
2478 Dump after \s-1GCSE\s0, to \fI\fIfile\fI.08.gcse\fR.
2479 .Ip "\fBi\fR" 4
2480 .IX Item "i"
2481 Dump after sibling call optimizations, to \fI\fIfile\fI.01.sibling\fR.
2482 .Ip "\fBj\fR" 4
2483 .IX Item "j"
2484 Dump after the first jump optimization, to \fI\fIfile\fI.02.jump\fR.
2485 .Ip "\fBJ\fR" 4
2486 .IX Item "J"
2487 Dump after the last jump optimization, to \fI\fIfile\fI.27.jump2\fR.
2488 .Ip "\fBk\fR" 4
2489 .IX Item "k"
2490 Dump after conversion from registers to stack, to \fI\fIfile\fI.29.stack\fR.
2491 .Ip "\fBl\fR" 4
2492 .IX Item "l"
2493 Dump after local register allocation, to \fI\fIfile\fI.18.lreg\fR.
2494 .Ip "\fBL\fR" 4
2495 .IX Item "L"
2496 Dump after loop optimization, to \fI\fIfile\fI.09.loop\fR.
2497 .Ip "\fBM\fR" 4
2498 .IX Item "M"
2499 Dump after performing the machine dependent reorganisation pass, to
2500 \&\fI\fIfile\fI.28.mach\fR. 
2501 .Ip "\fBn\fR" 4
2502 .IX Item "n"
2503 Dump after register renumbering, to \fI\fIfile\fI.23.rnreg\fR.
2504 .Ip "\fBN\fR" 4
2505 .IX Item "N"
2506 Dump after the register move pass, to \fI\fIfile\fI.16.regmove\fR.
2507 .Ip "\fBr\fR" 4
2508 .IX Item "r"
2509 Dump after \s-1RTL\s0 generation, to \fI\fIfile\fI.00.rtl\fR.
2510 .Ip "\fBR\fR" 4
2511 .IX Item "R"
2512 Dump after the second instruction scheduling pass, to
2513 \&\fI\fIfile\fI.25.sched2\fR.
2514 .Ip "\fBs\fR" 4
2515 .IX Item "s"
2516 Dump after \s-1CSE\s0 (including the jump optimization that sometimes follows
2517 \&\s-1CSE\s0), to \fI\fIfile\fI.03.cse\fR. 
2518 .Ip "\fBS\fR" 4
2519 .IX Item "S"
2520 Dump after the first instruction scheduling pass, to
2521 \&\fI\fIfile\fI.17.sched\fR.
2522 .Ip "\fBt\fR" 4
2523 .IX Item "t"
2524 Dump after the second \s-1CSE\s0 pass (including the jump optimization that
2525 sometimes follows \s-1CSE\s0), to \fI\fIfile\fI.10.cse2\fR.
2526 .Ip "\fBw\fR" 4
2527 .IX Item "w"
2528 Dump after the second flow pass, to \fI\fIfile\fI.21.flow2\fR.
2529 .Ip "\fBX\fR" 4
2530 .IX Item "X"
2531 Dump after dead code elimination, to \fI\fIfile\fI.06.dce\fR.
2532 .Ip "\fBz\fR" 4
2533 .IX Item "z"
2534 Dump after the peephole pass, to \fI\fIfile\fI.22.peephole2\fR.
2535 .Ip "\fBa\fR" 4
2536 .IX Item "a"
2537 Produce all the dumps listed above.
2538 .Ip "\fBm\fR" 4
2539 .IX Item "m"
2540 Print statistics on memory usage, at the end of the run, to
2541 standard error.
2542 .Ip "\fBp\fR" 4
2543 .IX Item "p"
2544 Annotate the assembler output with a comment indicating which
2545 pattern and alternative was used.  The length of each instruction is
2546 also printed.
2547 .Ip "\fBP\fR" 4
2548 .IX Item "P"
2549 Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
2550 Also turns on \fB\-dp\fR annotation.
2551 .Ip "\fBv\fR" 4
2552 .IX Item "v"
2553 For each of the other indicated dump files (except for
2554 \&\fI\fIfile\fI.00.rtl\fR), dump a representation of the control flow graph
2555 suitable for viewing with \s-1VCG\s0 to \fI\fIfile\fI.\fIpass\fI.vcg\fR.
2556 .Ip "\fBx\fR" 4
2557 .IX Item "x"
2558 Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
2559 with \fBr\fR.
2560 .Ip "\fBy\fR" 4
2561 .IX Item "y"
2562 Dump debugging information during parsing, to standard error.
2563 .RE
2564 .RS 4
2565 .RE
2566 .Ip "\fB\-fdump-unnumbered\fR" 4
2567 .IX Item "-fdump-unnumbered"
2568 When doing debugging dumps (see \-d option above), suppress instruction
2569 numbers and line number note output.  This makes it more feasible to
2570 use diff on debugging dumps for compiler invocations with different
2571 options, in particular with and without \-g.
2572 .Ip "\fB\-fdump-translation-unit=\fR\fIfile\fR \fB(C and \*(C+ only)\fR" 4
2573 .IX Item "-fdump-translation-unit=file (C and  only)"
2574 Dump a representation of the tree structure for the entire translation
2575 unit to \fIfile\fR.
2576 .Ip "\fB\-fdump-class_layout=\fR\fIfile\fR \fB(\*(C+ only)\fR" 4
2577 .IX Item "-fdump-class_layout=file ( only)"
2578 .PD 0
2579 .Ip "\fB\-fdump-class_layout (\*(C+ only)\fR" 4
2580 .IX Item "-fdump-class_layout ( only)"
2581 .PD
2582 Dump a representation of each class's heirarchy to \fIfile\fR, or
2583 \&\f(CW\*(C`stderr\*(C'\fR if not specified.
2584 .Ip "\fB\-fpretend-float\fR" 4
2585 .IX Item "-fpretend-float"
2586 When running a cross-compiler, pretend that the target machine uses the
2587 same floating point format as the host machine.  This causes incorrect
2588 output of the actual floating constants, but the actual instruction
2589 sequence will probably be the same as \s-1GCC\s0 would make when running on
2590 the target machine.
2591 .Ip "\fB\-save-temps\fR" 4
2592 .IX Item "-save-temps"
2593 Store the usual ``temporary'' intermediate files permanently; place them
2594 in the current directory and name them based on the source file.  Thus,
2595 compiling \fIfoo.c\fR with \fB\-c \-save-temps\fR would produce files
2596 \&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
2597 preprocessed \fIfoo.i\fR output file even though the compiler now
2598 normally uses an integrated preprocessor.
2599 .Ip "\fB\-time\fR" 4
2600 .IX Item "-time"
2601 Report the \s-1CPU\s0 time taken by each subprocess in the compilation
2602 sequence.  For C source files, this is the compiler proper and assembler
2603 (plus the linker if linking is done).  The output looks like this:
2604 .Sp
2605 .Vb 2
2606 \&        # cc1 0.12 0.01
2607 \&        # as 0.00 0.01
2608 .Ve
2609 The first number on each line is the ``user time,'' that is time spent
2610 executing the program itself.  The second number is ``system time,''
2611 time spent executing operating system routines on behalf of the program.
2612 Both numbers are in seconds.
2613 .Ip "\fB\-print-file-name=\fR\fIlibrary\fR" 4
2614 .IX Item "-print-file-name=library"
2615 Print the full absolute name of the library file \fIlibrary\fR that
2616 would be used when linking\-\-\-and don't do anything else.  With this
2617 option, \s-1GCC\s0 does not compile or link anything; it just prints the
2618 file name.
2619 .Ip "\fB\-print-prog-name=\fR\fIprogram\fR" 4
2620 .IX Item "-print-prog-name=program"
2621 Like \fB\-print-file-name\fR, but searches for a program such as \fBcpp\fR.
2622 .Ip "\fB\-print-libgcc-file-name\fR" 4
2623 .IX Item "-print-libgcc-file-name"
2624 Same as \fB\-print-file-name=libgcc.a\fR.
2625 .Sp
2626 This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
2627 but you do want to link with \fIlibgcc.a\fR.  You can do
2628 .Sp
2629 .Vb 1
2630 \&        gcc -nostdlib I<files>... `gcc -print-libgcc-file-name`
2631 .Ve
2632 .Ip "\fB\-print-search-dirs\fR" 4
2633 .IX Item "-print-search-dirs"
2634 Print the name of the configured installation directory and a list of
2635 program and library directories gcc will search\-\-\-and don't do anything else.
2636 .Sp
2637 This is useful when gcc prints the error message
2638 \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
2639 To resolve this you either need to put \fIcpp0\fR and the other compiler
2640 components where gcc expects to find them, or you can set the environment
2641 variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
2642 Don't forget the trailing '/'.
2643 .Sh "Options That Control Optimization"
2644 .IX Subsection "Options That Control Optimization"
2645 These options control various sorts of optimizations:
2646 .Ip "\fB\-O\fR" 4
2647 .IX Item "-O"
2648 .PD 0
2649 .Ip "\fB\-O1\fR" 4
2650 .IX Item "-O1"
2651 .PD
2652 Optimize.  Optimizing compilation takes somewhat more time, and a lot
2653 more memory for a large function.
2654 .Sp
2655 Without \fB\-O\fR, the compiler's goal is to reduce the cost of
2656 compilation and to make debugging produce the expected results.
2657 Statements are independent: if you stop the program with a breakpoint
2658 between statements, you can then assign a new value to any variable or
2659 change the program counter to any other statement in the function and
2660 get exactly the results you would expect from the source code.
2661 .Sp
2662 Without \fB\-O\fR, the compiler only allocates variables declared
2663 \&\f(CW\*(C`register\*(C'\fR in registers.  The resulting compiled code is a little
2664 worse than produced by \s-1PCC\s0 without \fB\-O\fR.
2665 .Sp
2666 With \fB\-O\fR, the compiler tries to reduce code size and execution
2667 time.
2668 .Sp
2669 When you specify \fB\-O\fR, the compiler turns on \fB\-fthread-jumps\fR
2670 and \fB\-fdefer-pop\fR on all machines.  The compiler turns on
2671 \&\fB\-fdelayed-branch\fR on machines that have delay slots, and
2672 \&\fB\-fomit-frame-pointer\fR on machines that can support debugging even
2673 without a frame pointer.  On some machines the compiler also turns
2674 on other flags.
2675 .Ip "\fB\-O2\fR" 4
2676 .IX Item "-O2"
2677 Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
2678 that do not involve a space-speed tradeoff.  The compiler does not
2679 perform loop unrolling or function inlining when you specify \fB\-O2\fR.
2680 As compared to \fB\-O\fR, this option increases both compilation time
2681 and the performance of the generated code.
2682 .Sp
2683 \&\fB\-O2\fR turns on all optional optimizations except for loop unrolling,
2684 function inlining, and register renaming.  It also turns on the
2685 \&\fB\-fforce-mem\fR option on all machines and frame pointer elimination
2686 on machines where doing so does not interfere with debugging.
2687 .Ip "\fB\-O3\fR" 4
2688 .IX Item "-O3"
2689 Optimize yet more.  \fB\-O3\fR turns on all optimizations specified by
2690 \&\fB\-O2\fR and also turns on the \fB\-finline-functions\fR and
2691 \&\fB\-frename-registers\fR options.
2692 .Ip "\fB\-O0\fR" 4
2693 .IX Item "-O0"
2694 Do not optimize.
2695 .Ip "\fB\-Os\fR" 4
2696 .IX Item "-Os"
2697 Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
2698 do not typically increase code size.  It also performs further
2699 optimizations designed to reduce code size.
2700 .Sp
2701 If you use multiple \fB\-O\fR options, with or without level numbers,
2702 the last such option is the one that is effective.
2703 .PP
2704 Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
2705 flags.  Most flags have both positive and negative forms; the negative
2706 form of \fB\-ffoo\fR would be \fB\-fno-foo\fR.  In the table below,
2707 only one of the forms is listed\-\-\-the one which is not the default.
2708 You can figure out the other form by either removing \fBno-\fR or
2709 adding it.
2710 .Ip "\fB\-ffloat-store\fR" 4
2711 .IX Item "-ffloat-store"
2712 Do not store floating point variables in registers, and inhibit other
2713 options that might change whether a floating point value is taken from a
2714 register or memory.
2715 .Sp
2716 This option prevents undesirable excess precision on machines such as
2717 the 68000 where the floating registers (of the 68881) keep more
2718 precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
2719 x86 architecture.  For most programs, the excess precision does only
2720 good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
2721 point.  Use \fB\-ffloat-store\fR for such programs, after modifying
2722 them to store all pertinent intermediate computations into variables.
2723 .Ip "\fB\-fno-default-inline\fR" 4
2724 .IX Item "-fno-default-inline"
2725 Do not make member functions inline by default merely because they are
2726 defined inside the class scope (\*(C+ only).  Otherwise, when you specify
2727 \&\fB\-O\fR, member functions defined inside class scope are compiled
2728 inline by default; i.e., you don't need to add \fBinline\fR in front of
2729 the member function name.
2730 .Ip "\fB\-fno-defer-pop\fR" 4
2731 .IX Item "-fno-defer-pop"
2732 Always pop the arguments to each function call as soon as that function
2733 returns.  For machines which must pop arguments after a function call,
2734 the compiler normally lets arguments accumulate on the stack for several
2735 function calls and pops them all at once.
2736 .Ip "\fB\-fforce-mem\fR" 4
2737 .IX Item "-fforce-mem"
2738 Force memory operands to be copied into registers before doing
2739 arithmetic on them.  This produces better code by making all memory
2740 references potential common subexpressions.  When they are not common
2741 subexpressions, instruction combination should eliminate the separate
2742 register-load.  The \fB\-O2\fR option turns on this option.
2743 .Ip "\fB\-fforce-addr\fR" 4
2744 .IX Item "-fforce-addr"
2745 Force memory address constants to be copied into registers before
2746 doing arithmetic on them.  This may produce better code just as
2747 \&\fB\-fforce-mem\fR may.
2748 .Ip "\fB\-fomit-frame-pointer\fR" 4
2749 .IX Item "-fomit-frame-pointer"
2750 Don't keep the frame pointer in a register for functions that
2751 don't need one.  This avoids the instructions to save, set up and
2752 restore frame pointers; it also makes an extra register available
2753 in many functions.  \fBIt also makes debugging impossible on
2754 some machines.\fR
2755 .Sp
2756 On some machines, such as the Vax, this flag has no effect, because
2757 the standard calling sequence automatically handles the frame pointer
2758 and nothing is saved by pretending it doesn't exist.  The
2759 machine-description macro \f(CW\*(C`FRAME_POINTER_REQUIRED\*(C'\fR controls
2760 whether a target machine supports this flag.  
2761 .Ip "\fB\-foptimize-sibling-calls\fR" 4
2762 .IX Item "-foptimize-sibling-calls"
2763 Optimize sibling and tail recursive calls.
2764 .Ip "\fB\-ftrapv\fR" 4
2765 .IX Item "-ftrapv"
2766 This option generates traps for signed overflow on addition, subtraction,
2767 multiplication operations.
2768 .Ip "\fB\-fno-inline\fR" 4
2769 .IX Item "-fno-inline"
2770 Don't pay attention to the \f(CW\*(C`inline\*(C'\fR keyword.  Normally this option
2771 is used to keep the compiler from expanding any functions inline.
2772 Note that if you are not optimizing, no functions can be expanded inline.
2773 .Ip "\fB\-finline-functions\fR" 4
2774 .IX Item "-finline-functions"
2775 Integrate all simple functions into their callers.  The compiler
2776 heuristically decides which functions are simple enough to be worth
2777 integrating in this way.
2778 .Sp
2779 If all calls to a given function are integrated, and the function is
2780 declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
2781 assembler code in its own right.
2782 .Ip "\fB\-finline-limit=\fR\fIn\fR" 4
2783 .IX Item "-finline-limit=n"
2784 By default, gcc limits the size of functions that can be inlined.  This flag
2785 allows the control of this limit for functions that are explicitly marked as
2786 inline (ie marked with the inline keyword or defined within the class 
2787 definition in c++).  \fIn\fR is the size of functions that can be inlined in 
2788 number of pseudo instructions (not counting parameter handling).  The default
2789 value of n is 10000.  Increasing this value can result in more inlined code at
2790 the cost of compilation time and memory consumption.  Decreasing usually makes
2791 the compilation faster and less code will be inlined (which presumably 
2792 means slower programs).  This option is particularly useful for programs that 
2793 use inlining heavily such as those based on recursive templates with c++.
2794 .Sp
2795 \&\fINote:\fR pseudo instruction represents, in this particular context, an
2796 abstract measurement of function's size.  In no way, it represents a count
2797 of assembly instructions and as such its exact meaning might change from one
2798 release to an another.
2799 .Ip "\fB\-fkeep-inline-functions\fR" 4
2800 .IX Item "-fkeep-inline-functions"
2801 Even if all calls to a given function are integrated, and the function
2802 is declared \f(CW\*(C`static\*(C'\fR, nevertheless output a separate run-time
2803 callable version of the function.  This switch does not affect
2804 \&\f(CW\*(C`extern inline\*(C'\fR functions.
2805 .Ip "\fB\-fkeep-static-consts\fR" 4
2806 .IX Item "-fkeep-static-consts"
2807 Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
2808 on, even if the variables aren't referenced.
2809 .Sp
2810 \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
2811 check if the variable was referenced, regardless of whether or not
2812 optimization is turned on, use the \fB\-fno-keep-static-consts\fR option.
2813 .Ip "\fB\-fno-function-cse\fR" 4
2814 .IX Item "-fno-function-cse"
2815 Do not put function addresses in registers; make each instruction that
2816 calls a constant function contain the function's address explicitly.
2817 .Sp
2818 This option results in less efficient code, but some strange hacks
2819 that alter the assembler output may be confused by the optimizations
2820 performed when this option is not used.
2821 .Ip "\fB\-ffast-math\fR" 4
2822 .IX Item "-ffast-math"
2823 Sets \fB\-fno-math-errno\fR, \fB\-funsafe-math-optimizations\fR,
2824 and \fB\-fno-trapping-math\fR.
2825 .Sp
2826 This option causes the preprocessor macro _\|_FAST_MATH_\|_ to be defined.
2827 .Sp
2828 This option causes the preprocessor macro _\|_FAST_MATH_\|_ to be defined.
2829 .Sp
2830 This option should never be turned on by any \fB\-O\fR option since
2831 it can result in incorrect output for programs which depend on
2832 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
2833 math functions.
2834 .Ip "\fB\-fno-math-errno\fR" 4
2835 .IX Item "-fno-math-errno"
2836 Do not set \s-1ERRNO\s0 after calling math functions that are executed
2837 with a single instruction, e.g., sqrt.  A program that relies on
2838 \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
2839 for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
2840 .Sp
2841 This option should never be turned on by any \fB\-O\fR option since
2842 it can result in incorrect output for programs which depend on
2843 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
2844 math functions.
2845 .Sp
2846 The default is \fB\-fmath-errno\fR.  The \fB\-ffast-math\fR option
2847 sets \fB\-fno-math-errno\fR.
2848 .Ip "\fB\-funsafe-math-optimizations\fR" 4
2849 .IX Item "-funsafe-math-optimizations"
2850 Allow optimizations for floating-point arithmetic that (a) assume
2851 that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
2852 \&\s-1ANSI\s0 standards.  
2853 .Sp
2854 This option should never be turned on by any \fB\-O\fR option since
2855 it can result in incorrect output for programs which depend on
2856 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
2857 math functions.
2858 .Sp
2859 The default is \fB\-fno-unsafe-math-optimizations\fR.  The
2860 \&\fB\-ffast-math\fR option sets \fB\-funsafe-math-optimizations\fR.
2861 .Ip "\fB\-fno-trapping-math\fR" 4
2862 .IX Item "-fno-trapping-math"
2863 Compile code assuming that floating-point operations cannot generate
2864 user-visible traps.  Setting this option may allow faster code
2865 if one relies on ``non-stop'' \s-1IEEE\s0 arithmetic, for example.
2866 .Sp
2867 This option should never be turned on by any \fB\-O\fR option since
2868 it can result in incorrect output for programs which depend on
2869 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
2870 math functions.
2871 .Sp
2872 The default is \fB\-ftrapping-math\fR.  The \fB\-ffast-math\fR
2873 option sets \fB\-fno-trapping-math\fR.
2874 .PP
2875 The following options control specific optimizations.  The \fB\-O2\fR
2876 option turns on all of these optimizations except \fB\-funroll-loops\fR
2877 and \fB\-funroll-all-loops\fR.  On most machines, the \fB\-O\fR option
2878 turns on the \fB\-fthread-jumps\fR and \fB\-fdelayed-branch\fR options,
2879 but specific machines may handle it differently.
2880 .PP
2881 You can use the following flags in the rare cases when ``fine-tuning''
2882 of optimizations to be performed is desired.
2883 .Ip "\fB\-fstrength-reduce\fR" 4
2884 .IX Item "-fstrength-reduce"
2885 Perform the optimizations of loop strength reduction and
2886 elimination of iteration variables.
2887 .Ip "\fB\-fthread-jumps\fR" 4
2888 .IX Item "-fthread-jumps"
2889 Perform optimizations where we check to see if a jump branches to a
2890 location where another comparison subsumed by the first is found.  If
2891 so, the first branch is redirected to either the destination of the
2892 second branch or a point immediately following it, depending on whether
2893 the condition is known to be true or false.
2894 .Ip "\fB\-fcse-follow-jumps\fR" 4
2895 .IX Item "-fcse-follow-jumps"
2896 In common subexpression elimination, scan through jump instructions
2897 when the target of the jump is not reached by any other path.  For
2898 example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
2899 \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 will follow the jump when the condition
2900 tested is false.
2901 .Ip "\fB\-fcse-skip-blocks\fR" 4
2902 .IX Item "-fcse-skip-blocks"
2903 This is similar to \fB\-fcse-follow-jumps\fR, but causes \s-1CSE\s0 to
2904 follow jumps which conditionally skip over blocks.  When \s-1CSE\s0
2905 encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
2906 \&\fB\-fcse-skip-blocks\fR causes \s-1CSE\s0 to follow the jump around the
2907 body of the \f(CW\*(C`if\*(C'\fR.
2908 .Ip "\fB\-frerun-cse-after-loop\fR" 4
2909 .IX Item "-frerun-cse-after-loop"
2910 Re-run common subexpression elimination after loop optimizations has been
2911 performed.
2912 .Ip "\fB\-frerun-loop-opt\fR" 4
2913 .IX Item "-frerun-loop-opt"
2914 Run the loop optimizer twice.
2915 .Ip "\fB\-fgcse\fR" 4
2916 .IX Item "-fgcse"
2917 Perform a global common subexpression elimination pass.
2918 This pass also performs global constant and copy propagation.
2919 .Ip "\fB\-fdelete-null-pointer-checks\fR" 4
2920 .IX Item "-fdelete-null-pointer-checks"
2921 Use global dataflow analysis to identify and eliminate useless null
2922 pointer checks.  Programs which rely on \s-1NULL\s0 pointer dereferences \fInot\fR
2923 halting the program may not work properly with this option.  Use
2924 \&\-fno-delete-null-pointer-checks to disable this optimizing for programs
2925 which depend on that behavior.
2926 .Ip "\fB\-fexpensive-optimizations\fR" 4
2927 .IX Item "-fexpensive-optimizations"
2928 Perform a number of minor optimizations that are relatively expensive.
2929 .Ip "\fB\-foptimize-register-move\fR" 4
2930 .IX Item "-foptimize-register-move"
2931 .PD 0
2932 .Ip "\fB\-fregmove\fR" 4
2933 .IX Item "-fregmove"
2934 .PD
2935 Attempt to reassign register numbers in move instructions and as
2936 operands of other simple instructions in order to maximize the amount of
2937 register tying.  This is especially helpful on machines with two-operand
2938 instructions.  \s-1GCC\s0 enables this optimization by default with \fB\-O2\fR
2939 or higher.
2940 .Sp
2941 Note \fB\-fregmove\fR and \fB\-foptimize-register-move\fR are the same
2942 optimization.
2943 .Ip "\fB\-fdelayed-branch\fR" 4
2944 .IX Item "-fdelayed-branch"
2945 If supported for the target machine, attempt to reorder instructions
2946 to exploit instruction slots available after delayed branch
2947 instructions.
2948 .Ip "\fB\-fschedule-insns\fR" 4
2949 .IX Item "-fschedule-insns"
2950 If supported for the target machine, attempt to reorder instructions to
2951 eliminate execution stalls due to required data being unavailable.  This
2952 helps machines that have slow floating point or memory load instructions
2953 by allowing other instructions to be issued until the result of the load
2954 or floating point instruction is required.
2955 .Ip "\fB\-fschedule-insns2\fR" 4
2956 .IX Item "-fschedule-insns2"
2957 Similar to \fB\-fschedule-insns\fR, but requests an additional pass of
2958 instruction scheduling after register allocation has been done.  This is
2959 especially useful on machines with a relatively small number of
2960 registers and where memory load instructions take more than one cycle.
2961 .Ip "\fB\-ffunction-sections\fR" 4
2962 .IX Item "-ffunction-sections"
2963 .PD 0
2964 .Ip "\fB\-fdata-sections\fR" 4
2965 .IX Item "-fdata-sections"
2966 .PD
2967 Place each function or data item into its own section in the output
2968 file if the target supports arbitrary sections.  The name of the
2969 function or the name of the data item determines the section's name
2970 in the output file.
2971 .Sp
2972 Use these options on systems where the linker can perform optimizations
2973 to improve locality of reference in the instruction space.  \s-1HPPA\s0
2974 processors running \s-1HP-UX\s0 and Sparc processors running Solaris 2 have
2975 linkers with such optimizations.  Other systems using the \s-1ELF\s0 object format
2976 as well as \s-1AIX\s0 may have these optimizations in the future.
2977 .Sp
2978 Only use these options when there are significant benefits from doing
2979 so.  When you specify these options, the assembler and linker will
2980 create larger object and executable files and will also be slower.
2981 You will not be able to use \f(CW\*(C`gprof\*(C'\fR on all systems if you
2982 specify this option and you may have problems with debugging if
2983 you specify both this option and \fB\-g\fR.
2984 .Ip "\fB\-fcaller-saves\fR" 4
2985 .IX Item "-fcaller-saves"
2986 Enable values to be allocated in registers that will be clobbered by
2987 function calls, by emitting extra instructions to save and restore the
2988 registers around such calls.  Such allocation is done only when it
2989 seems to result in better code than would otherwise be produced.
2990 .Sp
2991 This option is always enabled by default on certain machines, usually
2992 those which have no call-preserved registers to use instead.
2993 .Sp
2994 For all machines, optimization level 2 and higher enables this flag by
2995 default.
2996 .Ip "\fB\-funroll-loops\fR" 4
2997 .IX Item "-funroll-loops"
2998 Perform the optimization of loop unrolling.  This is only done for loops
2999 whose number of iterations can be determined at compile time or run time.
3000 \&\fB\-funroll-loops\fR implies both \fB\-fstrength-reduce\fR and
3001 \&\fB\-frerun-cse-after-loop\fR.
3002 .Ip "\fB\-funroll-all-loops\fR" 4
3003 .IX Item "-funroll-all-loops"
3004 Perform the optimization of loop unrolling.  This is done for all loops
3005 and usually makes programs run more slowly.  \fB\-funroll-all-loops\fR
3006 implies \fB\-fstrength-reduce\fR as well as \fB\-frerun-cse-after-loop\fR.
3007 .Ip "\fB\-fmove-all-movables\fR" 4
3008 .IX Item "-fmove-all-movables"
3009 Forces all invariant computations in loops to be moved
3010 outside the loop.
3011 .Ip "\fB\-freduce-all-givs\fR" 4
3012 .IX Item "-freduce-all-givs"
3013 Forces all general-induction variables in loops to be
3014 strength-reduced.
3015 .Sp
3016 \&\fINote:\fR When compiling programs written in Fortran,
3017 \&\fB\-fmove-all-movables\fR and \fB\-freduce-all-givs\fR are enabled
3018 by default when you use the optimizer.
3019 .Sp
3020 These options may generate better or worse code; results are highly
3021 dependent on the structure of loops within the source code.
3022 .Sp
3023 These two options are intended to be removed someday, once
3024 they have helped determine the efficacy of various
3025 approaches to improving loop optimizations.
3026 .Sp
3027 Please let us (<\fBgcc@gcc.gnu.org\fR> and <\fBfortran@gnu.org\fR>)
3028 know how use of these options affects
3029 the performance of your production code.
3030 We're very interested in code that runs \fIslower\fR
3031 when these options are \fIenabled\fR.
3032 .Ip "\fB\-fno-peephole\fR" 4
3033 .IX Item "-fno-peephole"
3034 Disable any machine-specific peephole optimizations.
3035 .Ip "\fB\-fbranch-probabilities\fR" 4
3036 .IX Item "-fbranch-probabilities"
3037 After running a program compiled with \fB\-fprofile-arcs\fR, you can compile it a second time using
3038 \&\fB\-fbranch-probabilities\fR, to improve optimizations based on
3039 guessing the path a branch might take.
3040 .Ip "\fB\-fno-guess-branch-probability\fR" 4
3041 .IX Item "-fno-guess-branch-probability"
3042 Sometimes gcc will opt to guess branch probabilities when none are
3043 available from either profile directed feedback (\fB\-fprofile-arcs\fR)
3044 or \fB_\|_builtin_expect\fR.  In a hard real-time system, people don't
3045 want different runs of the compiler to produce code that has different
3046 behavior; minimizing non-determinism is of paramount import.  This
3047 switch allows users to reduce non-determinism, possibly at the expense
3048 of inferior optimization.
3049 .Ip "\fB\-fstrict-aliasing\fR" 4
3050 .IX Item "-fstrict-aliasing"
3051 Allows the compiler to assume the strictest aliasing rules applicable to
3052 the language being compiled.  For C (and \*(C+), this activates
3053 optimizations based on the type of expressions.  In particular, an
3054 object of one type is assumed never to reside at the same address as an
3055 object of a different type, unless the types are almost the same.  For
3056 example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
3057 \&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
3058 type.  
3059 .Sp
3060 Pay special attention to code like this:
3061 .Sp
3062 .Vb 4
3063 \&        union a_union { 
3064 \&          int i;
3065 \&          double d;
3066 \&        };
3067 .Ve
3068 .Vb 5
3069 \&        int f() {
3070 \&          a_union t;
3071 \&          t.d = 3.0;
3072 \&          return t.i;
3073 \&        }
3074 .Ve
3075 The practice of reading from a different union member than the one most
3076 recently written to (called ``type-punning'') is common.  Even with
3077 \&\fB\-fstrict-aliasing\fR, type-punning is allowed, provided the memory
3078 is accessed through the union type.  So, the code above will work as
3079 expected.  However, this code might not:
3080 .Sp
3081 .Vb 7
3082 \&        int f() { 
3083 \&          a_union t;
3084 \&          int* ip;
3085 \&          t.d = 3.0;
3086 \&          ip = &t.i;
3087 \&          return *ip;
3088 \&        }
3089 .Ve
3090 .Ip "\fB\-falign-functions\fR" 4
3091 .IX Item "-falign-functions"
3092 .PD 0
3093 .Ip "\fB\-falign-functions=\fR\fIn\fR" 4
3094 .IX Item "-falign-functions=n"
3095 .PD
3096 Align the start of functions to the next power-of-two greater than
3097 \&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
3098 \&\fB\-falign-functions=32\fR aligns functions to the next 32\-byte
3099 boundary, but \fB\-falign-functions=24\fR would align to the next
3100 32\-byte boundary only if this can be done by skipping 23 bytes or less.
3101 .Sp
3102 \&\fB\-fno-align-functions\fR and \fB\-falign-functions=1\fR are
3103 equivalent and mean that functions will not be aligned.
3104 .Sp
3105 Some assemblers only support this flag when \fIn\fR is a power of two;
3106 in that case, it is rounded up.
3107 .Sp
3108 If \fIn\fR is not specified, use a machine-dependent default.
3109 .Ip "\fB\-falign-labels\fR" 4
3110 .IX Item "-falign-labels"
3111 .PD 0
3112 .Ip "\fB\-falign-labels=\fR\fIn\fR" 4
3113 .IX Item "-falign-labels=n"
3114 .PD
3115 Align all branch targets to a power-of-two boundary, skipping up to
3116 \&\fIn\fR bytes like \fB\-falign-functions\fR.  This option can easily
3117 make code slower, because it must insert dummy operations for when the
3118 branch target is reached in the usual flow of the code.
3119 .Sp
3120 If \fB\-falign-loops\fR or \fB\-falign-jumps\fR are applicable and
3121 are greater than this value, then their values are used instead.
3122 .Sp
3123 If \fIn\fR is not specified, use a machine-dependent default which is
3124 very likely to be \fB1\fR, meaning no alignment.
3125 .Ip "\fB\-falign-loops\fR" 4
3126 .IX Item "-falign-loops"
3127 .PD 0
3128 .Ip "\fB\-falign-loops=\fR\fIn\fR" 4
3129 .IX Item "-falign-loops=n"
3130 .PD
3131 Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
3132 like \fB\-falign-functions\fR.  The hope is that the loop will be
3133 executed many times, which will make up for any execution of the dummy
3134 operations.
3135 .Sp
3136 If \fIn\fR is not specified, use a machine-dependent default.
3137 .Ip "\fB\-falign-jumps\fR" 4
3138 .IX Item "-falign-jumps"
3139 .PD 0
3140 .Ip "\fB\-falign-jumps=\fR\fIn\fR" 4
3141 .IX Item "-falign-jumps=n"
3142 .PD
3143 Align branch targets to a power-of-two boundary, for branch targets
3144 where the targets can only be reached by jumping, skipping up to \fIn\fR
3145 bytes like \fB\-falign-functions\fR.  In this case, no dummy operations
3146 need be executed.
3147 .Sp
3148 If \fIn\fR is not specified, use a machine-dependent default.
3149 .Ip "\fB\-fssa\fR" 4
3150 .IX Item "-fssa"
3151 Perform optimizations in static single assignment form.  Each function's
3152 flow graph is translated into \s-1SSA\s0 form, optimizations are performed, and
3153 the flow graph is translated back from \s-1SSA\s0 form.  User's should not
3154 specify this option, since it is not yet ready for production use.
3155 .Ip "\fB\-fdce\fR" 4
3156 .IX Item "-fdce"
3157 Perform dead-code elimination in \s-1SSA\s0 form.  Requires \fB\-fssa\fR.  Like
3158 \&\fB\-fssa\fR, this is an experimental feature.
3159 .Ip "\fB\-fsingle-precision-constant\fR" 4
3160 .IX Item "-fsingle-precision-constant"
3161 Treat floating point constant as single precision constant instead of
3162 implicitly converting it to double precision constant.
3163 .Ip "\fB\-frename-registers\fR" 4
3164 .IX Item "-frename-registers"
3165 Attempt to avoid false dependancies in scheduled code by making use
3166 of registers left over after register allocation.  This optimization
3167 will most benefit processors with lots of registers.  It can, however,
3168 make debugging impossible, since variables will no longer stay in
3169 a ``home register''.
3170 .Ip "\fB\*(--param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
3171 .IX Item "param name=value"
3172 In some places, \s-1GCC\s0 uses various constants to control the amount of
3173 optimization that is done.  For example, \s-1GCC\s0 will not inline functions
3174 that contain more that a certain number of instructions.  You can
3175 control some of these constants on the command-line using the
3176 \&\fB\*(--param\fR option.  
3177 .Sp
3178 In each case, the \fIvalue\fR is a integer.  The allowable choices for
3179 \&\fIname\fR are given in the following table:
3180 .RS 4
3181 .Ip "\fBmax-inline-insns\fR" 4
3182 .IX Item "max-inline-insns"
3183 If an function contains more than this many instructions, it
3184 will not be inlined.  This option is precisely equivalent to
3185 \&\fB\-finline-limit\fR.
3186 .RE
3187 .RS 4
3188 .RE
3189 .Sh "Options Controlling the Preprocessor"
3190 .IX Subsection "Options Controlling the Preprocessor"
3191 These options control the C preprocessor, which is run on each C source
3192 file before actual compilation.
3193 .PP
3194 If you use the \fB\-E\fR option, nothing is done except preprocessing.
3195 Some of these options make sense only together with \fB\-E\fR because
3196 they cause the preprocessor output to be unsuitable for actual
3197 compilation.
3198 .Ip "\fB\-include\fR \fIfile\fR" 4
3199 .IX Item "-include file"
3200 Process \fIfile\fR as input before processing the regular input file.
3201 In effect, the contents of \fIfile\fR are compiled first.  Any \fB\-D\fR
3202 and \fB\-U\fR options on the command line are always processed before
3203 \&\fB\-include\fR \fIfile\fR, regardless of the order in which they are
3204 written.  All the \fB\-include\fR and \fB\-imacros\fR options are
3205 processed in the order in which they are written.
3206 .Ip "\fB\-imacros\fR \fIfile\fR" 4
3207 .IX Item "-imacros file"
3208 Process \fIfile\fR as input, discarding the resulting output, before
3209 processing the regular input file.  Because the output generated from
3210 \&\fIfile\fR is discarded, the only effect of \fB\-imacros\fR \fIfile\fR
3211 is to make the macros defined in \fIfile\fR available for use in the
3212 main input.  All the \fB\-include\fR and \fB\-imacros\fR options are
3213 processed in the order in which they are written.
3214 .Ip "\fB\-idirafter\fR \fIdir\fR" 4
3215 .IX Item "-idirafter dir"
3216 Add the directory \fIdir\fR to the second include path.  The directories
3217 on the second include path are searched when a header file is not found
3218 in any of the directories in the main include path (the one that
3219 \&\fB\-I\fR adds to).
3220 .Ip "\fB\-iprefix\fR \fIprefix\fR" 4
3221 .IX Item "-iprefix prefix"
3222 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
3223 options.
3224 .Ip "\fB\-iwithprefix\fR \fIdir\fR" 4
3225 .IX Item "-iwithprefix dir"
3226 Add a directory to the second include path.  The directory's name is
3227 made by concatenating \fIprefix\fR and \fIdir\fR, where \fIprefix\fR was
3228 specified previously with \fB\-iprefix\fR.  If you have not specified a
3229 prefix yet, the directory containing the installed passes of the
3230 compiler is used as the default.
3231 .Ip "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
3232 .IX Item "-iwithprefixbefore dir"
3233 Add a directory to the main include path.  The directory's name is made
3234 by concatenating \fIprefix\fR and \fIdir\fR, as in the case of
3235 \&\fB\-iwithprefix\fR.
3236 .Ip "\fB\-isystem\fR \fIdir\fR" 4
3237 .IX Item "-isystem dir"
3238 Add a directory to the beginning of the second include path, marking it
3239 as a system directory, so that it gets the same special treatment as
3240 is applied to the standard system directories.
3241 .Ip "\fB\-nostdinc\fR" 4
3242 .IX Item "-nostdinc"
3243 Do not search the standard system directories for header files.  Only
3244 the directories you have specified with \fB\-I\fR options (and the
3245 current directory, if appropriate) are searched.  
3246 .Sp
3247 By using both \fB\-nostdinc\fR and \fB\-I-\fR, you can limit the include-file
3248 search path to only those directories you specify explicitly.
3249 .Ip "\fB\-remap\fR" 4
3250 .IX Item "-remap"
3251 When searching for a header file in a directory, remap file names if a
3252 file named \fIheader.gcc\fR exists in that directory.  This can be used
3253 to work around limitations of file systems with file name restrictions.
3254 The \fIheader.gcc\fR file should contain a series of lines with two
3255 tokens on each line: the first token is the name to map, and the second
3256 token is the actual name to use.
3257 .Ip "\fB\-undef\fR" 4
3258 .IX Item "-undef"
3259 Do not predefine any nonstandard macros.  (Including architecture flags).
3260 .Ip "\fB\-E\fR" 4
3261 .IX Item "-E"
3262 Run only the C preprocessor.  Preprocess all the C source files
3263 specified and output the results to standard output or to the
3264 specified output file.
3265 .Ip "\fB\-C\fR" 4
3266 .IX Item "-C"
3267 Tell the preprocessor not to discard comments.  Used with the
3268 \&\fB\-E\fR option.
3269 .Ip "\fB\-P\fR" 4
3270 .IX Item "-P"
3271 Tell the preprocessor not to generate \fB#line\fR directives.
3272 Used with the \fB\-E\fR option.
3273 .Ip "\fB\-M\fR" 4
3274 .IX Item "-M"
3275 Instead of outputting the result of preprocessing, output a rule
3276 suitable for \f(CW\*(C`make\*(C'\fR describing the dependencies of the main source
3277 file.  The preprocessor outputs one \f(CW\*(C`make\*(C'\fR rule containing the
3278 object file name for that source file, a colon, and the names of all the
3279 included files.  Unless overridden explicitly, the object file name
3280 consists of the basename of the source file with any suffix replaced with
3281 object file suffix. If there are many included files then the
3282 rule is split into several lines using \fB\e\fR\-newline.
3283 .Sp
3284 \&\fB\-M\fR implies \fB\-E\fR.
3285 .Ip "\fB\-MM\fR" 4
3286 .IX Item "-MM"
3287 Like \fB\-M\fR, but mention only the files included with \fB#include
3288 "\fR\fIfile\fR\fB"\fR.  System header files included with \fB#include
3289 <\fR\fIfile\fR\fB>\fR are omitted.
3290 .Ip "\fB\-MD\fR" 4
3291 .IX Item "-MD"
3292 Like \fB\-M\fR but the dependency information is written to a file
3293 rather than stdout.  \f(CW\*(C`gcc\*(C'\fR will use the same file name and
3294 directory as the object file, but with the suffix \*(L".d\*(R" instead.
3295 .Sp
3296 This is in addition to compiling the main file as specified \-\-\-
3297 \&\fB\-MD\fR does not inhibit ordinary compilation the way \fB\-M\fR does,
3298 unless you also specify \fB\-MG\fR.
3299 .Sp
3300 With Mach, you can use the utility \f(CW\*(C`md\*(C'\fR to merge multiple
3301 dependency files into a single dependency file suitable for using with
3302 the \fBmake\fR command.
3303 .Ip "\fB\-MMD\fR" 4
3304 .IX Item "-MMD"
3305 Like \fB\-MD\fR except mention only user header files, not system
3306 \&\-header files.
3307 .Ip "\fB\-MF\fR \fIfile\fR" 4
3308 .IX Item "-MF file"
3309 When used with \fB\-M\fR or \fB\-MM\fR, specifies a file to write the
3310 dependencies to.  This allows the preprocessor to write the preprocessed
3311 file to stdout normally.  If no \fB\-MF\fR switch is given, \s-1CPP\s0 sends
3312 the rules to stdout and suppresses normal preprocessed output.
3313 .Sp
3314 Another way to specify output of a \f(CW\*(C`make\*(C'\fR rule is by setting
3315 the environment variable \fB\s-1DEPENDENCIES_OUTPUT\s0\fR.
3316 .Ip "\fB\-MG\fR" 4
3317 .IX Item "-MG"
3318 When used with \fB\-M\fR or \fB\-MM\fR, \fB\-MG\fR says to treat missing
3319 header files as generated files and assume they live in the same
3320 directory as the source file.  It suppresses preprocessed output, as a
3321 missing header file is ordinarily an error.
3322 .Sp
3323 This feature is used in automatic updating of makefiles.
3324 .Ip "\fB\-MP\fR" 4
3325 .IX Item "-MP"
3326 This option instructs \s-1CPP\s0 to add a phony target for each dependency
3327 other than the main file, causing each to depend on nothing.  These
3328 dummy rules work around errors \f(CW\*(C`make\*(C'\fR gives if you remove header
3329 files without updating the \f(CW\*(C`Makefile\*(C'\fR to match.
3330 .Sp
3331 This is typical output:\-
3332 .Sp
3333 .Vb 1
3334 \&        /tmp/test.o: /tmp/test.c /tmp/test.h
3335 .Ve
3336 .Vb 1
3337 \&        /tmp/test.h:
3338 .Ve
3339 .Ip "\fB\-MQ\fR \fItarget\fR" 4
3340 .IX Item "-MQ target"
3341 .PD 0
3342 .Ip "\fB\-MT\fR \fItarget\fR" 4
3343 .IX Item "-MT target"
3344 .PD
3345 By default \s-1CPP\s0 uses the main file name, including any path, and appends
3346 the object suffix, normally ``.o'', to it to obtain the name of the
3347 target for dependency generation.  With \fB\-MT\fR you can specify a
3348 target yourself, overriding the default one.
3349 .Sp
3350 If you want multiple targets, you can specify them as a single argument
3351 to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
3352 .Sp
3353 The targets you specify are output in the order they appear on the
3354 command line.  \fB\-MQ\fR is identical to \fB\-MT\fR, except that the
3355 target name is quoted for Make, but with \fB\-MT\fR it isn't.  For
3356 example, \-MT '$(objpfx)foo.o' gives
3357 .Sp
3358 .Vb 1
3359 \&        $(objpfx)foo.o: /tmp/foo.c
3360 .Ve
3361 but \-MQ '$(objpfx)foo.o' gives
3362 .Sp
3363 .Vb 1
3364 \&        $$(objpfx)foo.o: /tmp/foo.c
3365 .Ve
3366 The default target is automatically quoted, as if it were given with
3367 \&\fB\-MQ\fR.
3368 .Ip "\fB\-H\fR" 4
3369 .IX Item "-H"
3370 Print the name of each header file used, in addition to other normal
3371 activities.
3372 .Ip "\fB\-A\fR\fIquestion\fR\fB(\fR\fIanswer\fR\fB)\fR" 4
3373 .IX Item "-Aquestion(answer)"
3374 Assert the answer \fIanswer\fR for \fIquestion\fR, in case it is tested
3375 with a preprocessing conditional such as \fB#if
3376 #\fR\fIquestion\fR\fB(\fR\fIanswer\fR\fB)\fR.  \fB\-A-\fR disables the standard
3377 assertions that normally describe the target machine.
3378 .Ip "\fB\-D\fR\fImacro\fR" 4
3379 .IX Item "-Dmacro"
3380 Define macro \fImacro\fR with the string \fB1\fR as its definition.
3381 .Ip "\fB\-D\fR\fImacro\fR\fB=\fR\fIdefn\fR" 4
3382 .IX Item "-Dmacro=defn"
3383 Define macro \fImacro\fR as \fIdefn\fR.  All instances of \fB\-D\fR on
3384 the command line are processed before any \fB\-U\fR options.
3385 .Sp
3386 Any \fB\-D\fR and \fB\-U\fR options on the command line are processed in
3387 order, and always before \fB\-imacros\fR \fIfile\fR, regardless of the
3388 order in which they are written.
3389 .Ip "\fB\-U\fR\fImacro\fR" 4
3390 .IX Item "-Umacro"
3391 Undefine macro \fImacro\fR.  \fB\-U\fR options are evaluated after all
3392 \&\fB\-D\fR options, but before any \fB\-include\fR and \fB\-imacros\fR
3393 options.
3394 .Sp
3395 Any \fB\-D\fR and \fB\-U\fR options on the command line are processed in
3396 order, and always before \fB\-imacros\fR \fIfile\fR, regardless of the
3397 order in which they are written.
3398 .Ip "\fB\-dM\fR" 4
3399 .IX Item "-dM"
3400 Tell the preprocessor to output only a list of the macro definitions
3401 that are in effect at the end of preprocessing.  Used with the \fB\-E\fR
3402 option.
3403 .Ip "\fB\-dD\fR" 4
3404 .IX Item "-dD"
3405 Tell the preprocessing to pass all macro definitions into the output, in
3406 their proper sequence in the rest of the output.
3407 .Ip "\fB\-dN\fR" 4
3408 .IX Item "-dN"
3409 Like \fB\-dD\fR except that the macro arguments and contents are omitted.
3410 Only \fB#define\fR \fIname\fR is included in the output.
3411 .Ip "\fB\-dI\fR" 4
3412 .IX Item "-dI"
3413 Output \fB#include\fR directives in addition to the result of
3414 preprocessing.
3415 .Ip "\fB\-trigraphs\fR" 4
3416 .IX Item "-trigraphs"
3417 Process \s-1ISO\s0 standard trigraph sequences.  These are three-character
3418 sequences, all starting with \fB??\fR, that are defined by \s-1ISO\s0 C to
3419 stand for single characters.  For example, \fB??/\fR stands for
3420 \&\fB\e\fR, so \fB'??/n'\fR is a character constant for a newline.  By
3421 default, \s-1GCC\s0 ignores trigraphs, but in standard-conforming modes it
3422 converts them.  See the \fB\-std\fR and \fB\-ansi\fR options.
3423 .Sp
3424 The nine trigraph sequences are
3425 .RS 4
3426 .Ip "\fB??(\fR" 4
3427 .IX Item "??("
3428 -> \fB[\fR
3429 .Ip "\fB??)\fR" 4
3430 .IX Item "??)"
3431 -> \fB]\fR
3432 .Ip "\fB??<\fR" 4
3433 .IX Item "??<"
3434 -> \fB{\fR
3435 .Ip "\fB??>\fR" 4
3436 .IX Item "??>"
3437 -> \fB}\fR
3438 .Ip "\fB??=\fR" 4
3439 .IX Item "??="
3440 -> \fB#\fR
3441 .Ip "\fB??/\fR" 4
3442 .IX Item "??/"
3443 -> \fB\e\fR
3444 .Ip "\fB??'\fR" 4
3445 .IX Item "??'"
3446 -> \fB^\fR
3447 .Ip "\fB??!\fR" 4
3448 .IX Item "??!"
3449 -> \fB|\fR
3450 .Ip "\fB??-\fR" 4
3451 .IX Item "??-"
3452 -> \fB~\fR
3453 .RE
3454 .RS 4
3455 .Sp
3456 Trigraph support is not popular, so many compilers do not implement it
3457 properly.  Portable code should not rely on trigraphs being either
3458 converted or ignored.
3459 .RE
3460 .Ip "\fB\-Wp,\fR\fIoption\fR" 4
3461 .IX Item "-Wp,option"
3462 Pass \fIoption\fR as an option to the preprocessor.  If \fIoption\fR
3463 contains commas, it is split into multiple options at the commas.
3464 .Sh "Passing Options to the Assembler"
3465 .IX Subsection "Passing Options to the Assembler"
3466 You can pass options to the assembler.
3467 .Ip "\fB\-Wa,\fR\fIoption\fR" 4
3468 .IX Item "-Wa,option"
3469 Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
3470 contains commas, it is split into multiple options at the commas.
3471 .Sh "Options for Linking"
3472 .IX Subsection "Options for Linking"
3473 These options come into play when the compiler links object files into
3474 an executable output file.  They are meaningless if the compiler is
3475 not doing a link step.
3476 .Ip "\fIobject-file-name\fR" 4
3477 .IX Item "object-file-name"
3478 A file name that does not end in a special recognized suffix is
3479 considered to name an object file or library.  (Object files are
3480 distinguished from libraries by the linker according to the file
3481 contents.)  If linking is done, these object files are used as input
3482 to the linker.
3483 .Ip "\fB\-c\fR" 4
3484 .IX Item "-c"
3485 .PD 0
3486 .Ip "\fB\-S\fR" 4
3487 .IX Item "-S"
3488 .Ip "\fB\-E\fR" 4
3489 .IX Item "-E"
3490 .PD
3491 If any of these options is used, then the linker is not run, and
3492 object file names should not be used as arguments.  
3493 .Ip "\fB\-l\fR\fIlibrary\fR" 4
3494 .IX Item "-llibrary"
3495 Search the library named \fIlibrary\fR when linking.
3496 .Sp
3497 It makes a difference where in the command you write this option; the
3498 linker searches processes libraries and object files in the order they
3499 are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
3500 after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
3501 to functions in \fBz\fR, those functions may not be loaded.
3502 .Sp
3503 The linker searches a standard list of directories for the library,
3504 which is actually a file named \fIlib\fIlibrary\fI.a\fR.  The linker
3505 then uses this file as if it had been specified precisely by name.
3506 .Sp
3507 The directories searched include several standard system directories
3508 plus any that you specify with \fB\-L\fR.
3509 .Sp
3510 Normally the files found this way are library files\-\-\-archive files
3511 whose members are object files.  The linker handles an archive file by
3512 scanning through it for members which define symbols that have so far
3513 been referenced but not defined.  But if the file that is found is an
3514 ordinary object file, it is linked in the usual fashion.  The only
3515 difference between using an \fB\-l\fR option and specifying a file name
3516 is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
3517 and searches several directories.
3518 .Ip "\fB\-lobjc\fR" 4
3519 .IX Item "-lobjc"
3520 You need this special case of the \fB\-l\fR option in order to
3521 link an Objective C program.
3522 .Ip "\fB\-nostartfiles\fR" 4
3523 .IX Item "-nostartfiles"
3524 Do not use the standard system startup files when linking.
3525 The standard system libraries are used normally, unless \fB\-nostdlib\fR
3526 or \fB\-nodefaultlibs\fR is used.
3527 .Ip "\fB\-nodefaultlibs\fR" 4
3528 .IX Item "-nodefaultlibs"
3529 Do not use the standard system libraries when linking.
3530 Only the libraries you specify will be passed to the linker.
3531 The standard startup files are used normally, unless \fB\-nostartfiles\fR
3532 is used.  The compiler may generate calls to memcmp, memset, and memcpy
3533 for System V (and \s-1ISO\s0 C) environments or to bcopy and bzero for
3534 \&\s-1BSD\s0 environments.  These entries are usually resolved by entries in
3535 libc.  These entry points should be supplied through some other
3536 mechanism when this option is specified.
3537 .Ip "\fB\-nostdlib\fR" 4
3538 .IX Item "-nostdlib"
3539 Do not use the standard system startup files or libraries when linking.
3540 No startup files and only the libraries you specify will be passed to
3541 the linker. The compiler may generate calls to memcmp, memset, and memcpy
3542 for System V (and \s-1ISO\s0 C) environments or to bcopy and bzero for
3543 \&\s-1BSD\s0 environments.  These entries are usually resolved by entries in
3544 libc.  These entry points should be supplied through some other
3545 mechanism when this option is specified.
3546 .Sp
3547 One of the standard libraries bypassed by \fB\-nostdlib\fR and
3548 \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
3549 that \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
3550 needs for some languages.
3551 .Sp
3552 In most cases, you need \fIlibgcc.a\fR even when you want to avoid
3553 other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
3554 or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
3555 This ensures that you have no unresolved references to internal \s-1GCC\s0
3556 library subroutines.  (For example, \fB_\|_main\fR, used to ensure \*(C+
3557 constructors will be called.)
3558 .Ip "\fB\-s\fR" 4
3559 .IX Item "-s"
3560 Remove all symbol table and relocation information from the executable.
3561 .Ip "\fB\-static\fR" 4
3562 .IX Item "-static"
3563 On systems that support dynamic linking, this prevents linking with the shared
3564 libraries.  On other systems, this option has no effect.
3565 .Ip "\fB\-shared\fR" 4
3566 .IX Item "-shared"
3567 Produce a shared object which can then be linked with other objects to
3568 form an executable.  Not all systems support this option.  For predictable
3569 results, you must also specify the same set of options that were used to 
3570 generate code (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions)
3571 when you specify this option.[1]
3572 .Ip "\fB\-shared-libgcc\fR" 4
3573 .IX Item "-shared-libgcc"
3574 .PD 0
3575 .Ip "\fB\-static-libgcc\fR" 4
3576 .IX Item "-static-libgcc"
3577 .PD
3578 On systems that provide \fIlibgcc\fR as a shared library, these options
3579 force the use of either the shared or static version respectively.
3580 If no shared version of \fIlibgcc\fR was built when the compiler was
3581 configured, these options have no effect.
3582 .Sp
3583 There are several situations in which an application should use the
3584 shared \fIlibgcc\fR instead of the static version.  The most common
3585 of these is when the application wishes to throw and catch exceptions
3586 across different shared libraries.  In that case, each of the libraries
3587 as well as the application itself should use the shared \fIlibgcc\fR.
3588 .Sp
3589 Therefore, whenever you specify the \fB\-shared\fR option, the \s-1GCC\s0
3590 driver automatically adds \fB\-shared-libgcc\fR, unless you explicitly
3591 specify \fB\-static-libgcc\fR.  The G++ driver automatically adds
3592 \&\fB\-shared-libgcc\fR when you build a main executable as well because
3593 for \*(C+ programs that is typically the right thing to do.
3594 (Exception-handling will not work reliably otherwise.)
3595 .Sp
3596 However, when linking a main executable written in C, you must
3597 explicitly say \fB\-shared-libgcc\fR if you want to use the shared
3598 \&\fIlibgcc\fR.
3599 .Ip "\fB\-symbolic\fR" 4
3600 .IX Item "-symbolic"
3601 Bind references to global symbols when building a shared object.  Warn
3602 about any unresolved references (unless overridden by the link editor
3603 option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
3604 this option.
3605 .Ip "\fB\-Xlinker\fR \fIoption\fR" 4
3606 .IX Item "-Xlinker option"
3607 Pass \fIoption\fR as an option to the linker.  You can use this to
3608 supply system-specific linker options which \s-1GCC\s0 does not know how to
3609 recognize.
3610 .Sp
3611 If you want to pass an option that takes an argument, you must use
3612 \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
3613 For example, to pass \fB\-assert definitions\fR, you must write
3614 \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
3615 \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
3616 string as a single argument, which is not what the linker expects.
3617 .Ip "\fB\-Wl,\fR\fIoption\fR" 4
3618 .IX Item "-Wl,option"
3619 Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
3620 commas, it is split into multiple options at the commas.
3621 .Ip "\fB\-u\fR \fIsymbol\fR" 4
3622 .IX Item "-u symbol"
3623 Pretend the symbol \fIsymbol\fR is undefined, to force linking of
3624 library modules to define it.  You can use \fB\-u\fR multiple times with
3625 different symbols to force loading of additional library modules.
3626 .Sh "Options for Directory Search"
3627 .IX Subsection "Options for Directory Search"
3628 These options specify directories to search for header files, for
3629 libraries and for parts of the compiler:
3630 .Ip "\fB\-I\fR\fIdir\fR" 4
3631 .IX Item "-Idir"
3632 Add the directory \fIdir\fR to the head of the list of directories to be
3633 searched for header files.  This can be used to override a system header
3634 file, substituting your own version, since these directories are
3635 searched before the system header file directories.  However, you should
3636 not use this option to add directories that contain vendor-supplied
3637 system header files (use \fB\-isystem\fR for that). If you use more than
3638 one \fB\-I\fR option, the directories are scanned in left-to-right
3639 order; the standard system directories come after.
3640 .Ip "\fB\-I-\fR" 4
3641 .IX Item "-I-"
3642 Any directories you specify with \fB\-I\fR options before the \fB\-I-\fR
3643 option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
3644 they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
3645 .Sp
3646 If additional directories are specified with \fB\-I\fR options after
3647 the \fB\-I-\fR, these directories are searched for all \fB#include\fR
3648 directives.  (Ordinarily \fIall\fR \fB\-I\fR directories are used
3649 this way.)
3650 .Sp
3651 In addition, the \fB\-I-\fR option inhibits the use of the current
3652 directory (where the current input file came from) as the first search
3653 directory for \fB#include "\fR\fIfile\fR\fB"\fR.  There is no way to
3654 override this effect of \fB\-I-\fR.  With \fB\-I.\fR you can specify
3655 searching the directory which was current when the compiler was
3656 invoked.  That is not exactly the same as what the preprocessor does
3657 by default, but it is often satisfactory.
3658 .Sp
3659 \&\fB\-I-\fR does not inhibit the use of the standard system directories
3660 for header files.  Thus, \fB\-I-\fR and \fB\-nostdinc\fR are
3661 independent.
3662 .Ip "\fB\-L\fR\fIdir\fR" 4
3663 .IX Item "-Ldir"
3664 Add directory \fIdir\fR to the list of directories to be searched
3665 for \fB\-l\fR.
3666 .Ip "\fB\-B\fR\fIprefix\fR" 4
3667 .IX Item "-Bprefix"
3668 This option specifies where to find the executables, libraries,
3669 include files, and data files of the compiler itself.
3670 .Sp
3671 The compiler driver program runs one or more of the subprograms
3672 \&\fIcpp\fR, \fIcc1\fR, \fIas\fR and \fIld\fR.  It tries
3673 \&\fIprefix\fR as a prefix for each program it tries to run, both with and
3674 without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR.
3675 .Sp
3676 For each subprogram to be run, the compiler driver first tries the
3677 \&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
3678 was not specified, the driver tries two standard prefixes, which are
3679 \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc-lib/\fR.  If neither of
3680 those results in a file name that is found, the unmodified program
3681 name is searched for using the directories specified in your
3682 \&\fB\s-1PATH\s0\fR environment variable.
3683 .Sp
3684 \&\fB\-B\fR prefixes that effectively specify directory names also apply
3685 to libraries in the linker, because the compiler translates these
3686 options into \fB\-L\fR options for the linker.  They also apply to
3687 includes files in the preprocessor, because the compiler translates these
3688 options into \fB\-isystem\fR options for the preprocessor.  In this case,
3689 the compiler appends \fBinclude\fR to the prefix.
3690 .Sp
3691 The run-time support file \fIlibgcc.a\fR can also be searched for using
3692 the \fB\-B\fR prefix, if needed.  If it is not found there, the two
3693 standard prefixes above are tried, and that is all.  The file is left
3694 out of the link if it is not found by those means.
3695 .Sp
3696 Another way to specify a prefix much like the \fB\-B\fR prefix is to use
3697 the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.  
3698 .Ip "\fB\-specs=\fR\fIfile\fR" 4
3699 .IX Item "-specs=file"
3700 Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
3701 file, in order to override the defaults that the \fIgcc\fR driver
3702 program uses when determining what switches to pass to \fIcc1\fR,
3703 \&\fIcc1plus\fR, \fIas\fR, \fIld\fR, etc.  More than one
3704 \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
3705 are processed in order, from left to right.
3706 .Sh "Specifying Target Machine and Compiler Version"
3707 .IX Subsection "Specifying Target Machine and Compiler Version"
3708 By default, \s-1GCC\s0 compiles code for the same type of machine that you
3709 are using.  However, it can also be installed as a cross-compiler, to
3710 compile for some other type of machine.  In fact, several different
3711 configurations of \s-1GCC\s0, for different target machines, can be
3712 installed side by side.  Then you specify which one to use with the
3713 \&\fB\-b\fR option.
3714 .PP
3715 In addition, older and newer versions of \s-1GCC\s0 can be installed side
3716 by side.  One of them (probably the newest) will be the default, but
3717 you may sometimes wish to use another.
3718 .Ip "\fB\-b\fR \fImachine\fR" 4
3719 .IX Item "-b machine"
3720 The argument \fImachine\fR specifies the target machine for compilation.
3721 This is useful when you have installed \s-1GCC\s0 as a cross-compiler.
3722 .Sp
3723 The value to use for \fImachine\fR is the same as was specified as the
3724 machine type when configuring \s-1GCC\s0 as a cross-compiler.  For
3725 example, if a cross-compiler was configured with \fBconfigure
3726 i386v\fR, meaning to compile for an 80386 running System V, then you
3727 would specify \fB\-b i386v\fR to run that cross compiler.
3728 .Sp
3729 When you do not specify \fB\-b\fR, it normally means to compile for
3730 the same type of machine that you are using.
3731 .Ip "\fB\-V\fR \fIversion\fR" 4
3732 .IX Item "-V version"
3733 The argument \fIversion\fR specifies which version of \s-1GCC\s0 to run.
3734 This is useful when multiple versions are installed.  For example,
3735 \&\fIversion\fR might be \fB2.0\fR, meaning to run \s-1GCC\s0 version 2.0.
3736 .Sp
3737 The default version, when you do not specify \fB\-V\fR, is the last
3738 version of \s-1GCC\s0 that you installed.
3739 .PP
3740 The \fB\-b\fR and \fB\-V\fR options actually work by controlling part of
3741 the file name used for the executable files and libraries used for
3742 compilation.  A given version of \s-1GCC\s0, for a given target machine, is
3743 normally kept in the directory \fI/usr/local/lib/gcc-lib/\fImachine\fI/\fIversion\fI\fR.
3744 .PP
3745 Thus, sites can customize the effect of \fB\-b\fR or \fB\-V\fR either by
3746 changing the names of these directories or adding alternate names (or
3747 symbolic links).  If in directory \fI/usr/local/lib/gcc-lib/\fR the
3748 file \fI80386\fR is a link to the file \fIi386v\fR, then \fB\-b
3749 80386\fR becomes an alias for \fB\-b i386v\fR.
3750 .PP
3751 In one respect, the \fB\-b\fR or \fB\-V\fR do not completely change
3752 to a different compiler: the top-level driver program \fBgcc\fR
3753 that you originally invoked continues to run and invoke the other
3754 executables (preprocessor, compiler per se, assembler and linker)
3755 that do the real work.  However, since no real work is done in the
3756 driver program, it usually does not matter that the driver program
3757 in use is not the one for the specified target.  It is common for the
3758 interface to the other executables to change incompatibly between
3759 compiler versions, so unless the version specified is very close to that
3760 of the driver (for example, \fB\-V 3.0\fR with a driver program from \s-1GCC\s0
3761 version 3.0.1), use of \fB\-V\fR may not work; for example, using
3762 \&\fB\-V 2.95.2\fR will not work with a driver program from \s-1GCC\s0 3.0.
3763 .PP
3764 The only way that the driver program depends on the target machine is
3765 in the parsing and handling of special machine-specific options.
3766 However, this is controlled by a file which is found, along with the
3767 other executables, in the directory for the specified version and
3768 target machine.  As a result, a single installed driver program adapts
3769 to any specified target machine, and sufficiently similar compiler
3770 versions.
3771 .PP
3772 The driver program executable does control one significant thing,
3773 however: the default version and target machine.  Therefore, you can
3774 install different instances of the driver program, compiled for
3775 different targets or versions, under different names.
3776 .PP
3777 For example, if the driver for version 2.0 is installed as \fBogcc\fR
3778 and that for version 2.1 is installed as \fBgcc\fR, then the command
3779 \&\fBgcc\fR will use version 2.1 by default, while \fBogcc\fR will use
3780 2.0 by default.  However, you can choose either version with either
3781 command with the \fB\-V\fR option.
3782 .Sh "Hardware Models and Configurations"
3783 .IX Subsection "Hardware Models and Configurations"
3784 Earlier we discussed the standard option \fB\-b\fR which chooses among
3785 different installed compilers for completely different target
3786 machines, such as Vax vs. 68000 vs. 80386.
3787 .PP
3788 In addition, each of these target machine types can have its own
3789 special options, starting with \fB\-m\fR, to choose among various
3790 hardware models or configurations\-\-\-for example, 68010 vs 68020,
3791 floating coprocessor or none.  A single installed version of the
3792 compiler can compile for any model or configuration, according to the
3793 options specified.
3794 .PP
3795 Some configurations of the compiler also support additional special
3796 options, usually for compatibility with other compilers on the same
3797 platform.
3798 .PP
3799 .I "M680x0 Options"
3800 .IX Subsection "M680x0 Options"
3801 .PP
3802 These are the \fB\-m\fR options defined for the 68000 series.  The default
3803 values for these options depends on which style of 68000 was selected when
3804 the compiler was configured; the defaults for the most common choices are
3805 given below.
3806 .Ip "\fB\-m68000\fR" 4
3807 .IX Item "-m68000"
3808 .PD 0
3809 .Ip "\fB\-mc68000\fR" 4
3810 .IX Item "-mc68000"
3811 .PD
3812 Generate output for a 68000.  This is the default
3813 when the compiler is configured for 68000\-based systems.
3814 .Sp
3815 Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
3816 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
3817 .Ip "\fB\-m68020\fR" 4
3818 .IX Item "-m68020"
3819 .PD 0
3820 .Ip "\fB\-mc68020\fR" 4
3821 .IX Item "-mc68020"
3822 .PD
3823 Generate output for a 68020.  This is the default
3824 when the compiler is configured for 68020\-based systems.
3825 .Ip "\fB\-m68881\fR" 4
3826 .IX Item "-m68881"
3827 Generate output containing 68881 instructions for floating point.
3828 This is the default for most 68020 systems unless \fB\-nfp\fR was
3829 specified when the compiler was configured.
3830 .Ip "\fB\-m68030\fR" 4
3831 .IX Item "-m68030"
3832 Generate output for a 68030.  This is the default when the compiler is
3833 configured for 68030\-based systems.
3834 .Ip "\fB\-m68040\fR" 4
3835 .IX Item "-m68040"
3836 Generate output for a 68040.  This is the default when the compiler is
3837 configured for 68040\-based systems.
3838 .Sp
3839 This option inhibits the use of 68881/68882 instructions that have to be
3840 emulated by software on the 68040.  Use this option if your 68040 does not
3841 have code to emulate those instructions.
3842 .Ip "\fB\-m68060\fR" 4
3843 .IX Item "-m68060"
3844 Generate output for a 68060.  This is the default when the compiler is
3845 configured for 68060\-based systems.
3846 .Sp
3847 This option inhibits the use of 68020 and 68881/68882 instructions that
3848 have to be emulated by software on the 68060.  Use this option if your 68060
3849 does not have code to emulate those instructions.
3850 .Ip "\fB\-mcpu32\fR" 4
3851 .IX Item "-mcpu32"
3852 Generate output for a \s-1CPU32\s0. This is the default
3853 when the compiler is configured for CPU32\-based systems.
3854 .Sp
3855 Use this option for microcontrollers with a
3856 \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
3857 68336, 68340, 68341, 68349 and 68360.
3858 .Ip "\fB\-m5200\fR" 4
3859 .IX Item "-m5200"
3860 Generate output for a 520X \*(L"coldfire\*(R" family cpu.  This is the default
3861 when the compiler is configured for 520X-based systems.
3862 .Sp
3863 Use this option for microcontroller with a 5200 core, including 
3864 the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5202\s0.
3865 .Ip "\fB\-m68020\-40\fR" 4
3866 .IX Item "-m68020-40"
3867 Generate output for a 68040, without using any of the new instructions.
3868 This results in code which can run relatively efficiently on either a
3869 68020/68881 or a 68030 or a 68040.  The generated code does use the
3870 68881 instructions that are emulated on the 68040.
3871 .Ip "\fB\-m68020\-60\fR" 4
3872 .IX Item "-m68020-60"
3873 Generate output for a 68060, without using any of the new instructions.
3874 This results in code which can run relatively efficiently on either a
3875 68020/68881 or a 68030 or a 68040.  The generated code does use the
3876 68881 instructions that are emulated on the 68060.
3877 .Ip "\fB\-mfpa\fR" 4
3878 .IX Item "-mfpa"
3879 Generate output containing Sun \s-1FPA\s0 instructions for floating point.
3880 .Ip "\fB\-msoft-float\fR" 4
3881 .IX Item "-msoft-float"
3882 Generate output containing library calls for floating point.
3883 \&\fBWarning:\fR the requisite libraries are not available for all m68k
3884 targets.  Normally the facilities of the machine's usual C compiler are
3885 used, but this can't be done directly in cross-compilation.  You must
3886 make your own arrangements to provide suitable library functions for
3887 cross-compilation.  The embedded targets \fBm68k-*\-aout\fR and
3888 \&\fBm68k-*\-coff\fR do provide software floating point support.
3889 .Ip "\fB\-mshort\fR" 4
3890 .IX Item "-mshort"
3891 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
3892 .Ip "\fB\-mnobitfield\fR" 4
3893 .IX Item "-mnobitfield"
3894 Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
3895 and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
3896 .Ip "\fB\-mbitfield\fR" 4
3897 .IX Item "-mbitfield"
3898 Do use the bit-field instructions.  The \fB\-m68020\fR option implies
3899 \&\fB\-mbitfield\fR.  This is the default if you use a configuration
3900 designed for a 68020.
3901 .Ip "\fB\-mrtd\fR" 4
3902 .IX Item "-mrtd"
3903 Use a different function-calling convention, in which functions
3904 that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
3905 instruction, which pops their arguments while returning.  This
3906 saves one instruction in the caller since there is no need to pop
3907 the arguments there.
3908 .Sp
3909 This calling convention is incompatible with the one normally
3910 used on Unix, so you cannot use it if you need to call libraries
3911 compiled with the Unix compiler.
3912 .Sp
3913 Also, you must provide function prototypes for all functions that
3914 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
3915 otherwise incorrect code will be generated for calls to those
3916 functions.
3917 .Sp
3918 In addition, seriously incorrect code will result if you call a
3919 function with too many arguments.  (Normally, extra arguments are
3920 harmlessly ignored.)
3921 .Sp
3922 The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
3923 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
3924 .Ip "\fB\-malign-int\fR" 4
3925 .IX Item "-malign-int"
3926 .PD 0
3927 .Ip "\fB\-mno-align-int\fR" 4
3928 .IX Item "-mno-align-int"
3929 .PD
3930 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, 
3931 \&\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
3932 boundary (\fB\-malign-int\fR) or a 16\-bit boundary (\fB\-mno-align-int\fR).
3933 Aligning variables on 32\-bit boundaries produces code that runs somewhat
3934 faster on processors with 32\-bit busses at the expense of more memory.
3935 .Sp
3936 \&\fBWarning:\fR if you use the \fB\-malign-int\fR switch, \s-1GCC\s0 will
3937 align structures containing the above types  differently than
3938 most published application binary interface specifications for the m68k.
3939 .Ip "\fB\-mpcrel\fR" 4
3940 .IX Item "-mpcrel"
3941 Use the pc-relative addressing mode of the 68000 directly, instead of
3942 using a global offset table.  At present, this option implies \-fpic,
3943 allowing at most a 16\-bit offset for pc-relative addressing.  \-fPIC is
3944 not presently supported with \-mpcrel, though this could be supported for
3945 68020 and higher processors.
3946 .Ip "\fB\-mno-strict-align\fR" 4
3947 .IX Item "-mno-strict-align"
3948 .PD 0
3949 .Ip "\fB\-mstrict-align\fR" 4
3950 .IX Item "-mstrict-align"
3951 .PD
3952 Do not (do) assume that unaligned memory references will be handled by
3953 the system.
3954 .PP
3955 .I "M68hc1x Options"
3956 .IX Subsection "M68hc1x Options"
3957 .PP
3958 These are the \fB\-m\fR options defined for the 68hc11 and 68hc12
3959 microcontrollers.  The default values for these options depends on 
3960 which style of microcontroller was selected when the compiler was configured;
3961 the defaults for the most common choices are given below.
3962 .Ip "\fB\-m6811\fR" 4
3963 .IX Item "-m6811"
3964 .PD 0
3965 .Ip "\fB\-m68hc11\fR" 4
3966 .IX Item "-m68hc11"
3967 .PD
3968 Generate output for a 68HC11.  This is the default
3969 when the compiler is configured for 68HC11\-based systems.
3970 .Ip "\fB\-m6812\fR" 4
3971 .IX Item "-m6812"
3972 .PD 0
3973 .Ip "\fB\-m68hc12\fR" 4
3974 .IX Item "-m68hc12"
3975 .PD
3976 Generate output for a 68HC12.  This is the default
3977 when the compiler is configured for 68HC12\-based systems.
3978 .Ip "\fB\-mauto-incdec\fR" 4
3979 .IX Item "-mauto-incdec"
3980 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
3981 addressing modes.
3982 .Ip "\fB\-mshort\fR" 4
3983 .IX Item "-mshort"
3984 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
3985 .Ip "\fB\-msoft-reg-count=\fR\fIcount\fR" 4
3986 .IX Item "-msoft-reg-count=count"
3987 Specify the number of pseudo-soft registers which are used for the
3988 code generation.  The maximum number is 32.  Using more pseudo-soft
3989 register may or may not result in better code depending on the program.
3990 The default is 4 for 68HC11 and 2 for 68HC12.
3991 .PP
3992 .I "\s-1VAX\s0 Options"
3993 .IX Subsection "VAX Options"
3994 .PP
3995 These \fB\-m\fR options are defined for the Vax:
3996 .Ip "\fB\-munix\fR" 4
3997 .IX Item "-munix"
3998 Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
3999 that the Unix assembler for the Vax cannot handle across long
4000 ranges.
4001 .Ip "\fB\-mgnu\fR" 4
4002 .IX Item "-mgnu"
4003 Do output those jump instructions, on the assumption that you
4004 will assemble with the \s-1GNU\s0 assembler.
4005 .Ip "\fB\-mg\fR" 4
4006 .IX Item "-mg"
4007 Output code for g-format floating point numbers instead of d-format.
4008 .PP
4009 .I "\s-1SPARC\s0 Options"
4010 .IX Subsection "SPARC Options"
4011 .PP
4012 These \fB\-m\fR switches are supported on the \s-1SPARC:\s0
4013 .Ip "\fB\-mno-app-regs\fR" 4
4014 .IX Item "-mno-app-regs"
4015 .PD 0
4016 .Ip "\fB\-mapp-regs\fR" 4
4017 .IX Item "-mapp-regs"
4018 .PD
4019 Specify \fB\-mapp-regs\fR to generate output using the global registers
4020 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications.  This
4021 is the default.
4022 .Sp
4023 To be fully \s-1SVR4\s0 \s-1ABI\s0 compliant at the cost of some performance loss,
4024 specify \fB\-mno-app-regs\fR.  You should compile libraries and system
4025 software with this option.
4026 .Ip "\fB\-mfpu\fR" 4
4027 .IX Item "-mfpu"
4028 .PD 0
4029 .Ip "\fB\-mhard-float\fR" 4
4030 .IX Item "-mhard-float"
4031 .PD
4032 Generate output containing floating point instructions.  This is the
4033 default.
4034 .Ip "\fB\-mno-fpu\fR" 4
4035 .IX Item "-mno-fpu"
4036 .PD 0
4037 .Ip "\fB\-msoft-float\fR" 4
4038 .IX Item "-msoft-float"
4039 .PD
4040 Generate output containing library calls for floating point.
4041 \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
4042 targets.  Normally the facilities of the machine's usual C compiler are
4043 used, but this cannot be done directly in cross-compilation.  You must make
4044 your own arrangements to provide suitable library functions for
4045 cross-compilation.  The embedded targets \fBsparc-*\-aout\fR and
4046 \&\fBsparclite-*\-*\fR do provide software floating point support.
4047 .Sp
4048 \&\fB\-msoft-float\fR changes the calling convention in the output file;
4049 therefore, it is only useful if you compile \fIall\fR of a program with
4050 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
4051 library that comes with \s-1GCC\s0, with \fB\-msoft-float\fR in order for
4052 this to work.
4053 .Ip "\fB\-mhard-quad-float\fR" 4
4054 .IX Item "-mhard-quad-float"
4055 Generate output containing quad-word (long double) floating point
4056 instructions.
4057 .Ip "\fB\-msoft-quad-float\fR" 4
4058 .IX Item "-msoft-quad-float"
4059 Generate output containing library calls for quad-word (long double)
4060 floating point instructions.  The functions called are those specified
4061 in the \s-1SPARC\s0 \s-1ABI\s0.  This is the default.
4062 .Sp
4063 As of this writing, there are no sparc implementations that have hardware
4064 support for the quad-word floating point instructions.  They all invoke
4065 a trap handler for one of these instructions, and then the trap handler
4066 emulates the effect of the instruction.  Because of the trap handler overhead,
4067 this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
4068 \&\fB\-msoft-quad-float\fR option is the default.
4069 .Ip "\fB\-mno-epilogue\fR" 4
4070 .IX Item "-mno-epilogue"
4071 .PD 0
4072 .Ip "\fB\-mepilogue\fR" 4
4073 .IX Item "-mepilogue"
4074 .PD
4075 With \fB\-mepilogue\fR (the default), the compiler always emits code for
4076 function exit at the end of each function.  Any function exit in
4077 the middle of the function (such as a return statement in C) will
4078 generate a jump to the exit code at the end of the function.
4079 .Sp
4080 With \fB\-mno-epilogue\fR, the compiler tries to emit exit code inline
4081 at every function exit.
4082 .Ip "\fB\-mno-flat\fR" 4
4083 .IX Item "-mno-flat"
4084 .PD 0
4085 .Ip "\fB\-mflat\fR" 4
4086 .IX Item "-mflat"
4087 .PD
4088 With \fB\-mflat\fR, the compiler does not generate save/restore instructions
4089 and will use a \*(L"flat\*(R" or single register window calling convention.
4090 This model uses \f(CW%i7\fR as the frame pointer and is compatible with the normal
4091 register window model.  Code from either may be intermixed.
4092 The local registers and the input registers (0\-5) are still treated as
4093 \&\*(L"call saved\*(R" registers and will be saved on the stack as necessary.
4094 .Sp
4095 With \fB\-mno-flat\fR (the default), the compiler emits save/restore
4096 instructions (except for leaf functions) and is the normal mode of operation.
4097 .Ip "\fB\-mno-unaligned-doubles\fR" 4
4098 .IX Item "-mno-unaligned-doubles"
4099 .PD 0
4100 .Ip "\fB\-munaligned-doubles\fR" 4
4101 .IX Item "-munaligned-doubles"
4102 .PD
4103 Assume that doubles have 8 byte alignment.  This is the default.
4104 .Sp
4105 With \fB\-munaligned-doubles\fR, \s-1GCC\s0 assumes that doubles have 8 byte
4106 alignment only if they are contained in another type, or if they have an
4107 absolute address.  Otherwise, it assumes they have 4 byte alignment.
4108 Specifying this option avoids some rare compatibility problems with code
4109 generated by other compilers.  It is not the default because it results
4110 in a performance loss, especially for floating point code.
4111 .Ip "\fB\-mno-faster-structs\fR" 4
4112 .IX Item "-mno-faster-structs"
4113 .PD 0
4114 .Ip "\fB\-mfaster-structs\fR" 4
4115 .IX Item "-mfaster-structs"
4116 .PD
4117 With \fB\-mfaster-structs\fR, the compiler assumes that structures
4118 should have 8 byte alignment.  This enables the use of pairs of
4119 \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
4120 assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
4121 However, the use of this changed alignment directly violates the Sparc
4122 \&\s-1ABI\s0.  Thus, it's intended only for use on targets where the developer
4123 acknowledges that their resulting code will not be directly in line with
4124 the rules of the \s-1ABI\s0.
4125 .Ip "\fB\-mv8\fR" 4
4126 .IX Item "-mv8"
4127 .PD 0
4128 .Ip "\fB\-msparclite\fR" 4
4129 .IX Item "-msparclite"
4130 .PD
4131 These two options select variations on the \s-1SPARC\s0 architecture.
4132 .Sp
4133 By default (unless specifically configured for the Fujitsu SPARClite),
4134 \&\s-1GCC\s0 generates code for the v7 variant of the \s-1SPARC\s0 architecture.
4135 .Sp
4136 \&\fB\-mv8\fR will give you \s-1SPARC\s0 v8 code.  The only difference from v7
4137 code is that the compiler emits the integer multiply and integer
4138 divide instructions which exist in \s-1SPARC\s0 v8 but not in \s-1SPARC\s0 v7.
4139 .Sp
4140 \&\fB\-msparclite\fR will give you SPARClite code.  This adds the integer
4141 multiply, integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which
4142 exist in SPARClite but not in \s-1SPARC\s0 v7.
4143 .Sp
4144 These options are deprecated and will be deleted in a future \s-1GCC\s0 release.
4145 They have been replaced with \fB\-mcpu=xxx\fR.
4146 .Ip "\fB\-mcypress\fR" 4
4147 .IX Item "-mcypress"
4148 .PD 0
4149 .Ip "\fB\-msupersparc\fR" 4
4150 .IX Item "-msupersparc"
4151 .PD
4152 These two options select the processor for which the code is optimised.
4153 .Sp
4154 With \fB\-mcypress\fR (the default), the compiler optimizes code for the
4155 Cypress \s-1CY7C602\s0 chip, as used in the SparcStation/SparcServer 3xx series.
4156 This is also appropriate for the older SparcStation 1, 2, \s-1IPX\s0 etc.
4157 .Sp
4158 With \fB\-msupersparc\fR the compiler optimizes code for the SuperSparc cpu, as
4159 used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
4160 of the full \s-1SPARC\s0 v8 instruction set.
4161 .Sp
4162 These options are deprecated and will be deleted in a future \s-1GCC\s0 release.
4163 They have been replaced with \fB\-mcpu=xxx\fR.
4164 .Ip "\fB\-mcpu=\fR\fIcpu_type\fR" 4
4165 .IX Item "-mcpu=cpu_type"
4166 Set the instruction set, register set, and instruction scheduling parameters
4167 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
4168 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBsparclite\fR,
4169 \&\fBhypersparc\fR, \fBsparclite86x\fR, \fBf930\fR, \fBf934\fR,
4170 \&\fBsparclet\fR, \fBtsc701\fR, \fBv9\fR, and \fBultrasparc\fR.
4171 .Sp
4172 Default instruction scheduling parameters are used for values that select
4173 an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
4174 \&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
4175 .Sp
4176 Here is a list of each supported architecture and their supported
4177 implementations.
4178 .Sp
4179 .Vb 5
4180 \&            v7:             cypress
4181 \&            v8:             supersparc, hypersparc
4182 \&            sparclite:      f930, f934, sparclite86x
4183 \&            sparclet:       tsc701
4184 \&            v9:             ultrasparc
4185 .Ve
4186 .Ip "\fB\-mtune=\fR\fIcpu_type\fR" 4
4187 .IX Item "-mtune=cpu_type"
4188 Set the instruction scheduling parameters for machine type
4189 \&\fIcpu_type\fR, but do not set the instruction set or register set that the
4190 option \fB\-mcpu=\fR\fIcpu_type\fR would.
4191 .Sp
4192 The same values for \fB\-mcpu=\fR\fIcpu_type\fR are used for
4193 \&\fB\-mtune=\fR\fIcpu_type\fR, though the only useful values are those that
4194 select a particular cpu implementation: \fBcypress\fR, \fBsupersparc\fR,
4195 \&\fBhypersparc\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR,
4196 \&\fBtsc701\fR, \fBultrasparc\fR.
4197 .PP
4198 These \fB\-m\fR switches are supported in addition to the above
4199 on the \s-1SPARCLET\s0 processor.
4200 .Ip "\fB\-mlittle-endian\fR" 4
4201 .IX Item "-mlittle-endian"
4202 Generate code for a processor running in little-endian mode.
4203 .Ip "\fB\-mlive-g0\fR" 4
4204 .IX Item "-mlive-g0"
4205 Treat register \f(CW\*(C`%g0\*(C'\fR as a normal register.
4206 \&\s-1GCC\s0 will continue to clobber it as necessary but will not assume
4207 it always reads as 0.
4208 .Ip "\fB\-mbroken-saverestore\fR" 4
4209 .IX Item "-mbroken-saverestore"
4210 Generate code that does not use non-trivial forms of the \f(CW\*(C`save\*(C'\fR and
4211 \&\f(CW\*(C`restore\*(C'\fR instructions.  Early versions of the \s-1SPARCLET\s0 processor do
4212 not correctly handle \f(CW\*(C`save\*(C'\fR and \f(CW\*(C`restore\*(C'\fR instructions used with
4213 arguments.  They correctly handle them used without arguments.  A \f(CW\*(C`save\*(C'\fR
4214 instruction used without arguments increments the current window pointer
4215 but does not allocate a new stack frame.  It is assumed that the window
4216 overflow trap handler will properly handle this case as will interrupt
4217 handlers.
4218 .PP
4219 These \fB\-m\fR switches are supported in addition to the above
4220 on \s-1SPARC\s0 V9 processors in 64 bit environments.
4221 .Ip "\fB\-mlittle-endian\fR" 4
4222 .IX Item "-mlittle-endian"
4223 Generate code for a processor running in little-endian mode.
4224 .Ip "\fB\-m32\fR" 4
4225 .IX Item "-m32"
4226 .PD 0
4227 .Ip "\fB\-m64\fR" 4
4228 .IX Item "-m64"
4229 .PD
4230 Generate code for a 32 bit or 64 bit environment.
4231 The 32 bit environment sets int, long and pointer to 32 bits.
4232 The 64 bit environment sets int to 32 bits and long and pointer
4233 to 64 bits.
4234 .Ip "\fB\-mcmodel=medlow\fR" 4
4235 .IX Item "-mcmodel=medlow"
4236 Generate code for the Medium/Low code model: the program must be linked
4237 in the low 32 bits of the address space.  Pointers are 64 bits.
4238 Programs can be statically or dynamically linked.
4239 .Ip "\fB\-mcmodel=medmid\fR" 4
4240 .IX Item "-mcmodel=medmid"
4241 Generate code for the Medium/Middle code model: the program must be linked
4242 in the low 44 bits of the address space, the text segment must be less than
4243 2G bytes, and data segment must be within 2G of the text segment.
4244 Pointers are 64 bits.
4245 .Ip "\fB\-mcmodel=medany\fR" 4
4246 .IX Item "-mcmodel=medany"
4247 Generate code for the Medium/Anywhere code model: the program may be linked
4248 anywhere in the address space, the text segment must be less than
4249 2G bytes, and data segment must be within 2G of the text segment.
4250 Pointers are 64 bits.
4251 .Ip "\fB\-mcmodel=embmedany\fR" 4
4252 .IX Item "-mcmodel=embmedany"
4253 Generate code for the Medium/Anywhere code model for embedded systems:
4254 assume a 32 bit text and a 32 bit data segment, both starting anywhere
4255 (determined at link time).  Register \f(CW%g4\fR points to the base of the
4256 data segment.  Pointers still 64 bits.
4257 Programs are statically linked, \s-1PIC\s0 is not supported.
4258 .Ip "\fB\-mstack-bias\fR" 4
4259 .IX Item "-mstack-bias"
4260 .PD 0
4261 .Ip "\fB\-mno-stack-bias\fR" 4
4262 .IX Item "-mno-stack-bias"
4263 .PD
4264 With \fB\-mstack-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
4265 frame pointer if present, are offset by \-2047 which must be added back
4266 when making stack frame references.
4267 Otherwise, assume no such offset is present.
4268 .PP
4269 .I "Convex Options"
4270 .IX Subsection "Convex Options"
4271 .PP
4272 These \fB\-m\fR options are defined for Convex:
4273 .Ip "\fB\-mc1\fR" 4
4274 .IX Item "-mc1"
4275 Generate output for C1.  The code will run on any Convex machine.
4276 The preprocessor symbol \f(CW\*(C`_\|_convex_\|_c1_\|_\*(C'\fR is defined.
4277 .Ip "\fB\-mc2\fR" 4
4278 .IX Item "-mc2"
4279 Generate output for C2.  Uses instructions not available on C1.
4280 Scheduling and other optimizations are chosen for max performance on C2.
4281 The preprocessor symbol \f(CW\*(C`_\|_convex_c2_\|_\*(C'\fR is defined.
4282 .Ip "\fB\-mc32\fR" 4
4283 .IX Item "-mc32"
4284 Generate output for C32xx.  Uses instructions not available on C1.
4285 Scheduling and other optimizations are chosen for max performance on C32.
4286 The preprocessor symbol \f(CW\*(C`_\|_convex_c32_\|_\*(C'\fR is defined.
4287 .Ip "\fB\-mc34\fR" 4
4288 .IX Item "-mc34"
4289 Generate output for C34xx.  Uses instructions not available on C1.
4290 Scheduling and other optimizations are chosen for max performance on C34.
4291 The preprocessor symbol \f(CW\*(C`_\|_convex_c34_\|_\*(C'\fR is defined.
4292 .Ip "\fB\-mc38\fR" 4
4293 .IX Item "-mc38"
4294 Generate output for C38xx.  Uses instructions not available on C1.
4295 Scheduling and other optimizations are chosen for max performance on C38.
4296 The preprocessor symbol \f(CW\*(C`_\|_convex_c38_\|_\*(C'\fR is defined.
4297 .Ip "\fB\-margcount\fR" 4
4298 .IX Item "-margcount"
4299 Generate code which puts an argument count in the word preceding each
4300 argument list.  This is compatible with regular \s-1CC\s0, and a few programs
4301 may need the argument count word.  \s-1GDB\s0 and other source-level debuggers
4302 do not need it; this info is in the symbol table.
4303 .Ip "\fB\-mnoargcount\fR" 4
4304 .IX Item "-mnoargcount"
4305 Omit the argument count word.  This is the default.
4306 .Ip "\fB\-mvolatile-cache\fR" 4
4307 .IX Item "-mvolatile-cache"
4308 Allow volatile references to be cached.  This is the default.
4309 .Ip "\fB\-mvolatile-nocache\fR" 4
4310 .IX Item "-mvolatile-nocache"
4311 Volatile references bypass the data cache, going all the way to memory.
4312 This is only needed for multi-processor code that does not use standard
4313 synchronization instructions.  Making non-volatile references to volatile
4314 locations will not necessarily work.
4315 .Ip "\fB\-mlong32\fR" 4
4316 .IX Item "-mlong32"
4317 Type long is 32 bits, the same as type int.  This is the default.
4318 .Ip "\fB\-mlong64\fR" 4
4319 .IX Item "-mlong64"
4320 Type long is 64 bits, the same as type long long.  This option is useless,
4321 because no library support exists for it.
4322 .PP
4323 .I "\s-1AMD29K\s0 Options"
4324 .IX Subsection "AMD29K Options"
4325 .PP
4326 These \fB\-m\fR options are defined for the \s-1AMD\s0 Am29000:
4327 .Ip "\fB\-mdw\fR" 4
4328 .IX Item "-mdw"
4329 Generate code that assumes the \f(CW\*(C`DW\*(C'\fR bit is set, i.e., that byte and
4330 halfword operations are directly supported by the hardware.  This is the
4331 default.
4332 .Ip "\fB\-mndw\fR" 4
4333 .IX Item "-mndw"
4334 Generate code that assumes the \f(CW\*(C`DW\*(C'\fR bit is not set.
4335 .Ip "\fB\-mbw\fR" 4
4336 .IX Item "-mbw"
4337 Generate code that assumes the system supports byte and halfword write
4338 operations.  This is the default.
4339 .Ip "\fB\-mnbw\fR" 4
4340 .IX Item "-mnbw"
4341 Generate code that assumes the systems does not support byte and
4342 halfword write operations.  \fB\-mnbw\fR implies \fB\-mndw\fR.
4343 .Ip "\fB\-msmall\fR" 4
4344 .IX Item "-msmall"
4345 Use a small memory model that assumes that all function addresses are
4346 either within a single 256 \s-1KB\s0 segment or at an absolute address of less
4347 than 256k.  This allows the \f(CW\*(C`call\*(C'\fR instruction to be used instead
4348 of a \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`consth\*(C'\fR, \f(CW\*(C`calli\*(C'\fR sequence.
4349 .Ip "\fB\-mnormal\fR" 4
4350 .IX Item "-mnormal"
4351 Use the normal memory model: Generate \f(CW\*(C`call\*(C'\fR instructions only when
4352 calling functions in the same file and \f(CW\*(C`calli\*(C'\fR instructions
4353 otherwise.  This works if each file occupies less than 256 \s-1KB\s0 but allows
4354 the entire executable to be larger than 256 \s-1KB\s0.  This is the default.
4355 .Ip "\fB\-mlarge\fR" 4
4356 .IX Item "-mlarge"
4357 Always use \f(CW\*(C`calli\*(C'\fR instructions.  Specify this option if you expect
4358 a single file to compile into more than 256 \s-1KB\s0 of code.
4359 .Ip "\fB\-m29050\fR" 4
4360 .IX Item "-m29050"
4361 Generate code for the Am29050.
4362 .Ip "\fB\-m29000\fR" 4
4363 .IX Item "-m29000"
4364 Generate code for the Am29000.  This is the default.
4365 .Ip "\fB\-mkernel-registers\fR" 4
4366 .IX Item "-mkernel-registers"
4367 Generate references to registers \f(CW\*(C`gr64\-gr95\*(C'\fR instead of to
4368 registers \f(CW\*(C`gr96\-gr127\*(C'\fR.  This option can be used when compiling
4369 kernel code that wants a set of global registers disjoint from that used
4370 by user-mode code.
4371 .Sp
4372 Note that when this option is used, register names in \fB\-f\fR flags
4373 must use the normal, user-mode, names.
4374 .Ip "\fB\-muser-registers\fR" 4
4375 .IX Item "-muser-registers"
4376 Use the normal set of global registers, \f(CW\*(C`gr96\-gr127\*(C'\fR.  This is the
4377 default.
4378 .Ip "\fB\-mstack-check\fR" 4
4379 .IX Item "-mstack-check"
4380 .PD 0
4381 .Ip "\fB\-mno-stack-check\fR" 4
4382 .IX Item "-mno-stack-check"
4383 .PD
4384 Insert (or do not insert) a call to \f(CW\*(C`_\|_msp_check\*(C'\fR after each stack
4385 adjustment.  This is often used for kernel code.
4386 .Ip "\fB\-mstorem-bug\fR" 4
4387 .IX Item "-mstorem-bug"
4388 .PD 0
4389 .Ip "\fB\-mno-storem-bug\fR" 4
4390 .IX Item "-mno-storem-bug"
4391 .PD
4392 \&\fB\-mstorem-bug\fR handles 29k processors which cannot handle the
4393 separation of a mtsrim insn and a storem instruction (most 29000 chips
4394 to date, but not the 29050).
4395 .Ip "\fB\-mno-reuse-arg-regs\fR" 4
4396 .IX Item "-mno-reuse-arg-regs"
4397 .PD 0
4398 .Ip "\fB\-mreuse-arg-regs\fR" 4
4399 .IX Item "-mreuse-arg-regs"
4400 .PD
4401 \&\fB\-mno-reuse-arg-regs\fR tells the compiler to only use incoming argument
4402 registers for copying out arguments.  This helps detect calling a function
4403 with fewer arguments than it was declared with.
4404 .Ip "\fB\-mno-impure-text\fR" 4
4405 .IX Item "-mno-impure-text"
4406 .PD 0
4407 .Ip "\fB\-mimpure-text\fR" 4
4408 .IX Item "-mimpure-text"
4409 .PD
4410 \&\fB\-mimpure-text\fR, used in addition to \fB\-shared\fR, tells the compiler to
4411 not pass \fB\-assert pure-text\fR to the linker when linking a shared object.
4412 .Ip "\fB\-msoft-float\fR" 4
4413 .IX Item "-msoft-float"
4414 Generate output containing library calls for floating point.
4415 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
4416 Normally the facilities of the machine's usual C compiler are used, but
4417 this can't be done directly in cross-compilation.  You must make your
4418 own arrangements to provide suitable library functions for
4419 cross-compilation.
4420 .Ip "\fB\-mno-multm\fR" 4
4421 .IX Item "-mno-multm"
4422 Do not generate multm or multmu instructions.  This is useful for some embedded
4423 systems which do not have trap handlers for these instructions.
4424 .PP
4425 .I "\s-1ARM\s0 Options"
4426 .IX Subsection "ARM Options"
4427 .PP
4428 These \fB\-m\fR options are defined for Advanced \s-1RISC\s0 Machines (\s-1ARM\s0)
4429 architectures:
4430 .Ip "\fB\-mapcs-frame\fR" 4
4431 .IX Item "-mapcs-frame"
4432 Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
4433 Standard for all functions, even if this is not strictly necessary for
4434 correct execution of the code.  Specifying \fB\-fomit-frame-pointer\fR
4435 with this option will cause the stack frames not to be generated for
4436 leaf functions.  The default is \fB\-mno-apcs-frame\fR.
4437 .Ip "\fB\-mapcs\fR" 4
4438 .IX Item "-mapcs"
4439 This is a synonym for \fB\-mapcs-frame\fR.
4440 .Ip "\fB\-mapcs-26\fR" 4
4441 .IX Item "-mapcs-26"
4442 Generate code for a processor running with a 26\-bit program counter,
4443 and conforming to the function calling standards for the \s-1APCS\s0 26\-bit
4444 option.  This option replaces the \fB\-m2\fR and \fB\-m3\fR options
4445 of previous releases of the compiler.
4446 .Ip "\fB\-mapcs-32\fR" 4
4447 .IX Item "-mapcs-32"
4448 Generate code for a processor running with a 32\-bit program counter,
4449 and conforming to the function calling standards for the \s-1APCS\s0 32\-bit
4450 option.  This option replaces the \fB\-m6\fR option of previous releases
4451 of the compiler.
4452 .Ip "\fB\-mapcs-stack-check\fR" 4
4453 .IX Item "-mapcs-stack-check"
4454 Generate code to check the amount of stack space available upon entry to
4455 every function (that actually uses some stack space).  If there is
4456 insufficient space available then either the function
4457 \&\fB_\|_rt_stkovf_split_small\fR or \fB_\|_rt_stkovf_split_big\fR will be
4458 called, depending upon the amount of stack space required.  The run time
4459 system is required to provide these functions.  The default is
4460 \&\fB\-mno-apcs-stack-check\fR, since this produces smaller code.
4461 .Ip "\fB\-mapcs-float\fR" 4
4462 .IX Item "-mapcs-float"
4463 Pass floating point arguments using the float point registers.  This is
4464 one of the variants of the \s-1APCS\s0.  This option is recommended if the
4465 target hardware has a floating point unit or if a lot of floating point
4466 arithmetic is going to be performed by the code.  The default is
4467 \&\fB\-mno-apcs-float\fR, since integer only code is slightly increased in
4468 size if \fB\-mapcs-float\fR is used.
4469 .Ip "\fB\-mapcs-reentrant\fR" 4
4470 .IX Item "-mapcs-reentrant"
4471 Generate reentrant, position independent code.  This is the equivalent
4472 to specifying the \fB\-fpic\fR option.  The default is
4473 \&\fB\-mno-apcs-reentrant\fR.
4474 .Ip "\fB\-mthumb-interwork\fR" 4
4475 .IX Item "-mthumb-interwork"
4476 Generate code which supports calling between the \s-1ARM\s0 and \s-1THUMB\s0
4477 instruction sets.  Without this option the two instruction sets cannot
4478 be reliably used inside one program.  The default is
4479 \&\fB\-mno-thumb-interwork\fR, since slightly larger code is generated
4480 when \fB\-mthumb-interwork\fR is specified.
4481 .Ip "\fB\-mno-sched-prolog\fR" 4
4482 .IX Item "-mno-sched-prolog"
4483 Prevent the reordering of instructions in the function prolog, or the
4484 merging of those instruction with the instructions in the function's
4485 body.  This means that all functions will start with a recognizable set
4486 of instructions (or in fact one of a choice from a small set of
4487 different function prologues), and this information can be used to
4488 locate the start if functions inside an executable piece of code.  The
4489 default is \fB\-msched-prolog\fR.
4490 .Ip "\fB\-mhard-float\fR" 4
4491 .IX Item "-mhard-float"
4492 Generate output containing floating point instructions.  This is the
4493 default.
4494 .Ip "\fB\-msoft-float\fR" 4
4495 .IX Item "-msoft-float"
4496 Generate output containing library calls for floating point.
4497 \&\fBWarning:\fR the requisite libraries are not available for all \s-1ARM\s0
4498 targets.  Normally the facilities of the machine's usual C compiler are
4499 used, but this cannot be done directly in cross-compilation.  You must make
4500 your own arrangements to provide suitable library functions for
4501 cross-compilation.
4502 .Sp
4503 \&\fB\-msoft-float\fR changes the calling convention in the output file;
4504 therefore, it is only useful if you compile \fIall\fR of a program with
4505 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
4506 library that comes with \s-1GCC\s0, with \fB\-msoft-float\fR in order for
4507 this to work.
4508 .Ip "\fB\-mlittle-endian\fR" 4
4509 .IX Item "-mlittle-endian"
4510 Generate code for a processor running in little-endian mode.  This is
4511 the default for all standard configurations.
4512 .Ip "\fB\-mbig-endian\fR" 4
4513 .IX Item "-mbig-endian"
4514 Generate code for a processor running in big-endian mode; the default is
4515 to compile code for a little-endian processor.
4516 .Ip "\fB\-mwords-little-endian\fR" 4
4517 .IX Item "-mwords-little-endian"
4518 This option only applies when generating code for big-endian processors.
4519 Generate code for a little-endian word order but a big-endian byte
4520 order.  That is, a byte order of the form \fB32107654\fR.  Note: this
4521 option should only be used if you require compatibility with code for
4522 big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
4523 2.8.
4524 .Ip "\fB\-malignment-traps\fR" 4
4525 .IX Item "-malignment-traps"
4526 Generate code that will not trap if the \s-1MMU\s0 has alignment traps enabled.
4527 On \s-1ARM\s0 architectures prior to ARMv4, there were no instructions to
4528 access half-word objects stored in memory.  However, when reading from
4529 memory a feature of the \s-1ARM\s0 architecture allows a word load to be used,
4530 even if the address is unaligned, and the processor core will rotate the
4531 data as it is being loaded.  This option tells the compiler that such
4532 misaligned accesses will cause a \s-1MMU\s0 trap and that it should instead
4533 synthesise the access as a series of byte accesses.  The compiler can
4534 still use word accesses to load half-word data if it knows that the
4535 address is aligned to a word boundary.
4536 .Sp
4537 This option is ignored when compiling for \s-1ARM\s0 architecture 4 or later,
4538 since these processors have instructions to directly access half-word
4539 objects in memory. 
4540 .Ip "\fB\-mno-alignment-traps\fR" 4
4541 .IX Item "-mno-alignment-traps"
4542 Generate code that assumes that the \s-1MMU\s0 will not trap unaligned
4543 accesses.  This produces better code when the target instruction set
4544 does not have half-word memory operations (implementations prior to
4545 ARMv4). 
4546 .Sp
4547 Note that you cannot use this option to access unaligned word objects,
4548 since the processor will only fetch one 32\-bit aligned object from
4549 memory. 
4550 .Sp
4551 The default setting for most targets is \-mno-alignment-traps, since
4552 this produces better code when there are no half-word memory
4553 instructions available. 
4554 .Ip "\fB\-mshort-load-bytes\fR" 4
4555 .IX Item "-mshort-load-bytes"
4556 This is a deprecated alias for \fB\-malignment-traps\fR.
4557 .Ip "\fB\-mno-short-load-bytes\fR" 4
4558 .IX Item "-mno-short-load-bytes"
4559 This is a deprecated alias for \fB\-mno-alignment-traps\fR.
4560 .Ip "\fB\-mshort-load-words\fR" 4
4561 .IX Item "-mshort-load-words"
4562 This is a deprecated alias for \fB\-mno-alignment-traps\fR.
4563 .Ip "\fB\-mno-short-load-words\fR" 4
4564 .IX Item "-mno-short-load-words"
4565 This is a deprecated alias for \fB\-malignment-traps\fR.
4566 .Ip "\fB\-mbsd\fR" 4
4567 .IX Item "-mbsd"
4568 This option only applies to \s-1RISC\s0 iX.  Emulate the native BSD-mode
4569 compiler.  This is the default if \fB\-ansi\fR is not specified.
4570 .Ip "\fB\-mxopen\fR" 4
4571 .IX Item "-mxopen"
4572 This option only applies to \s-1RISC\s0 iX.  Emulate the native X/Open-mode
4573 compiler.
4574 .Ip "\fB\-mno-symrename\fR" 4
4575 .IX Item "-mno-symrename"
4576 This option only applies to \s-1RISC\s0 iX.  Do not run the assembler
4577 post-processor, \fBsymrename\fR, after code has been assembled.
4578 Normally it is necessary to modify some of the standard symbols in
4579 preparation for linking with the \s-1RISC\s0 iX C library; this option
4580 suppresses this pass.  The post-processor is never run when the
4581 compiler is built for cross-compilation.
4582 .Ip "\fB\-mcpu=<name>\fR" 4
4583 .IX Item "-mcpu=<name>"
4584 This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
4585 to determine what kind of instructions it can use when generating
4586 assembly code.  Permissible names are: arm2, arm250, arm3, arm6, arm60,
4587 arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi,
4588 arm70, arm700, arm700i, arm710, arm710c, arm7100, arm7500, arm7500fe,
4589 arm7tdmi, arm8, strongarm, strongarm110, strongarm1100, arm8, arm810,
4590 arm9, arm920, arm920t, arm9tdmi.
4591 .Ip "\fB\-mtune=<name>\fR" 4
4592 .IX Item "-mtune=<name>"
4593 This option is very similar to the \fB\-mcpu=\fR option, except that
4594 instead of specifying the actual target processor type, and hence
4595 restricting which instructions can be used, it specifies that \s-1GCC\s0 should
4596 tune the performance of the code as if the target were of the type
4597 specified in this option, but still choosing the instructions that it
4598 will generate based on the cpu specified by a \fB\-mcpu=\fR option.
4599 For some arm implementations better performance can be obtained by using
4600 this option.
4601 .Ip "\fB\-march=<name>\fR" 4
4602 .IX Item "-march=<name>"
4603 This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
4604 name to determine what kind of instructions it can use when generating
4605 assembly code.  This option can be used in conjunction with or instead
4606 of the \fB\-mcpu=\fR option.  Permissible names are: armv2, armv2a,
4607 armv3, armv3m, armv4, armv4t, armv5.
4608 .Ip "\fB\-mfpe=<number>\fR" 4
4609 .IX Item "-mfpe=<number>"
4610 .PD 0
4611 .Ip "\fB\-mfp=<number>\fR" 4
4612 .IX Item "-mfp=<number>"
4613 .PD
4614 This specifies the version of the floating point emulation available on
4615 the target.  Permissible values are 2 and 3.  \fB\-mfp=\fR is a synonym
4616 for \fB\-mfpe=\fR to support older versions of \s-1GCC\s0.
4617 .Ip "\fB\-mstructure-size-boundary=<n>\fR" 4
4618 .IX Item "-mstructure-size-boundary=<n>"
4619 The size of all structures and unions will be rounded up to a multiple
4620 of the number of bits set by this option.  Permissible values are 8 and
4621 32.  The default value varies for different toolchains.  For the \s-1COFF\s0
4622 targeted toolchain the default value is 8.  Specifying the larger number
4623 can produce faster, more efficient code, but can also increase the size
4624 of the program.  The two values are potentially incompatible.  Code
4625 compiled with one value cannot necessarily expect to work with code or
4626 libraries compiled with the other value, if they exchange information
4627 using structures or unions.  Programmers are encouraged to use the 32
4628 value as future versions of the toolchain may default to this value.
4629 .Ip "\fB\-mabort-on-noreturn\fR" 4
4630 .IX Item "-mabort-on-noreturn"
4631 Generate a call to the function abort at the end of a noreturn function.
4632 It will be executed if the function tries to return.
4633 .Ip "\fB\-mlong-calls\fR" 4
4634 .IX Item "-mlong-calls"
4635 .PD 0
4636 .Ip "\fB\-mno-long-calls\fR" 4
4637 .IX Item "-mno-long-calls"
4638 .PD
4639 Tells the compiler to perform function calls by first loading the
4640 address of the function into a register and then performing a subroutine
4641 call on this register.  This switch is needed if the target function
4642 will lie outside of the 64 megabyte addressing range of the offset based
4643 version of subroutine call instruction. 
4644 .Sp
4645 Even if this switch is enabled, not all function calls will be turned
4646 into long calls.  The heuristic is that static functions, functions
4647 which have the \fBshort-call\fR attribute, functions that are inside
4648 the scope of a \fB#pragma no_long_calls\fR directive and functions whose
4649 definitions have already been compiled within the current compilation
4650 unit, will not be turned into long calls.  The exception to this rule is
4651 that weak function definitions, functions with the \fBlong-call\fR
4652 attribute or the \fBsection\fR attribute, and functions that are within
4653 the scope of a \fB#pragma long_calls\fR directive, will always be
4654 turned into long calls.
4655 .Sp
4656 This feature is not enabled by default.  Specifying
4657 \&\fB\*(--no-long-calls\fR will restore the default behaviour, as will
4658 placing the function calls within the scope of a \fB#pragma
4659 long_calls_off\fR directive.  Note these switches have no effect on how
4660 the compiler generates code to handle function calls via function
4661 pointers.  
4662 .Ip "\fB\-mnop-fun-dllimport\fR" 4
4663 .IX Item "-mnop-fun-dllimport"
4664 Disable the support for the \fIdllimport\fR attribute.
4665 .Ip "\fB\-msingle-pic-base\fR" 4
4666 .IX Item "-msingle-pic-base"
4667 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
4668 loading it in the prologue for each function.  The run-time system is
4669 responsible for initialising this register with an appropriate value
4670 before execution begins.
4671 .Ip "\fB\-mpic-register=<reg>\fR" 4
4672 .IX Item "-mpic-register=<reg>"
4673 Specify the register to be used for \s-1PIC\s0 addressing.  The default is R10
4674 unless stack-checking is enabled, when R9 is used.
4675 .PP
4676 .I "Thumb Options"
4677 .IX Subsection "Thumb Options"
4678 .Ip "\fB\-mthumb-interwork\fR" 4
4679 .IX Item "-mthumb-interwork"
4680 Generate code which supports calling between the \s-1THUMB\s0 and \s-1ARM\s0
4681 instruction sets.  Without this option the two instruction sets cannot
4682 be reliably used inside one program.  The default is
4683 \&\fB\-mno-thumb-interwork\fR, since slightly smaller code is generated
4684 with this option.
4685 .Ip "\fB\-mtpcs-frame\fR" 4
4686 .IX Item "-mtpcs-frame"
4687 Generate a stack frame that is compliant with the Thumb Procedure Call
4688 Standard for all non-leaf functions.  (A leaf function is one that does
4689 not call any other functions).  The default is \fB\-mno-apcs-frame\fR. 
4690 .Ip "\fB\-mtpcs-leaf-frame\fR" 4
4691 .IX Item "-mtpcs-leaf-frame"
4692 Generate a stack frame that is compliant with the Thumb Procedure Call
4693 Standard for all leaf functions.  (A leaf function is one that does
4694 not call any other functions).  The default is \fB\-mno-apcs-leaf-frame\fR. 
4695 .Ip "\fB\-mlittle-endian\fR" 4
4696 .IX Item "-mlittle-endian"
4697 Generate code for a processor running in little-endian mode.  This is
4698 the default for all standard configurations.
4699 .Ip "\fB\-mbig-endian\fR" 4
4700 .IX Item "-mbig-endian"
4701 Generate code for a processor running in big-endian mode.
4702 .Ip "\fB\-mstructure-size-boundary=<n>\fR" 4
4703 .IX Item "-mstructure-size-boundary=<n>"
4704 The size of all structures and unions will be rounded up to a multiple
4705 of the number of bits set by this option.  Permissible values are 8 and
4706 32.  The default value varies for different toolchains.  For the \s-1COFF\s0
4707 targeted toolchain the default value is 8.  Specifying the larger number
4708 can produced faster, more efficient code, but can also increase the size
4709 of the program.  The two values are potentially incompatible.  Code
4710 compiled with one value cannot necessarily expect to work with code or
4711 libraries compiled with the other value, if they exchange information
4712 using structures or unions.  Programmers are encouraged to use the 32
4713 value as future versions of the toolchain may default to this value.
4714 .Ip "\fB\-mnop-fun-dllimport\fR" 4
4715 .IX Item "-mnop-fun-dllimport"
4716 Disable the support for the \fIdllimport\fR attribute.
4717 .Ip "\fB\-mcallee-super-interworking\fR" 4
4718 .IX Item "-mcallee-super-interworking"
4719 Gives all externally visible functions in the file being compiled an \s-1ARM\s0
4720 instruction set header which switches to Thumb mode before executing the
4721 rest of the function.  This allows these functions to be called from
4722 non-interworking code.
4723 .Ip "\fB\-mcaller-super-interworking\fR" 4
4724 .IX Item "-mcaller-super-interworking"
4725 Allows calls via function pointers (including virtual functions) to
4726 execute correctly regardless of whether the target code has been
4727 compiled for interworking or not.  There is a small overhead in the cost
4728 of executing a function pointer if this option is enabled.
4729 .Ip "\fB\-msingle-pic-base\fR" 4
4730 .IX Item "-msingle-pic-base"
4731 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
4732 loading it in the prologue for each function.  The run-time system is
4733 responsible for initialising this register with an appropriate value
4734 before execution begins.
4735 .Ip "\fB\-mpic-register=<reg>\fR" 4
4736 .IX Item "-mpic-register=<reg>"
4737 Specify the register to be used for \s-1PIC\s0 addressing.  The default is R10.
4738 .PP
4739 .I "\s-1MN10200\s0 Options"
4740 .IX Subsection "MN10200 Options"
4741 .PP
4742 These \fB\-m\fR options are defined for Matsushita \s-1MN10200\s0 architectures:
4743 .Ip "\fB\-mrelax\fR" 4
4744 .IX Item "-mrelax"
4745 Indicate to the linker that it should perform a relaxation optimization pass
4746 to shorten branches, calls and absolute memory addresses.  This option only
4747 has an effect when used on the command line for the final link step.
4748 .Sp
4749 This option makes symbolic debugging impossible. 
4750 .PP
4751 .I "\s-1MN10300\s0 Options"
4752 .IX Subsection "MN10300 Options"
4753 .PP
4754 These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
4755 .Ip "\fB\-mmult-bug\fR" 4
4756 .IX Item "-mmult-bug"
4757 Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
4758 processors.  This is the default.
4759 .Ip "\fB\-mno-mult-bug\fR" 4
4760 .IX Item "-mno-mult-bug"
4761 Do not generate code to avoid bugs in the multiply instructions for the
4762 \&\s-1MN10300\s0 processors.
4763 .Ip "\fB\-mam33\fR" 4
4764 .IX Item "-mam33"
4765 Generate code which uses features specific to the \s-1AM33\s0 processor.
4766 .Ip "\fB\-mno-am33\fR" 4
4767 .IX Item "-mno-am33"
4768 Do not generate code which uses features specific to the \s-1AM33\s0 processor.  This
4769 is the default.
4770 .Ip "\fB\-mrelax\fR" 4
4771 .IX Item "-mrelax"
4772 Indicate to the linker that it should perform a relaxation optimization pass
4773 to shorten branches, calls and absolute memory addresses.  This option only
4774 has an effect when used on the command line for the final link step.
4775 .Sp
4776 This option makes symbolic debugging impossible. 
4777 .PP
4778 .I "M32R/D Options"
4779 .IX Subsection "M32R/D Options"
4780 .PP
4781 These \fB\-m\fR options are defined for Mitsubishi M32R/D architectures:
4782 .Ip "\fB\-mcode-model=small\fR" 4
4783 .IX Item "-mcode-model=small"
4784 Assume all objects live in the lower 16MB of memory (so that their addresses
4785 can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
4786 are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
4787 This is the default.
4788 .Sp
4789 The addressability of a particular object can be set with the
4790 \&\f(CW\*(C`model\*(C'\fR attribute.
4791 .Ip "\fB\-mcode-model=medium\fR" 4
4792 .IX Item "-mcode-model=medium"
4793 Assume objects may be anywhere in the 32 bit address space (the compiler
4794 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
4795 assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
4796 .Ip "\fB\-mcode-model=large\fR" 4
4797 .IX Item "-mcode-model=large"
4798 Assume objects may be anywhere in the 32 bit address space (the compiler
4799 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
4800 assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
4801 (the compiler will generate the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
4802 instruction sequence).
4803 .Ip "\fB\-msdata=none\fR" 4
4804 .IX Item "-msdata=none"
4805 Disable use of the small data area.  Variables will be put into
4806 one of \fB.data\fR, \fBbss\fR, or \fB.rodata\fR (unless the
4807 \&\f(CW\*(C`section\*(C'\fR attribute has been specified).
4808 This is the default.
4809 .Sp
4810 The small data area consists of sections \fB.sdata\fR and \fB.sbss\fR.
4811 Objects may be explicitly put in the small data area with the
4812 \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
4813 .Ip "\fB\-msdata=sdata\fR" 4
4814 .IX Item "-msdata=sdata"
4815 Put small global and static data in the small data area, but do not
4816 generate special code to reference them.
4817 .Ip "\fB\-msdata=use\fR" 4
4818 .IX Item "-msdata=use"
4819 Put small global and static data in the small data area, and generate
4820 special instructions to reference them.
4821 .Ip "\fB\-G\fR \fInum\fR" 4
4822 .IX Item "-G num"
4823 Put global and static objects less than or equal to \fInum\fR bytes
4824 into the small data or bss sections instead of the normal data or bss
4825 sections.  The default value of \fInum\fR is 8.
4826 The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
4827 for this option to have any effect.
4828 .Sp
4829 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
4830 Compiling with different values of \fInum\fR may or may not work; if it
4831 doesn't the linker will give an error message \- incorrect code will not be
4832 generated.
4833 .PP
4834 .I "M88K Options"
4835 .IX Subsection "M88K Options"
4836 .PP
4837 These \fB\-m\fR options are defined for Motorola 88k architectures:
4838 .Ip "\fB\-m88000\fR" 4
4839 .IX Item "-m88000"
4840 Generate code that works well on both the m88100 and the
4841 m88110.
4842 .Ip "\fB\-m88100\fR" 4
4843 .IX Item "-m88100"
4844 Generate code that works best for the m88100, but that also
4845 runs on the m88110.
4846 .Ip "\fB\-m88110\fR" 4
4847 .IX Item "-m88110"
4848 Generate code that works best for the m88110, and may not run
4849 on the m88100.
4850 .Ip "\fB\-mbig-pic\fR" 4
4851 .IX Item "-mbig-pic"
4852 Obsolete option to be removed from the next revision.
4853 Use \fB\-fPIC\fR.
4854 .Ip "\fB\-midentify-revision\fR" 4
4855 .IX Item "-midentify-revision"
4856 Include an \f(CW\*(C`ident\*(C'\fR directive in the assembler output recording the
4857 source file name, compiler name and version, timestamp, and compilation
4858 flags used.
4859 .Ip "\fB\-mno-underscores\fR" 4
4860 .IX Item "-mno-underscores"
4861 In assembler output, emit symbol names without adding an underscore
4862 character at the beginning of each name.  The default is to use an
4863 underscore as prefix on each name.
4864 .Ip "\fB\-mocs-debug-info\fR" 4
4865 .IX Item "-mocs-debug-info"
4866 .PD 0
4867 .Ip "\fB\-mno-ocs-debug-info\fR" 4
4868 .IX Item "-mno-ocs-debug-info"
4869 .PD
4870 Include (or omit) additional debugging information (about registers used
4871 in each stack frame) as specified in the 88open Object Compatibility
4872 Standard, ``\s-1OCS\s0''.  This extra information allows debugging of code that
4873 has had the frame pointer eliminated.  The default for \s-1DG/UX\s0, SVr4, and
4874 Delta 88 SVr3.2 is to include this information; other 88k configurations
4875 omit this information by default.
4876 .Ip "\fB\-mocs-frame-position\fR" 4
4877 .IX Item "-mocs-frame-position"
4878 When emitting \s-1COFF\s0 debugging information for automatic variables and
4879 parameters stored on the stack, use the offset from the canonical frame
4880 address, which is the stack pointer (register 31) on entry to the
4881 function.  The \s-1DG/UX\s0, SVr4, Delta88 SVr3.2, and \s-1BCS\s0 configurations use
4882 \&\fB\-mocs-frame-position\fR; other 88k configurations have the default
4883 \&\fB\-mno-ocs-frame-position\fR.
4884 .Ip "\fB\-mno-ocs-frame-position\fR" 4
4885 .IX Item "-mno-ocs-frame-position"
4886 When emitting \s-1COFF\s0 debugging information for automatic variables and
4887 parameters stored on the stack, use the offset from the frame pointer
4888 register (register 30).  When this option is in effect, the frame
4889 pointer is not eliminated when debugging information is selected by the
4890 \&\-g switch.
4891 .Ip "\fB\-moptimize-arg-area\fR" 4
4892 .IX Item "-moptimize-arg-area"
4893 .PD 0
4894 .Ip "\fB\-mno-optimize-arg-area\fR" 4
4895 .IX Item "-mno-optimize-arg-area"
4896 .PD
4897 Control how function arguments are stored in stack frames.
4898 \&\fB\-moptimize-arg-area\fR saves space by optimizing them, but this
4899 conflicts with the 88open specifications.  The opposite alternative,
4900 \&\fB\-mno-optimize-arg-area\fR, agrees with 88open standards.  By default
4901 \&\s-1GCC\s0 does not optimize the argument area.
4902 .Ip "\fB\-mshort-data-\fR\fInum\fR" 4
4903 .IX Item "-mshort-data-num"
4904 Generate smaller data references by making them relative to \f(CW\*(C`r0\*(C'\fR,
4905 which allows loading a value using a single instruction (rather than the
4906 usual two).  You control which data references are affected by
4907 specifying \fInum\fR with this option.  For example, if you specify
4908 \&\fB\-mshort-data-512\fR, then the data references affected are those
4909 involving displacements of less than 512 bytes.
4910 \&\fB\-mshort-data-\fR\fInum\fR is not effective for \fInum\fR greater
4911 than 64k.
4912 .Ip "\fB\-mserialize-volatile\fR" 4
4913 .IX Item "-mserialize-volatile"
4914 .PD 0
4915 .Ip "\fB\-mno-serialize-volatile\fR" 4
4916 .IX Item "-mno-serialize-volatile"
4917 .PD
4918 Do, or don't, generate code to guarantee sequential consistency
4919 of volatile memory references.  By default, consistency is
4920 guaranteed.
4921 .Sp
4922 The order of memory references made by the \s-1MC88110\s0 processor does
4923 not always match the order of the instructions requesting those
4924 references.  In particular, a load instruction may execute before
4925 a preceding store instruction.  Such reordering violates
4926 sequential consistency of volatile memory references, when there
4927 are multiple processors.   When consistency must be guaranteed,
4928 \&\s-1GNU\s0 C generates special instructions, as needed, to force
4929 execution in the proper order.
4930 .Sp
4931 The \s-1MC88100\s0 processor does not reorder memory references and so
4932 always provides sequential consistency.  However, by default, \s-1GNU\s0
4933 C generates the special instructions to guarantee consistency
4934 even when you use \fB\-m88100\fR, so that the code may be run on an
4935 \&\s-1MC88110\s0 processor.  If you intend to run your code only on the
4936 \&\s-1MC88100\s0 processor, you may use \fB\-mno-serialize-volatile\fR.
4937 .Sp
4938 The extra code generated to guarantee consistency may affect the
4939 performance of your application.  If you know that you can safely
4940 forgo this guarantee, you may use \fB\-mno-serialize-volatile\fR.
4941 .Ip "\fB\-msvr4\fR" 4
4942 .IX Item "-msvr4"
4943 .PD 0
4944 .Ip "\fB\-msvr3\fR" 4
4945 .IX Item "-msvr3"
4946 .PD
4947 Turn on (\fB\-msvr4\fR) or off (\fB\-msvr3\fR) compiler extensions
4948 related to System V release 4 (SVr4).  This controls the following:
4949 .RS 4
4950 .Ip "1." 4
4951 Which variant of the assembler syntax to emit.
4952 .Ip "2." 4
4953 \&\fB\-msvr4\fR makes the C preprocessor recognize \fB#pragma weak\fR
4954 that is used on System V release 4.
4955 .Ip "3." 4
4956 \&\fB\-msvr4\fR makes \s-1GCC\s0 issue additional declaration directives used in
4957 SVr4.
4958 .RE
4959 .RS 4
4960 .Sp
4961 \&\fB\-msvr4\fR is the default for the m88k-motorola-sysv4 and
4962 m88k-dg-dgux m88k configurations. \fB\-msvr3\fR is the default for all
4963 other m88k configurations.
4964 .RE
4965 .Ip "\fB\-mversion-03.00\fR" 4
4966 .IX Item "-mversion-03.00"
4967 This option is obsolete, and is ignored.
4968 .Ip "\fB\-mno-check-zero-division\fR" 4
4969 .IX Item "-mno-check-zero-division"
4970 .PD 0
4971 .Ip "\fB\-mcheck-zero-division\fR" 4
4972 .IX Item "-mcheck-zero-division"
4973 .PD
4974 Do, or don't, generate code to guarantee that integer division by
4975 zero will be detected.  By default, detection is guaranteed.
4976 .Sp
4977 Some models of the \s-1MC88100\s0 processor fail to trap upon integer
4978 division by zero under certain conditions.  By default, when
4979 compiling code that might be run on such a processor, \s-1GNU\s0 C
4980 generates code that explicitly checks for zero-valued divisors
4981 and traps with exception number 503 when one is detected.  Use of
4982 mno-check-zero-division suppresses such checking for code
4983 generated to run on an \s-1MC88100\s0 processor.
4984 .Sp
4985 \&\s-1GNU\s0 C assumes that the \s-1MC88110\s0 processor correctly detects all
4986 instances of integer division by zero.  When \fB\-m88110\fR is
4987 specified, both \fB\-mcheck-zero-division\fR and
4988 \&\fB\-mno-check-zero-division\fR are ignored, and no explicit checks for
4989 zero-valued divisors are generated.
4990 .Ip "\fB\-muse-div-instruction\fR" 4
4991 .IX Item "-muse-div-instruction"
4992 Use the div instruction for signed integer division on the
4993 \&\s-1MC88100\s0 processor.  By default, the div instruction is not used.
4994 .Sp
4995 On the \s-1MC88100\s0 processor the signed integer division instruction
4996 div) traps to the operating system on a negative operand.  The
4997 operating system transparently completes the operation, but at a
4998 large cost in execution time.  By default, when compiling code
4999 that might be run on an \s-1MC88100\s0 processor, \s-1GNU\s0 C emulates signed
5000 integer division using the unsigned integer division instruction
5001 divu), thereby avoiding the large penalty of a trap to the
5002 operating system.  Such emulation has its own, smaller, execution
5003 cost in both time and space.  To the extent that your code's
5004 important signed integer division operations are performed on two
5005 nonnegative operands, it may be desirable to use the div
5006 instruction directly.
5007 .Sp
5008 On the \s-1MC88110\s0 processor the div instruction (also known as the
5009 divs instruction) processes negative operands without trapping to
5010 the operating system.  When \fB\-m88110\fR is specified,
5011 \&\fB\-muse-div-instruction\fR is ignored, and the div instruction is used
5012 for signed integer division.
5013 .Sp
5014 Note that the result of dividing \s-1INT_MIN\s0 by \-1 is undefined.  In
5015 particular, the behavior of such a division with and without
5016 \&\fB\-muse-div-instruction\fR  may differ.
5017 .Ip "\fB\-mtrap-large-shift\fR" 4
5018 .IX Item "-mtrap-large-shift"
5019 .PD 0
5020 .Ip "\fB\-mhandle-large-shift\fR" 4
5021 .IX Item "-mhandle-large-shift"
5022 .PD
5023 Include code to detect bit-shifts of more than 31 bits; respectively,
5024 trap such shifts or emit code to handle them properly.  By default \s-1GCC\s0
5025 makes no special provision for large bit shifts.
5026 .Ip "\fB\-mwarn-passed-structs\fR" 4
5027 .IX Item "-mwarn-passed-structs"
5028 Warn when a function passes a struct as an argument or result.
5029 Structure-passing conventions have changed during the evolution of the C
5030 language, and are often the source of portability problems.  By default,
5031 \&\s-1GCC\s0 issues no such warning.
5032 .PP
5033 .I "\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options"
5034 .IX Subsection "IBM RS/6000 and PowerPC Options"
5035 .PP
5036 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
5037 .Ip "\fB\-mpower\fR" 4
5038 .IX Item "-mpower"
5039 .PD 0
5040 .Ip "\fB\-mno-power\fR" 4
5041 .IX Item "-mno-power"
5042 .Ip "\fB\-mpower2\fR" 4
5043 .IX Item "-mpower2"
5044 .Ip "\fB\-mno-power2\fR" 4
5045 .IX Item "-mno-power2"
5046 .Ip "\fB\-mpowerpc\fR" 4
5047 .IX Item "-mpowerpc"
5048 .Ip "\fB\-mno-powerpc\fR" 4
5049 .IX Item "-mno-powerpc"
5050 .Ip "\fB\-mpowerpc-gpopt\fR" 4
5051 .IX Item "-mpowerpc-gpopt"
5052 .Ip "\fB\-mno-powerpc-gpopt\fR" 4
5053 .IX Item "-mno-powerpc-gpopt"
5054 .Ip "\fB\-mpowerpc-gfxopt\fR" 4
5055 .IX Item "-mpowerpc-gfxopt"
5056 .Ip "\fB\-mno-powerpc-gfxopt\fR" 4
5057 .IX Item "-mno-powerpc-gfxopt"
5058 .Ip "\fB\-mpowerpc64\fR" 4
5059 .IX Item "-mpowerpc64"
5060 .Ip "\fB\-mno-powerpc64\fR" 4
5061 .IX Item "-mno-powerpc64"
5062 .PD
5063 \&\s-1GCC\s0 supports two related instruction set architectures for the
5064 \&\s-1RS/6000\s0 and PowerPC.  The \fI\s-1POWER\s0\fR instruction set are those
5065 instructions supported by the \fBrios\fR chip set used in the original
5066 \&\s-1RS/6000\s0 systems and the \fIPowerPC\fR instruction set is the
5067 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
5068 the \s-1IBM\s0 4xx microprocessors.
5069 .Sp
5070 Neither architecture is a subset of the other.  However there is a
5071 large common subset of instructions supported by both.  An \s-1MQ\s0
5072 register is included in processors supporting the \s-1POWER\s0 architecture.
5073 .Sp
5074 You use these options to specify which instructions are available on the
5075 processor you are using.  The default value of these options is
5076 determined when configuring \s-1GCC\s0.  Specifying the
5077 \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
5078 options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
5079 rather than the options listed above.
5080 .Sp
5081 The \fB\-mpower\fR option allows \s-1GCC\s0 to generate instructions that
5082 are found only in the \s-1POWER\s0 architecture and to use the \s-1MQ\s0 register.
5083 Specifying \fB\-mpower2\fR implies \fB\-power\fR and also allows \s-1GCC\s0
5084 to generate instructions that are present in the \s-1POWER2\s0 architecture but
5085 not the original \s-1POWER\s0 architecture.
5086 .Sp
5087 The \fB\-mpowerpc\fR option allows \s-1GCC\s0 to generate instructions that
5088 are found only in the 32\-bit subset of the PowerPC architecture.
5089 Specifying \fB\-mpowerpc-gpopt\fR implies \fB\-mpowerpc\fR and also allows
5090 \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
5091 General Purpose group, including floating-point square root.  Specifying
5092 \&\fB\-mpowerpc-gfxopt\fR implies \fB\-mpowerpc\fR and also allows \s-1GCC\s0 to
5093 use the optional PowerPC architecture instructions in the Graphics
5094 group, including floating-point select.
5095 .Sp
5096 The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
5097 64\-bit instructions that are found in the full PowerPC64 architecture
5098 and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
5099 \&\fB\-mno-powerpc64\fR.
5100 .Sp
5101 If you specify both \fB\-mno-power\fR and \fB\-mno-powerpc\fR, \s-1GCC\s0
5102 will use only the instructions in the common subset of both
5103 architectures plus some special \s-1AIX\s0 common-mode calls, and will not use
5104 the \s-1MQ\s0 register.  Specifying both \fB\-mpower\fR and \fB\-mpowerpc\fR
5105 permits \s-1GCC\s0 to use any instruction from either architecture and to
5106 allow use of the \s-1MQ\s0 register; specify this for the Motorola \s-1MPC601\s0.
5107 .Ip "\fB\-mnew-mnemonics\fR" 4
5108 .IX Item "-mnew-mnemonics"
5109 .PD 0
5110 .Ip "\fB\-mold-mnemonics\fR" 4
5111 .IX Item "-mold-mnemonics"
5112 .PD
5113 Select which mnemonics to use in the generated assembler code.
5114 \&\fB\-mnew-mnemonics\fR requests output that uses the assembler mnemonics
5115 defined for the PowerPC architecture, while \fB\-mold-mnemonics\fR
5116 requests the assembler mnemonics defined for the \s-1POWER\s0 architecture.
5117 Instructions defined in only one architecture have only one mnemonic;
5118 \&\s-1GCC\s0 uses that mnemonic irrespective of which of these options is
5119 specified.
5120 .Sp
5121 \&\s-1GCC\s0 defaults to the mnemonics appropriate for the architecture in
5122 use.  Specifying \fB\-mcpu=\fR\fIcpu_type\fR sometimes overrides the
5123 value of these option.  Unless you are building a cross-compiler, you
5124 should normally not specify either \fB\-mnew-mnemonics\fR or
5125 \&\fB\-mold-mnemonics\fR, but should instead accept the default.
5126 .Ip "\fB\-mcpu=\fR\fIcpu_type\fR" 4
5127 .IX Item "-mcpu=cpu_type"
5128 Set architecture type, register usage, choice of mnemonics, and
5129 instruction scheduling parameters for machine type \fIcpu_type\fR.
5130 Supported values for \fIcpu_type\fR are \fBrios\fR, \fBrios1\fR,
5131 \&\fBrsc\fR, \fBrios2\fR, \fBrs64a\fR, \fB601\fR, \fB602\fR,
5132 \&\fB603\fR, \fB603e\fR, \fB604\fR, \fB604e\fR, \fB620\fR,
5133 \&\fB630\fR, \fB740\fR, \fB750\fR, \fBpower\fR, \fBpower2\fR,
5134 \&\fBpowerpc\fR, \fB403\fR, \fB505\fR, \fB801\fR, \fB821\fR,
5135 \&\fB823\fR, and \fB860\fR and \fBcommon\fR.  \fB\-mcpu=power\fR,
5136 \&\fB\-mcpu=power2\fR, \fB\-mcpu=powerpc\fR, and \fB\-mcpu=powerpc64\fR
5137 specify generic \s-1POWER\s0, \s-1POWER2\s0, pure 32\-bit PowerPC (i.e., not \s-1MPC601\s0),
5138 and 64\-bit PowerPC architecture machine types, with an appropriate,
5139 generic processor model assumed for scheduling purposes.
5140 .Sp
5141 Specifying any of the following options: 
5142 \&\fB\-mcpu=rios1\fR, \fB\-mcpu=rios2\fR, \fB\-mcpu=rsc\fR,
5143 \&\fB\-mcpu=power\fR, or \fB\-mcpu=power2\fR  
5144 enables the \fB\-mpower\fR option and disables the \fB\-mpowerpc\fR option; 
5145 \&\fB\-mcpu=601\fR enables both the \fB\-mpower\fR and \fB\-mpowerpc\fR options.
5146 All of \fB\-mcpu=rs64a\fR, \fB\-mcpu=602\fR, \fB\-mcpu=603\fR,
5147 \&\fB\-mcpu=603e\fR, \fB\-mcpu=604\fR, \fB\-mcpu=620\fR, \fB\-mcpu=630\fR,
5148 \&\fB\-mcpu=740\fR, and \fB\-mcpu=750\fR
5149 enable the \fB\-mpowerpc\fR option and disable the \fB\-mpower\fR option.  
5150 Exactly similarly, all of \fB\-mcpu=403\fR,
5151 \&\fB\-mcpu=505\fR, \fB\-mcpu=821\fR, \fB\-mcpu=860\fR and \fB\-mcpu=powerpc\fR 
5152 enable the \fB\-mpowerpc\fR option and disable the \fB\-mpower\fR option.
5153 \&\fB\-mcpu=common\fR disables both the 
5154 \&\fB\-mpower\fR and \fB\-mpowerpc\fR options.
5155 .Sp
5156 \&\s-1AIX\s0 versions 4 or greater selects \fB\-mcpu=common\fR by default, so
5157 that code will operate on all members of the \s-1RS/6000\s0 \s-1POWER\s0 and PowerPC
5158 families.  In that case, \s-1GCC\s0 will use only the instructions in the
5159 common subset of both architectures plus some special \s-1AIX\s0 common-mode
5160 calls, and will not use the \s-1MQ\s0 register.  \s-1GCC\s0 assumes a generic
5161 processor model for scheduling purposes.
5162 .Sp
5163 Specifying any of the options \fB\-mcpu=rios1\fR, \fB\-mcpu=rios2\fR,
5164 \&\fB\-mcpu=rsc\fR, \fB\-mcpu=power\fR, or \fB\-mcpu=power2\fR also
5165 disables the \fBnew-mnemonics\fR option.  Specifying \fB\-mcpu=601\fR,
5166 \&\fB\-mcpu=602\fR, \fB\-mcpu=603\fR, \fB\-mcpu=603e\fR, \fB\-mcpu=604\fR,
5167 \&\fB\-mcpu=620\fR, \fB\-mcpu=630\fR, \fB\-mcpu=403\fR, \fB\-mcpu=505\fR,
5168 \&\fB\-mcpu=821\fR, \fB\-mcpu=860\fR or \fB\-mcpu=powerpc\fR also enables
5169 the \fBnew-mnemonics\fR option.
5170 .Sp
5171 Specifying \fB\-mcpu=403\fR, \fB\-mcpu=821\fR, or \fB\-mcpu=860\fR also
5172 enables the \fB\-msoft-float\fR option.
5173 .Ip "\fB\-mtune=\fR\fIcpu_type\fR" 4
5174 .IX Item "-mtune=cpu_type"
5175 Set the instruction scheduling parameters for machine type
5176 \&\fIcpu_type\fR, but do not set the architecture type, register usage,
5177 choice of mnemonics like \fB\-mcpu=\fR\fIcpu_type\fR would.  The same
5178 values for \fIcpu_type\fR are used for \fB\-mtune=\fR\fIcpu_type\fR as
5179 for \fB\-mcpu=\fR\fIcpu_type\fR.  The \fB\-mtune=\fR\fIcpu_type\fR
5180 option overrides the \fB\-mcpu=\fR\fIcpu_type\fR option in terms of
5181 instruction scheduling parameters.
5182 .Ip "\fB\-mfull-toc\fR" 4
5183 .IX Item "-mfull-toc"
5184 .PD 0
5185 .Ip "\fB\-mno-fp-in-toc\fR" 4
5186 .IX Item "-mno-fp-in-toc"
5187 .Ip "\fB\-mno-sum-in-toc\fR" 4
5188 .IX Item "-mno-sum-in-toc"
5189 .Ip "\fB\-mminimal-toc\fR" 4
5190 .IX Item "-mminimal-toc"
5191 .PD
5192 Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
5193 every executable file.  The \fB\-mfull-toc\fR option is selected by
5194 default.  In that case, \s-1GCC\s0 will allocate at least one \s-1TOC\s0 entry for
5195 each unique non-automatic variable reference in your program.  \s-1GCC\s0
5196 will also place floating-point constants in the \s-1TOC\s0.  However, only
5197 16,384 entries are available in the \s-1TOC\s0.
5198 .Sp
5199 If you receive a linker error message that saying you have overflowed
5200 the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
5201 with the \fB\-mno-fp-in-toc\fR and \fB\-mno-sum-in-toc\fR options.
5202 \&\fB\-mno-fp-in-toc\fR prevents \s-1GCC\s0 from putting floating-point
5203 constants in the \s-1TOC\s0 and \fB\-mno-sum-in-toc\fR forces \s-1GCC\s0 to
5204 generate code to calculate the sum of an address and a constant at
5205 run-time instead of putting that sum into the \s-1TOC\s0.  You may specify one
5206 or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
5207 slower and larger code at the expense of conserving \s-1TOC\s0 space.
5208 .Sp
5209 If you still run out of space in the \s-1TOC\s0 even when you specify both of
5210 these options, specify \fB\-mminimal-toc\fR instead.  This option causes
5211 \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
5212 option, \s-1GCC\s0 will produce code that is slower and larger but which
5213 uses extremely little \s-1TOC\s0 space.  You may wish to use this option
5214 only on files that contain less frequently executed code. 
5215 .Ip "\fB\-maix64\fR" 4
5216 .IX Item "-maix64"
5217 .PD 0
5218 .Ip "\fB\-maix32\fR" 4
5219 .IX Item "-maix32"
5220 .PD
5221 Enable 64\-bit \s-1AIX\s0 \s-1ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
5222 \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
5223 Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR and
5224 \&\fB\-mpowerpc\fR, while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
5225 implies \fB\-mno-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
5226 .Ip "\fB\-mxl-call\fR" 4
5227 .IX Item "-mxl-call"
5228 .PD 0
5229 .Ip "\fB\-mno-xl-call\fR" 4
5230 .IX Item "-mno-xl-call"
5231 .PD
5232 On \s-1AIX\s0, pass floating-point arguments to prototyped functions beyond the
5233 register save area (\s-1RSA\s0) on the stack in addition to argument FPRs.  The
5234 \&\s-1AIX\s0 calling convention was extended but not initially documented to
5235 handle an obscure K&R C case of calling a function that takes the
5236 address of its arguments with fewer arguments than declared.  \s-1AIX\s0 \s-1XL\s0
5237 compilers access floating point arguments which do not fit in the
5238 \&\s-1RSA\s0 from the stack when a subroutine is compiled without
5239 optimization.  Because always storing floating-point arguments on the
5240 stack is inefficient and rarely needed, this option is not enabled by
5241 default and only is necessary when calling subroutines compiled by \s-1AIX\s0
5242 \&\s-1XL\s0 compilers without optimization.
5243 .Ip "\fB\-mthreads\fR" 4
5244 .IX Item "-mthreads"
5245 Support \fI\s-1AIX\s0 Threads\fR.  Link an application written to use
5246 \&\fIpthreads\fR with special libraries and startup code to enable the
5247 application to run.
5248 .Ip "\fB\-mpe\fR" 4
5249 .IX Item "-mpe"
5250 Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
5251 application written to use message passing with special startup code to
5252 enable the application to run.  The system must have \s-1PE\s0 installed in the
5253 standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
5254 must be overridden with the \fB\-specs=\fR option to specify the
5255 appropriate directory location.  The Parallel Environment does not
5256 support threads, so the \fB\-mpe\fR option and the \fB\-mthreads\fR
5257 option are incompatible.
5258 .Ip "\fB\-msoft-float\fR" 4
5259 .IX Item "-msoft-float"
5260 .PD 0
5261 .Ip "\fB\-mhard-float\fR" 4
5262 .IX Item "-mhard-float"
5263 .PD
5264 Generate code that does not use (uses) the floating-point register set.
5265 Software floating point emulation is provided if you use the
5266 \&\fB\-msoft-float\fR option, and pass the option to \s-1GCC\s0 when linking.
5267 .Ip "\fB\-mmultiple\fR" 4
5268 .IX Item "-mmultiple"
5269 .PD 0
5270 .Ip "\fB\-mno-multiple\fR" 4
5271 .IX Item "-mno-multiple"
5272 .PD
5273 Generate code that uses (does not use) the load multiple word
5274 instructions and the store multiple word instructions.  These
5275 instructions are generated by default on \s-1POWER\s0 systems, and not
5276 generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little
5277 endian PowerPC systems, since those instructions do not work when the
5278 processor is in little endian mode.  The exceptions are \s-1PPC740\s0 and
5279 \&\s-1PPC750\s0 which permit the instructions usage in little endian mode.
5280 .Ip "\fB\-mstring\fR" 4
5281 .IX Item "-mstring"
5282 .PD 0
5283 .Ip "\fB\-mno-string\fR" 4
5284 .IX Item "-mno-string"
5285 .PD
5286 Generate code that uses (does not use) the load string instructions
5287 and the store string word instructions to save multiple registers and
5288 do small block moves.  These instructions are generated by default on
5289 \&\s-1POWER\s0 systems, and not generated on PowerPC systems.  Do not use
5290 \&\fB\-mstring\fR on little endian PowerPC systems, since those
5291 instructions do not work when the processor is in little endian mode.
5292 The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit the instructions
5293 usage in little endian mode.
5294 .Ip "\fB\-mupdate\fR" 4
5295 .IX Item "-mupdate"
5296 .PD 0
5297 .Ip "\fB\-mno-update\fR" 4
5298 .IX Item "-mno-update"
5299 .PD
5300 Generate code that uses (does not use) the load or store instructions
5301 that update the base register to the address of the calculated memory
5302 location.  These instructions are generated by default.  If you use
5303 \&\fB\-mno-update\fR, there is a small window between the time that the
5304 stack pointer is updated and the address of the previous frame is
5305 stored, which means code that walks the stack frame across interrupts or
5306 signals may get corrupted data.
5307 .Ip "\fB\-mfused-madd\fR" 4
5308 .IX Item "-mfused-madd"
5309 .PD 0
5310 .Ip "\fB\-mno-fused-madd\fR" 4
5311 .IX Item "-mno-fused-madd"
5312 .PD
5313 Generate code that uses (does not use) the floating point multiply and
5314 accumulate instructions.  These instructions are generated by default if
5315 hardware floating is used.
5316 .Ip "\fB\-mno-bit-align\fR" 4
5317 .IX Item "-mno-bit-align"
5318 .PD 0
5319 .Ip "\fB\-mbit-align\fR" 4
5320 .IX Item "-mbit-align"
5321 .PD
5322 On System V.4 and embedded PowerPC systems do not (do) force structures
5323 and unions that contain bit fields to be aligned to the base type of the
5324 bit field.
5325 .Sp
5326 For example, by default a structure containing nothing but 8
5327 \&\f(CW\*(C`unsigned\*(C'\fR bitfields of length 1 would be aligned to a 4 byte
5328 boundary and have a size of 4 bytes.  By using \fB\-mno-bit-align\fR,
5329 the structure would be aligned to a 1 byte boundary and be one byte in
5330 size.
5331 .Ip "\fB\-mno-strict-align\fR" 4
5332 .IX Item "-mno-strict-align"
5333 .PD 0
5334 .Ip "\fB\-mstrict-align\fR" 4
5335 .IX Item "-mstrict-align"
5336 .PD
5337 On System V.4 and embedded PowerPC systems do not (do) assume that
5338 unaligned memory references will be handled by the system.
5339 .Ip "\fB\-mrelocatable\fR" 4
5340 .IX Item "-mrelocatable"
5341 .PD 0
5342 .Ip "\fB\-mno-relocatable\fR" 4
5343 .IX Item "-mno-relocatable"
5344 .PD
5345 On embedded PowerPC systems generate code that allows (does not allow)
5346 the program to be relocated to a different address at runtime.  If you
5347 use \fB\-mrelocatable\fR on any module, all objects linked together must
5348 be compiled with \fB\-mrelocatable\fR or \fB\-mrelocatable-lib\fR.
5349 .Ip "\fB\-mrelocatable-lib\fR" 4
5350 .IX Item "-mrelocatable-lib"
5351 .PD 0
5352 .Ip "\fB\-mno-relocatable-lib\fR" 4
5353 .IX Item "-mno-relocatable-lib"
5354 .PD
5355 On embedded PowerPC systems generate code that allows (does not allow)
5356 the program to be relocated to a different address at runtime.  Modules
5357 compiled with \fB\-mrelocatable-lib\fR can be linked with either modules
5358 compiled without \fB\-mrelocatable\fR and \fB\-mrelocatable-lib\fR or
5359 with modules compiled with the \fB\-mrelocatable\fR options.
5360 .Ip "\fB\-mno-toc\fR" 4
5361 .IX Item "-mno-toc"
5362 .PD 0
5363 .Ip "\fB\-mtoc\fR" 4
5364 .IX Item "-mtoc"
5365 .PD
5366 On System V.4 and embedded PowerPC systems do not (do) assume that
5367 register 2 contains a pointer to a global area pointing to the addresses
5368 used in the program.
5369 .Ip "\fB\-mlittle\fR" 4
5370 .IX Item "-mlittle"
5371 .PD 0
5372 .Ip "\fB\-mlittle-endian\fR" 4
5373 .IX Item "-mlittle-endian"
5374 .PD
5375 On System V.4 and embedded PowerPC systems compile code for the
5376 processor in little endian mode.  The \fB\-mlittle-endian\fR option is
5377 the same as \fB\-mlittle\fR.
5378 .Ip "\fB\-mbig\fR" 4
5379 .IX Item "-mbig"
5380 .PD 0
5381 .Ip "\fB\-mbig-endian\fR" 4
5382 .IX Item "-mbig-endian"
5383 .PD
5384 On System V.4 and embedded PowerPC systems compile code for the
5385 processor in big endian mode.  The \fB\-mbig-endian\fR option is
5386 the same as \fB\-mbig\fR.
5387 .Ip "\fB\-mcall-sysv\fR" 4
5388 .IX Item "-mcall-sysv"
5389 On System V.4 and embedded PowerPC systems compile code using calling
5390 conventions that adheres to the March 1995 draft of the System V
5391 Application Binary Interface, PowerPC processor supplement.  This is the
5392 default unless you configured \s-1GCC\s0 using \fBpowerpc-*\-eabiaix\fR.
5393 .Ip "\fB\-mcall-sysv-eabi\fR" 4
5394 .IX Item "-mcall-sysv-eabi"
5395 Specify both \fB\-mcall-sysv\fR and \fB\-meabi\fR options.
5396 .Ip "\fB\-mcall-sysv-noeabi\fR" 4
5397 .IX Item "-mcall-sysv-noeabi"
5398 Specify both \fB\-mcall-sysv\fR and \fB\-mno-eabi\fR options.
5399 .Ip "\fB\-mcall-aix\fR" 4
5400 .IX Item "-mcall-aix"
5401 On System V.4 and embedded PowerPC systems compile code using calling
5402 conventions that are similar to those used on \s-1AIX\s0.  This is the
5403 default if you configured \s-1GCC\s0 using \fBpowerpc-*\-eabiaix\fR.
5404 .Ip "\fB\-mcall-solaris\fR" 4
5405 .IX Item "-mcall-solaris"
5406 On System V.4 and embedded PowerPC systems compile code for the Solaris
5407 operating system.
5408 .Ip "\fB\-mcall-linux\fR" 4
5409 .IX Item "-mcall-linux"
5410 On System V.4 and embedded PowerPC systems compile code for the
5411 Linux-based \s-1GNU\s0 system.
5412 .Ip "\fB\-mprototype\fR" 4
5413 .IX Item "-mprototype"
5414 .PD 0
5415 .Ip "\fB\-mno-prototype\fR" 4
5416 .IX Item "-mno-prototype"
5417 .PD
5418 On System V.4 and embedded PowerPC systems assume that all calls to
5419 variable argument functions are properly prototyped.  Otherwise, the
5420 compiler must insert an instruction before every non prototyped call to
5421 set or clear bit 6 of the condition code register (\fI\s-1CR\s0\fR) to
5422 indicate whether floating point values were passed in the floating point
5423 registers in case the function takes a variable arguments.  With
5424 \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
5425 will set or clear the bit.
5426 .Ip "\fB\-msim\fR" 4
5427 .IX Item "-msim"
5428 On embedded PowerPC systems, assume that the startup module is called
5429 \&\fIsim-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
5430 \&\fIlibc.a\fR.  This is the default for \fBpowerpc-*\-eabisim\fR.
5431 configurations.
5432 .Ip "\fB\-mmvme\fR" 4
5433 .IX Item "-mmvme"
5434 On embedded PowerPC systems, assume that the startup module is called
5435 \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
5436 \&\fIlibc.a\fR.
5437 .Ip "\fB\-mads\fR" 4
5438 .IX Item "-mads"
5439 On embedded PowerPC systems, assume that the startup module is called
5440 \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
5441 \&\fIlibc.a\fR.
5442 .Ip "\fB\-myellowknife\fR" 4
5443 .IX Item "-myellowknife"
5444 On embedded PowerPC systems, assume that the startup module is called
5445 \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
5446 \&\fIlibc.a\fR.
5447 .Ip "\fB\-mvxworks\fR" 4
5448 .IX Item "-mvxworks"
5449 On System V.4 and embedded PowerPC systems, specify that you are
5450 compiling for a VxWorks system.
5451 .Ip "\fB\-memb\fR" 4
5452 .IX Item "-memb"
5453 On embedded PowerPC systems, set the \fI\s-1PPC_EMB\s0\fR bit in the \s-1ELF\s0 flags
5454 header to indicate that \fBeabi\fR extended relocations are used.
5455 .Ip "\fB\-meabi\fR" 4
5456 .IX Item "-meabi"
5457 .PD 0
5458 .Ip "\fB\-mno-eabi\fR" 4
5459 .IX Item "-mno-eabi"
5460 .PD
5461 On System V.4 and embedded PowerPC systems do (do not) adhere to the
5462 Embedded Applications Binary Interface (eabi) which is a set of
5463 modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
5464 means that the stack is aligned to an 8 byte boundary, a function
5465 \&\f(CW\*(C`_\|_eabi\*(C'\fR is called to from \f(CW\*(C`main\*(C'\fR to set up the eabi
5466 environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
5467 \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
5468 \&\fB\-mno-eabi\fR means that the stack is aligned to a 16 byte boundary,
5469 do not call an initialization function from \f(CW\*(C`main\*(C'\fR, and the
5470 \&\fB\-msdata\fR option will only use \f(CW\*(C`r13\*(C'\fR to point to a single
5471 small data area.  The \fB\-meabi\fR option is on by default if you
5472 configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
5473 .Ip "\fB\-msdata=eabi\fR" 4
5474 .IX Item "-msdata=eabi"
5475 On System V.4 and embedded PowerPC systems, put small initialized
5476 \&\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata2\fR section, which
5477 is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
5478 non-\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata\fR section,
5479 which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
5480 global and static data in the \fB.sbss\fR section, which is adjacent to
5481 the \fB.sdata\fR section.  The \fB\-msdata=eabi\fR option is
5482 incompatible with the \fB\-mrelocatable\fR option.  The
5483 \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
5484 .Ip "\fB\-msdata=sysv\fR" 4
5485 .IX Item "-msdata=sysv"
5486 On System V.4 and embedded PowerPC systems, put small global and static
5487 data in the \fB.sdata\fR section, which is pointed to by register
5488 \&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
5489 \&\fB.sbss\fR section, which is adjacent to the \fB.sdata\fR section.
5490 The \fB\-msdata=sysv\fR option is incompatible with the
5491 \&\fB\-mrelocatable\fR option.
5492 .Ip "\fB\-msdata=default\fR" 4
5493 .IX Item "-msdata=default"
5494 .PD 0
5495 .Ip "\fB\-msdata\fR" 4
5496 .IX Item "-msdata"
5497 .PD
5498 On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
5499 compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
5500 same as \fB\-msdata=sysv\fR.
5501 .Ip "\fB\-msdata-data\fR" 4
5502 .IX Item "-msdata-data"
5503 On System V.4 and embedded PowerPC systems, put small global and static
5504 data in the \fB.sdata\fR section.  Put small uninitialized global and
5505 static data in the \fB.sbss\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
5506 to address small data however.  This is the default behavior unless
5507 other \fB\-msdata\fR options are used.
5508 .Ip "\fB\-msdata=none\fR" 4
5509 .IX Item "-msdata=none"
5510 .PD 0
5511 .Ip "\fB\-mno-sdata\fR" 4
5512 .IX Item "-mno-sdata"
5513 .PD
5514 On embedded PowerPC systems, put all initialized global and static data
5515 in the \fB.data\fR section, and all uninitialized data in the
5516 \&\fB.bss\fR section.
5517 .Ip "\fB\-G\fR \fInum\fR" 4
5518 .IX Item "-G num"
5519 On embedded PowerPC systems, put global and static items less than or
5520 equal to \fInum\fR bytes into the small data or bss sections instead of
5521 the normal data or bss section.  By default, \fInum\fR is 8.  The
5522 \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
5523 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
5524 .Ip "\fB\-mregnames\fR" 4
5525 .IX Item "-mregnames"
5526 .PD 0
5527 .Ip "\fB\-mno-regnames\fR" 4
5528 .IX Item "-mno-regnames"
5529 .PD
5530 On System V.4 and embedded PowerPC systems do (do not) emit register
5531 names in the assembly language output using symbolic forms.
5532 .PP
5533 .I "\s-1IBM\s0 \s-1RT\s0 Options"
5534 .IX Subsection "IBM RT Options"
5535 .PP
5536 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RT\s0 \s-1PC:\s0
5537 .Ip "\fB\-min-line-mul\fR" 4
5538 .IX Item "-min-line-mul"
5539 Use an in-line code sequence for integer multiplies.  This is the
5540 default.
5541 .Ip "\fB\-mcall-lib-mul\fR" 4
5542 .IX Item "-mcall-lib-mul"
5543 Call \f(CW\*(C`lmul$$\*(C'\fR for integer multiples.
5544 .Ip "\fB\-mfull-fp-blocks\fR" 4
5545 .IX Item "-mfull-fp-blocks"
5546 Generate full-size floating point data blocks, including the minimum
5547 amount of scratch space recommended by \s-1IBM\s0.  This is the default.
5548 .Ip "\fB\-mminimum-fp-blocks\fR" 4
5549 .IX Item "-mminimum-fp-blocks"
5550 Do not include extra scratch space in floating point data blocks.  This
5551 results in smaller code, but slower execution, since scratch space must
5552 be allocated dynamically.
5553 .Ip "\fB\-mfp-arg-in-fpregs\fR" 4
5554 .IX Item "-mfp-arg-in-fpregs"
5555 Use a calling sequence incompatible with the \s-1IBM\s0 calling convention in
5556 which floating point arguments are passed in floating point registers.
5557 Note that \f(CW\*(C`varargs.h\*(C'\fR and \f(CW\*(C`stdargs.h\*(C'\fR will not work with
5558 floating point operands if this option is specified.
5559 .Ip "\fB\-mfp-arg-in-gregs\fR" 4
5560 .IX Item "-mfp-arg-in-gregs"
5561 Use the normal calling convention for floating point arguments.  This is
5562 the default.
5563 .Ip "\fB\-mhc-struct-return\fR" 4
5564 .IX Item "-mhc-struct-return"
5565 Return structures of more than one word in memory, rather than in a
5566 register.  This provides compatibility with the MetaWare HighC (hc)
5567 compiler.  Use the option \fB\-fpcc-struct-return\fR for compatibility
5568 with the Portable C Compiler (pcc).
5569 .Ip "\fB\-mnohc-struct-return\fR" 4
5570 .IX Item "-mnohc-struct-return"
5571 Return some structures of more than one word in registers, when
5572 convenient.  This is the default.  For compatibility with the
5573 IBM-supplied compilers, use the option \fB\-fpcc-struct-return\fR or the
5574 option \fB\-mhc-struct-return\fR.
5575 .PP
5576 .I "\s-1MIPS\s0 Options"
5577 .IX Subsection "MIPS Options"
5578 .PP
5579 These \fB\-m\fR options are defined for the \s-1MIPS\s0 family of computers:
5580 .Ip "\fB\-mcpu=\fR\fIcpu type\fR" 4
5581 .IX Item "-mcpu=cpu type"
5582 Assume the defaults for the machine type \fIcpu type\fR when scheduling
5583 instructions.  The choices for \fIcpu type\fR are \fBr2000\fR, \fBr3000\fR,
5584 \&\fBr3900\fR, \fBr4000\fR, \fBr4100\fR, \fBr4300\fR, \fBr4400\fR,
5585 \&\fBr4600\fR, \fBr4650\fR, \fBr5000\fR, \fBr6000\fR, \fBr8000\fR,
5586 and \fBorion\fR.  Additionally, the \fBr2000\fR, \fBr3000\fR,
5587 \&\fBr4000\fR, \fBr5000\fR, and \fBr6000\fR can be abbreviated as
5588 \&\fBr2k\fR (or \fBr2K\fR), \fBr3k\fR, etc.  While picking a specific
5589 \&\fIcpu type\fR will schedule things appropriately for that particular
5590 chip, the compiler will not generate any code that does not meet level 1
5591 of the \s-1MIPS\s0 \s-1ISA\s0 (instruction set architecture) without a \fB\-mipsX\fR
5592 or \fB\-mabi\fR switch being used.
5593 .Ip "\fB\-mips1\fR" 4
5594 .IX Item "-mips1"
5595 Issue instructions from level 1 of the \s-1MIPS\s0 \s-1ISA\s0.  This is the default.
5596 \&\fBr3000\fR is the default \fIcpu type\fR at this \s-1ISA\s0 level.
5597 .Ip "\fB\-mips2\fR" 4
5598 .IX Item "-mips2"
5599 Issue instructions from level 2 of the \s-1MIPS\s0 \s-1ISA\s0 (branch likely, square
5600 root instructions).  \fBr6000\fR is the default \fIcpu type\fR at this
5601 \&\s-1ISA\s0 level.
5602 .Ip "\fB\-mips3\fR" 4
5603 .IX Item "-mips3"
5604 Issue instructions from level 3 of the \s-1MIPS\s0 \s-1ISA\s0 (64 bit instructions).
5605 \&\fBr4000\fR is the default \fIcpu type\fR at this \s-1ISA\s0 level.
5606 .Ip "\fB\-mips4\fR" 4
5607 .IX Item "-mips4"
5608 Issue instructions from level 4 of the \s-1MIPS\s0 \s-1ISA\s0 (conditional move,
5609 prefetch, enhanced \s-1FPU\s0 instructions).  \fBr8000\fR is the default
5610 \&\fIcpu type\fR at this \s-1ISA\s0 level.
5611 .Ip "\fB\-mfp32\fR" 4
5612 .IX Item "-mfp32"
5613 Assume that 32 32\-bit floating point registers are available.  This is
5614 the default.
5615 .Ip "\fB\-mfp64\fR" 4
5616 .IX Item "-mfp64"
5617 Assume that 32 64\-bit floating point registers are available.  This is
5618 the default when the \fB\-mips3\fR option is used.
5619 .Ip "\fB\-mgp32\fR" 4
5620 .IX Item "-mgp32"
5621 Assume that 32 32\-bit general purpose registers are available.  This is
5622 the default.
5623 .Ip "\fB\-mgp64\fR" 4
5624 .IX Item "-mgp64"
5625 Assume that 32 64\-bit general purpose registers are available.  This is
5626 the default when the \fB\-mips3\fR option is used.
5627 .Ip "\fB\-mint64\fR" 4
5628 .IX Item "-mint64"
5629 Force int and long types to be 64 bits wide.  See \fB\-mlong32\fR for an
5630 explanation of the default, and the width of pointers.
5631 .Ip "\fB\-mlong64\fR" 4
5632 .IX Item "-mlong64"
5633 Force long types to be 64 bits wide.  See \fB\-mlong32\fR for an
5634 explanation of the default, and the width of pointers.
5635 .Ip "\fB\-mlong32\fR" 4
5636 .IX Item "-mlong32"
5637 Force long, int, and pointer types to be 32 bits wide.
5638 .Sp
5639 If none of \fB\-mlong32\fR, \fB\-mlong64\fR, or \fB\-mint64\fR are set,
5640 the size of ints, longs, and pointers depends on the \s-1ABI\s0 and \s-1ISA\s0 chosen.
5641 For \fB\-mabi=32\fR, and \fB\-mabi=n32\fR, ints and longs are 32 bits
5642 wide.  For \fB\-mabi=64\fR, ints are 32 bits, and longs are 64 bits wide.
5643 For \fB\-mabi=eabi\fR and either \fB\-mips1\fR or \fB\-mips2\fR, ints
5644 and longs are 32 bits wide.  For \fB\-mabi=eabi\fR and higher ISAs, ints
5645 are 32 bits, and longs are 64 bits wide.  The width of pointer types is
5646 the smaller of the width of longs or the width of general purpose
5647 registers (which in turn depends on the \s-1ISA\s0).
5648 .Ip "\fB\-mabi=32\fR" 4
5649 .IX Item "-mabi=32"
5650 .PD 0
5651 .Ip "\fB\-mabi=o64\fR" 4
5652 .IX Item "-mabi=o64"
5653 .Ip "\fB\-mabi=n32\fR" 4
5654 .IX Item "-mabi=n32"
5655 .Ip "\fB\-mabi=64\fR" 4
5656 .IX Item "-mabi=64"
5657 .Ip "\fB\-mabi=eabi\fR" 4
5658 .IX Item "-mabi=eabi"
5659 .PD
5660 Generate code for the indicated \s-1ABI\s0.  The default instruction level is
5661 \&\fB\-mips1\fR for \fB32\fR, \fB\-mips3\fR for \fBn32\fR, and
5662 \&\fB\-mips4\fR otherwise.  Conversely, with \fB\-mips1\fR or
5663 \&\fB\-mips2\fR, the default \s-1ABI\s0 is \fB32\fR; otherwise, the default \s-1ABI\s0
5664 is \fB64\fR.
5665 .Ip "\fB\-mmips-as\fR" 4
5666 .IX Item "-mmips-as"
5667 Generate code for the \s-1MIPS\s0 assembler, and invoke \fImips-tfile\fR to
5668 add normal debug information.  This is the default for all
5669 platforms except for the \s-1OSF/1\s0 reference platform, using the OSF/rose
5670 object format.  If the either of the \fB\-gstabs\fR or \fB\-gstabs+\fR
5671 switches are used, the \fImips-tfile\fR program will encapsulate the
5672 stabs within \s-1MIPS\s0 \s-1ECOFF\s0.
5673 .Ip "\fB\-mgas\fR" 4
5674 .IX Item "-mgas"
5675 Generate code for the \s-1GNU\s0 assembler.  This is the default on the \s-1OSF/1\s0
5676 reference platform, using the OSF/rose object format.  Also, this is
5677 the default if the configure option \fB\*(--with-gnu-as\fR is used.
5678 .Ip "\fB\-msplit-addresses\fR" 4
5679 .IX Item "-msplit-addresses"
5680 .PD 0
5681 .Ip "\fB\-mno-split-addresses\fR" 4
5682 .IX Item "-mno-split-addresses"
5683 .PD
5684 Generate code to load the high and low parts of address constants separately.
5685 This allows \f(CW\*(C`gcc\*(C'\fR to optimize away redundant loads of the high order
5686 bits of addresses.  This optimization requires \s-1GNU\s0 as and \s-1GNU\s0 ld.
5687 This optimization is enabled by default for some embedded targets where
5688 \&\s-1GNU\s0 as and \s-1GNU\s0 ld are standard.
5689 .Ip "\fB\-mrnames\fR" 4
5690 .IX Item "-mrnames"
5691 .PD 0
5692 .Ip "\fB\-mno-rnames\fR" 4
5693 .IX Item "-mno-rnames"
5694 .PD
5695 The \fB\-mrnames\fR switch says to output code using the \s-1MIPS\s0 software
5696 names for the registers, instead of the hardware names (ie, \fIa0\fR
5697 instead of \fI$4\fR).  The only known assembler that supports this option
5698 is the Algorithmics assembler.
5699 .Ip "\fB\-mgpopt\fR" 4
5700 .IX Item "-mgpopt"
5701 .PD 0
5702 .Ip "\fB\-mno-gpopt\fR" 4
5703 .IX Item "-mno-gpopt"
5704 .PD
5705 The \fB\-mgpopt\fR switch says to write all of the data declarations
5706 before the instructions in the text section, this allows the \s-1MIPS\s0
5707 assembler to generate one word memory references instead of using two
5708 words for short global or static data items.  This is on by default if
5709 optimization is selected.
5710 .Ip "\fB\-mstats\fR" 4
5711 .IX Item "-mstats"
5712 .PD 0
5713 .Ip "\fB\-mno-stats\fR" 4
5714 .IX Item "-mno-stats"
5715 .PD
5716 For each non-inline function processed, the \fB\-mstats\fR switch
5717 causes the compiler to emit one line to the standard error file to
5718 print statistics about the program (number of registers saved, stack
5719 size, etc.).
5720 .Ip "\fB\-mmemcpy\fR" 4
5721 .IX Item "-mmemcpy"
5722 .PD 0
5723 .Ip "\fB\-mno-memcpy\fR" 4
5724 .IX Item "-mno-memcpy"
5725 .PD
5726 The \fB\-mmemcpy\fR switch makes all block moves call the appropriate
5727 string function (\fBmemcpy\fR or \fBbcopy\fR) instead of possibly
5728 generating inline code.
5729 .Ip "\fB\-mmips-tfile\fR" 4
5730 .IX Item "-mmips-tfile"
5731 .PD 0
5732 .Ip "\fB\-mno-mips-tfile\fR" 4
5733 .IX Item "-mno-mips-tfile"
5734 .PD
5735 The \fB\-mno-mips-tfile\fR switch causes the compiler not
5736 postprocess the object file with the \fImips-tfile\fR program,
5737 after the \s-1MIPS\s0 assembler has generated it to add debug support.  If
5738 \&\fImips-tfile\fR is not run, then no local variables will be
5739 available to the debugger.  In addition, \fIstage2\fR and
5740 \&\fIstage3\fR objects will have the temporary file names passed to the
5741 assembler embedded in the object file, which means the objects will
5742 not compare the same.  The \fB\-mno-mips-tfile\fR switch should only
5743 be used when there are bugs in the \fImips-tfile\fR program that
5744 prevents compilation.
5745 .Ip "\fB\-msoft-float\fR" 4
5746 .IX Item "-msoft-float"
5747 Generate output containing library calls for floating point.
5748 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
5749 Normally the facilities of the machine's usual C compiler are used, but
5750 this can't be done directly in cross-compilation.  You must make your
5751 own arrangements to provide suitable library functions for
5752 cross-compilation.
5753 .Ip "\fB\-mhard-float\fR" 4
5754 .IX Item "-mhard-float"
5755 Generate output containing floating point instructions.  This is the
5756 default if you use the unmodified sources.
5757 .Ip "\fB\-mabicalls\fR" 4
5758 .IX Item "-mabicalls"
5759 .PD 0
5760 .Ip "\fB\-mno-abicalls\fR" 4
5761 .IX Item "-mno-abicalls"
5762 .PD
5763 Emit (or do not emit) the pseudo operations \fB.abicalls\fR,
5764 \&\fB.cpload\fR, and \fB.cprestore\fR that some System V.4 ports use for
5765 position independent code.
5766 .Ip "\fB\-mlong-calls\fR" 4
5767 .IX Item "-mlong-calls"
5768 .PD 0
5769 .Ip "\fB\-mno-long-calls\fR" 4
5770 .IX Item "-mno-long-calls"
5771 .PD
5772 Do all calls with the \fB\s-1JALR\s0\fR instruction, which requires
5773 loading up a function's address into a register before the call.
5774 You need to use this switch, if you call outside of the current
5775 512 megabyte segment to functions that are not through pointers.
5776 .Ip "\fB\-mhalf-pic\fR" 4
5777 .IX Item "-mhalf-pic"
5778 .PD 0
5779 .Ip "\fB\-mno-half-pic\fR" 4
5780 .IX Item "-mno-half-pic"
5781 .PD
5782 Put pointers to extern references into the data section and load them
5783 up, rather than put the references in the text section.
5784 .Ip "\fB\-membedded-pic\fR" 4
5785 .IX Item "-membedded-pic"
5786 .PD 0
5787 .Ip "\fB\-mno-embedded-pic\fR" 4
5788 .IX Item "-mno-embedded-pic"
5789 .PD
5790 Generate \s-1PIC\s0 code suitable for some embedded systems.  All calls are
5791 made using \s-1PC\s0 relative address, and all data is addressed using the \f(CW$gp\fR
5792 register.  No more than 65536 bytes of global data may be used.  This
5793 requires \s-1GNU\s0 as and \s-1GNU\s0 ld which do most of the work.  This currently
5794 only works on targets which use \s-1ECOFF\s0; it does not work with \s-1ELF\s0.
5795 .Ip "\fB\-membedded-data\fR" 4
5796 .IX Item "-membedded-data"
5797 .PD 0
5798 .Ip "\fB\-mno-embedded-data\fR" 4
5799 .IX Item "-mno-embedded-data"
5800 .PD
5801 Allocate variables to the read-only data section first if possible, then
5802 next in the small data section if possible, otherwise in data.  This gives
5803 slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
5804 when executing, and thus may be preferred for some embedded systems.
5805 .Ip "\fB\-muninit-const-in-rodata\fR" 4
5806 .IX Item "-muninit-const-in-rodata"
5807 .PD 0
5808 .Ip "\fB\-mno-uninit-const-in-rodata\fR" 4
5809 .IX Item "-mno-uninit-const-in-rodata"
5810 .PD
5811 When used together with \-membedded-data, it will always store uninitialized
5812 const variables in the read-only data section.
5813 .Ip "\fB\-msingle-float\fR" 4
5814 .IX Item "-msingle-float"
5815 .PD 0
5816 .Ip "\fB\-mdouble-float\fR" 4
5817 .IX Item "-mdouble-float"
5818 .PD
5819 The \fB\-msingle-float\fR switch tells gcc to assume that the floating
5820 point coprocessor only supports single precision operations, as on the
5821 \&\fBr4650\fR chip.  The \fB\-mdouble-float\fR switch permits gcc to use
5822 double precision operations.  This is the default.
5823 .Ip "\fB\-mmad\fR" 4
5824 .IX Item "-mmad"
5825 .PD 0
5826 .Ip "\fB\-mno-mad\fR" 4
5827 .IX Item "-mno-mad"
5828 .PD
5829 Permit use of the \fBmad\fR, \fBmadu\fR and \fBmul\fR instructions,
5830 as on the \fBr4650\fR chip.
5831 .Ip "\fB\-m4650\fR" 4
5832 .IX Item "-m4650"
5833 Turns on \fB\-msingle-float\fR, \fB\-mmad\fR, and, at least for now,
5834 \&\fB\-mcpu=r4650\fR.
5835 .Ip "\fB\-mips16\fR" 4
5836 .IX Item "-mips16"
5837 .PD 0
5838 .Ip "\fB\-mno-mips16\fR" 4
5839 .IX Item "-mno-mips16"
5840 .PD
5841 Enable 16\-bit instructions.
5842 .Ip "\fB\-mentry\fR" 4
5843 .IX Item "-mentry"
5844 Use the entry and exit pseudo ops.  This option can only be used with
5845 \&\fB\-mips16\fR.
5846 .Ip "\fB\-EL\fR" 4
5847 .IX Item "-EL"
5848 Compile code for the processor in little endian mode.
5849 The requisite libraries are assumed to exist.
5850 .Ip "\fB\-EB\fR" 4
5851 .IX Item "-EB"
5852 Compile code for the processor in big endian mode.
5853 The requisite libraries are assumed to exist.
5854 .Ip "\fB\-G\fR \fInum\fR" 4
5855 .IX Item "-G num"
5856 Put global and static items less than or equal to \fInum\fR bytes into
5857 the small data or bss sections instead of the normal data or bss
5858 section.  This allows the assembler to emit one word memory reference
5859 instructions based on the global pointer (\fIgp\fR or \fI$28\fR),
5860 instead of the normal two words used.  By default, \fInum\fR is 8 when
5861 the \s-1MIPS\s0 assembler is used, and 0 when the \s-1GNU\s0 assembler is used.  The
5862 \&\fB\-G\fR \fInum\fR switch is also passed to the assembler and linker.
5863 All modules should be compiled with the same \fB\-G\fR \fInum\fR
5864 value.
5865 .Ip "\fB\-nocpp\fR" 4
5866 .IX Item "-nocpp"
5867 Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
5868 assembler files (with a \fB.s\fR suffix) when assembling them.
5869 .Ip "\fB\-mfix7000\fR" 4
5870 .IX Item "-mfix7000"
5871 Pass an option to gas which will cause nops to be inserted if
5872 the read of the destination register of an mfhi or mflo instruction
5873 occurs in the following two instructions.
5874 .Ip "\fB\-no-crt0\fR" 4
5875 .IX Item "-no-crt0"
5876 Do not include the default crt0.
5877 .PP
5878 .I "Intel 386 Options"
5879 .IX Subsection "Intel 386 Options"
5880 .PP
5881 These \fB\-m\fR options are defined for the i386 family of computers:
5882 .Ip "\fB\-mcpu=\fR\fIcpu type\fR" 4
5883 .IX Item "-mcpu=cpu type"
5884 Assume the defaults for the machine type \fIcpu type\fR when scheduling
5885 instructions.  The choices for \fIcpu type\fR are \fBi386\fR,
5886 \&\fBi486\fR, \fBi586\fR, \fBi686\fR, \fBpentium\fR,
5887 \&\fBpentiumpro\fR, \fBpentium4\fR, \fBk6\fR, and \fBathlon\fR
5888 .Sp
5889 While picking a specific \fIcpu type\fR will schedule things appropriately
5890 for that particular chip, the compiler will not generate any code that
5891 does not run on the i386 without the \fB\-march=\fR\fIcpu type\fR option
5892 being used.  \fBi586\fR is equivalent to \fBpentium\fR and \fBi686\fR
5893 is equivalent to \fBpentiumpro\fR.  \fBk6\fR and \fBathlon\fR are the
5894 \&\s-1AMD\s0 chips as opposed to the Intel ones.
5895 .Ip "\fB\-march=\fR\fIcpu type\fR" 4
5896 .IX Item "-march=cpu type"
5897 Generate instructions for the machine type \fIcpu type\fR.  The choices
5898 for \fIcpu type\fR are the same as for \fB\-mcpu\fR.  Moreover, 
5899 specifying \fB\-march=\fR\fIcpu type\fR implies \fB\-mcpu=\fR\fIcpu type\fR.
5900 .Ip "\fB\-m386\fR" 4
5901 .IX Item "-m386"
5902 .PD 0
5903 .Ip "\fB\-m486\fR" 4
5904 .IX Item "-m486"
5905 .Ip "\fB\-mpentium\fR" 4
5906 .IX Item "-mpentium"
5907 .Ip "\fB\-mpentiumpro\fR" 4
5908 .IX Item "-mpentiumpro"
5909 .PD
5910 Synonyms for \-mcpu=i386, \-mcpu=i486, \-mcpu=pentium, and \-mcpu=pentiumpro
5911 respectively.  These synonyms are deprecated.
5912 .Ip "\fB\-mintel-syntax\fR" 4
5913 .IX Item "-mintel-syntax"
5914 Emit assembly using Intel syntax opcodes instead of \s-1AT&T\s0 syntax.
5915 .Ip "\fB\-mieee-fp\fR" 4
5916 .IX Item "-mieee-fp"
5917 .PD 0
5918 .Ip "\fB\-mno-ieee-fp\fR" 4
5919 .IX Item "-mno-ieee-fp"
5920 .PD
5921 Control whether or not the compiler uses \s-1IEEE\s0 floating point
5922 comparisons.  These handle correctly the case where the result of a
5923 comparison is unordered.
5924 .Ip "\fB\-msoft-float\fR" 4
5925 .IX Item "-msoft-float"
5926 Generate output containing library calls for floating point.
5927 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
5928 Normally the facilities of the machine's usual C compiler are used, but
5929 this can't be done directly in cross-compilation.  You must make your
5930 own arrangements to provide suitable library functions for
5931 cross-compilation.
5932 .Sp
5933 On machines where a function returns floating point results in the 80387
5934 register stack, some floating point opcodes may be emitted even if
5935 \&\fB\-msoft-float\fR is used.
5936 .Ip "\fB\-mno-fp-ret-in-387\fR" 4
5937 .IX Item "-mno-fp-ret-in-387"
5938 Do not use the \s-1FPU\s0 registers for return values of functions.
5939 .Sp
5940 The usual calling convention has functions return values of types
5941 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
5942 is no \s-1FPU\s0.  The idea is that the operating system should emulate
5943 an \s-1FPU\s0.
5944 .Sp
5945 The option \fB\-mno-fp-ret-in-387\fR causes such values to be returned
5946 in ordinary \s-1CPU\s0 registers instead.
5947 .Ip "\fB\-mno-fancy-math-387\fR" 4
5948 .IX Item "-mno-fancy-math-387"
5949 Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
5950 \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
5951 generating those instructions. This option is the default on FreeBSD.
5952 As of revision 2.6.1, these instructions are not generated unless you
5953 also use the \fB\-funsafe-math-optimizations\fR switch.
5954 .Ip "\fB\-malign-double\fR" 4
5955 .IX Item "-malign-double"
5956 .PD 0
5957 .Ip "\fB\-mno-align-double\fR" 4
5958 .IX Item "-mno-align-double"
5959 .PD
5960 Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
5961 \&\f(CW\*(C`long long\*(C'\fR variables on a two word boundary or a one word
5962 boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two word boundary will
5963 produce code that runs somewhat faster on a \fBPentium\fR at the
5964 expense of more memory.
5965 .Ip "\fB\-m128bit-long-double\fR" 4
5966 .IX Item "-m128bit-long-double"
5967 .PD 0
5968 .Ip "\fB\-m128bit-long-double\fR" 4
5969 .IX Item "-m128bit-long-double"
5970 .PD
5971 Control the size of \f(CW\*(C`long double\*(C'\fR type. i386 application binary interface
5972 specify the size to be 12 bytes, while modern architectures (Pentium and newer)
5973 preffer \f(CW\*(C`long double\*(C'\fR aligned to 8 or 16 byte boundary.  This is
5974 impossible to reach with 12 byte long doubles in the array accesses.
5975 .Sp
5976 \&\fBWarning:\fR if you use the \fB\-m128bit-long-double\fR switch, the
5977 structures and arrays containing \f(CW\*(C`long double\*(C'\fR will change their size as
5978 well as function calling convention for function taking \f(CW\*(C`long double\*(C'\fR
5979 will be modified. 
5980 .Ip "\fB\-m96bit-long-double\fR" 4
5981 .IX Item "-m96bit-long-double"
5982 .PD 0
5983 .Ip "\fB\-m96bit-long-double\fR" 4
5984 .IX Item "-m96bit-long-double"
5985 .PD
5986 Set the size of \f(CW\*(C`long double\*(C'\fR to 96 bits as required by the i386
5987 application binary interface.  This is the default.
5988 .Ip "\fB\-msvr3\-shlib\fR" 4
5989 .IX Item "-msvr3-shlib"
5990 .PD 0
5991 .Ip "\fB\-mno-svr3\-shlib\fR" 4
5992 .IX Item "-mno-svr3-shlib"
5993 .PD
5994 Control whether \s-1GCC\s0 places uninitialized locals into \f(CW\*(C`bss\*(C'\fR or
5995 \&\f(CW\*(C`data\*(C'\fR.  \fB\-msvr3\-shlib\fR places these locals into \f(CW\*(C`bss\*(C'\fR.
5996 These options are meaningful only on System V Release 3.
5997 .Ip "\fB\-mno-wide-multiply\fR" 4
5998 .IX Item "-mno-wide-multiply"
5999 .PD 0
6000 .Ip "\fB\-mwide-multiply\fR" 4
6001 .IX Item "-mwide-multiply"
6002 .PD
6003 Control whether \s-1GCC\s0 uses the \f(CW\*(C`mul\*(C'\fR and \f(CW\*(C`imul\*(C'\fR that produce
6004 64 bit results in \f(CW\*(C`eax:edx\*(C'\fR from 32 bit operands to do \f(CW\*(C`long
6005 long\*(C'\fR multiplies and 32\-bit division by constants.
6006 .Ip "\fB\-mrtd\fR" 4
6007 .IX Item "-mrtd"
6008 Use a different function-calling convention, in which functions that
6009 take a fixed number of arguments return with the \f(CW\*(C`ret\*(C'\fR \fInum\fR
6010 instruction, which pops their arguments while returning.  This saves one
6011 instruction in the caller since there is no need to pop the arguments
6012 there.
6013 .Sp
6014 You can specify that an individual function is called with this calling
6015 sequence with the function attribute \fBstdcall\fR.  You can also
6016 override the \fB\-mrtd\fR option by using the function attribute
6017 \&\fBcdecl\fR.  
6018 .Sp
6019 \&\fBWarning:\fR this calling convention is incompatible with the one
6020 normally used on Unix, so you cannot use it if you need to call
6021 libraries compiled with the Unix compiler.
6022 .Sp
6023 Also, you must provide function prototypes for all functions that
6024 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
6025 otherwise incorrect code will be generated for calls to those
6026 functions.
6027 .Sp
6028 In addition, seriously incorrect code will result if you call a
6029 function with too many arguments.  (Normally, extra arguments are
6030 harmlessly ignored.)
6031 .Ip "\fB\-mregparm=\fR\fInum\fR" 4
6032 .IX Item "-mregparm=num"
6033 Control how many registers are used to pass integer arguments.  By
6034 default, no registers are used to pass arguments, and at most 3
6035 registers can be used.  You can control this behavior for a specific
6036 function by using the function attribute \fBregparm\fR.
6037 .Sp
6038 \&\fBWarning:\fR if you use this switch, and
6039 \&\fInum\fR is nonzero, then you must build all modules with the same
6040 value, including any libraries.  This includes the system libraries and
6041 startup modules.
6042 .Ip "\fB\-malign-loops=\fR\fInum\fR" 4
6043 .IX Item "-malign-loops=num"
6044 Align loops to a 2 raised to a \fInum\fR byte boundary.  If
6045 \&\fB\-malign-loops\fR is not specified, the default is 2 unless
6046 gas 2.8 (or later) is being used in which case the default is
6047 to align the loop on a 16 byte boundary if it is less than 8
6048 bytes away.
6049 .Ip "\fB\-malign-jumps=\fR\fInum\fR" 4
6050 .IX Item "-malign-jumps=num"
6051 Align instructions that are only jumped to to a 2 raised to a \fInum\fR
6052 byte boundary.  If \fB\-malign-jumps\fR is not specified, the default is
6053 2 if optimizing for a 386, and 4 if optimizing for a 486 unless
6054 gas 2.8 (or later) is being used in which case the default is
6055 to align the instruction on a 16 byte boundary if it is less
6056 than 8 bytes away.
6057 .Ip "\fB\-malign-functions=\fR\fInum\fR" 4
6058 .IX Item "-malign-functions=num"
6059 Align the start of functions to a 2 raised to \fInum\fR byte boundary.
6060 If \fB\-malign-functions\fR is not specified, the default is 2 if optimizing
6061 for a 386, and 4 if optimizing for a 486.
6062 .Ip "\fB\-mpreferred-stack-boundary=\fR\fInum\fR" 4
6063 .IX Item "-mpreferred-stack-boundary=num"
6064 Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
6065 byte boundary.  If \fB\-mpreferred-stack-boundary\fR is not specified,
6066 the default is 4 (16 bytes or 128 bits).
6067 .Sp
6068 The stack is required to be aligned on a 4 byte boundary.  On Pentium
6069 and PentiumPro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values should be
6070 aligned to an 8 byte boundary (see \fB\-malign-double\fR) or suffer
6071 significant run time performance penalties.  On Pentium \s-1III\s0, the
6072 Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR suffers similar
6073 penalties if it is not 16 byte aligned.
6074 .Sp
6075 To ensure proper alignment of this values on the stack, the stack boundary
6076 must be as aligned as that required by any value stored on the stack. 
6077 Further, every function must be generated such that it keeps the stack
6078 aligned.  Thus calling a function compiled with a higher preferred
6079 stack boundary from a function compiled with a lower preferred stack
6080 boundary will most likely misalign the stack.  It is recommended that
6081 libraries that use callbacks always use the default setting.
6082 .Sp
6083 This extra alignment does consume extra stack space.  Code that is sensitive
6084 to stack space usage, such as embedded systems and operating system kernels,
6085 may want to reduce the preferred alignment to
6086 \&\fB\-mpreferred-stack-boundary=2\fR.
6087 .Ip "\fB\-mpush-args\fR" 4
6088 .IX Item "-mpush-args"
6089 Use \s-1PUSH\s0 operations to store outgoing parameters. This method is shorter
6090 and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
6091 by default. In some cases disabling it may improve performance because of
6092 improved scheduling and reduced dependencies.
6093 .Ip "\fB\-maccumulate-outgoing-args\fR" 4
6094 .IX Item "-maccumulate-outgoing-args"
6095 If enabled, the maximum amount of space required for outgoing arguments will be
6096 computed in the function prologue. This in faster on most modern CPUs
6097 because of reduced dependencies, improved scheduling and reduced stack usage
6098 when preferred stack boundary is not equal to 2.  The drawback is a notable
6099 increase in code size. This switch implies \-mno-push-args.
6100 .Ip "\fB\-mthreads\fR" 4
6101 .IX Item "-mthreads"
6102 Support thread-safe exception handling on \fBMingw32\fR. Code that relies 
6103 on thread-safe exception handling must compile and link all code with the 
6104 \&\fB\-mthreads\fR option. When compiling, \fB\-mthreads\fR defines 
6105 \&\fB\-D_MT\fR; when linking, it links in a special thread helper library 
6106 \&\fB\-lmingwthrd\fR which cleans up per thread exception handling data.
6107 .Ip "\fB\-mno-align-stringops\fR" 4
6108 .IX Item "-mno-align-stringops"
6109 Do not align destination of inlined string operations. This switch reduces
6110 code size and improves performance in case the destination is already aligned,
6111 but gcc don't know about it.
6112 .Ip "\fB\-minline-all-stringops\fR" 4
6113 .IX Item "-minline-all-stringops"
6114 By default \s-1GCC\s0 inlines string operations only when destination is known to be
6115 aligned at least to 4 byte boundary. This enables more inlining, increase code
6116 size, but may improve performance of code that depends on fast memcpy, strlen
6117 and memset for short lengths.
6118 .PP
6119 .I "\s-1HPPA\s0 Options"
6120 .IX Subsection "HPPA Options"
6121 .PP
6122 These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
6123 .Ip "\fB\-march=\fR\fIarchitecture type\fR" 4
6124 .IX Item "-march=architecture type"
6125 Generate code for the specified architecture.  The choices for
6126 \&\fIarchitecture type\fR are \fB1.0\fR for \s-1PA\s0 1.0, \fB1.1\fR for \s-1PA\s0
6127 1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors.  Refer to
6128 \&\fI/usr/lib/sched.models\fR on an \s-1HP-UX\s0 system to determine the proper
6129 architecture option for your machine.  Code compiled for lower numbered
6130 architectures will run on higher numbered architectures, but not the
6131 other way around.
6132 .Sp
6133 \&\s-1PA\s0 2.0 support currently requires gas snapshot 19990413 or later.  The
6134 next release of binutils (current is 2.9.1) will probably contain \s-1PA\s0 2.0
6135 support.  
6136 .Ip "\fB\-mpa-risc-1\-0\fR" 4
6137 .IX Item "-mpa-risc-1-0"
6138 .PD 0
6139 .Ip "\fB\-mpa-risc-1\-1\fR" 4
6140 .IX Item "-mpa-risc-1-1"
6141 .Ip "\fB\-mpa-risc-2\-0\fR" 4
6142 .IX Item "-mpa-risc-2-0"
6143 .PD
6144 Synonyms for \-march=1.0, \-march=1.1, and \-march=2.0 respectively.
6145 .Ip "\fB\-mbig-switch\fR" 4
6146 .IX Item "-mbig-switch"
6147 Generate code suitable for big switch tables.  Use this option only if
6148 the assembler/linker complain about out of range branches within a switch
6149 table.
6150 .Ip "\fB\-mjump-in-delay\fR" 4
6151 .IX Item "-mjump-in-delay"
6152 Fill delay slots of function calls with unconditional jump instructions
6153 by modifying the return pointer for the function call to be the target
6154 of the conditional jump.
6155 .Ip "\fB\-mdisable-fpregs\fR" 4
6156 .IX Item "-mdisable-fpregs"
6157 Prevent floating point registers from being used in any manner.  This is
6158 necessary for compiling kernels which perform lazy context switching of
6159 floating point registers.  If you use this option and attempt to perform
6160 floating point operations, the compiler will abort.
6161 .Ip "\fB\-mdisable-indexing\fR" 4
6162 .IX Item "-mdisable-indexing"
6163 Prevent the compiler from using indexing address modes.  This avoids some
6164 rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH\s0.
6165 .Ip "\fB\-mno-space-regs\fR" 4
6166 .IX Item "-mno-space-regs"
6167 Generate code that assumes the target has no space registers.  This allows
6168 \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
6169 .Sp
6170 Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
6171 .Ip "\fB\-mfast-indirect-calls\fR" 4
6172 .IX Item "-mfast-indirect-calls"
6173 Generate code that assumes calls never cross space boundaries.  This
6174 allows \s-1GCC\s0 to emit code which performs faster indirect calls.
6175 .Sp
6176 This option will not work in the presence of shared libraries or nested
6177 functions.
6178 .Ip "\fB\-mlong-load-store\fR" 4
6179 .IX Item "-mlong-load-store"
6180 Generate 3\-instruction load and store sequences as sometimes required by
6181 the \s-1HP-UX\s0 10 linker.  This is equivalent to the \fB+k\fR option to
6182 the \s-1HP\s0 compilers.
6183 .Ip "\fB\-mportable-runtime\fR" 4
6184 .IX Item "-mportable-runtime"
6185 Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
6186 .Ip "\fB\-mgas\fR" 4
6187 .IX Item "-mgas"
6188 Enable the use of assembler directives only \s-1GAS\s0 understands.
6189 .Ip "\fB\-mschedule=\fR\fIcpu type\fR" 4
6190 .IX Item "-mschedule=cpu type"
6191 Schedule code according to the constraints for the machine type
6192 \&\fIcpu type\fR.  The choices for \fIcpu type\fR are \fB700\fR 
6193 \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, and \fB8000\fR.  Refer to 
6194 \&\fI/usr/lib/sched.models\fR on an \s-1HP-UX\s0 system to determine the
6195 proper scheduling option for your machine.
6196 .Ip "\fB\-mlinker-opt\fR" 4
6197 .IX Item "-mlinker-opt"
6198 Enable the optimization pass in the \s-1HPUX\s0 linker.  Note this makes symbolic
6199 debugging impossible.  It also triggers a bug in the \s-1HPUX\s0 8 and \s-1HPUX\s0 9 linkers
6200 in which they give bogus error messages when linking some programs.
6201 .Ip "\fB\-msoft-float\fR" 4
6202 .IX Item "-msoft-float"
6203 Generate output containing library calls for floating point.
6204 \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
6205 targets.  Normally the facilities of the machine's usual C compiler are
6206 used, but this cannot be done directly in cross-compilation.  You must make
6207 your own arrangements to provide suitable library functions for
6208 cross-compilation.  The embedded target \fBhppa1.1\-*\-pro\fR
6209 does provide software floating point support.
6210 .Sp
6211 \&\fB\-msoft-float\fR changes the calling convention in the output file;
6212 therefore, it is only useful if you compile \fIall\fR of a program with
6213 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
6214 library that comes with \s-1GCC\s0, with \fB\-msoft-float\fR in order for
6215 this to work.
6216 .PP
6217 .I "Intel 960 Options"
6218 .IX Subsection "Intel 960 Options"
6219 .PP
6220 These \fB\-m\fR options are defined for the Intel 960 implementations:
6221 .Ip "\fB\-m\fR\fIcpu type\fR" 4
6222 .IX Item "-mcpu type"
6223 Assume the defaults for the machine type \fIcpu type\fR for some of
6224 the other options, including instruction scheduling, floating point
6225 support, and addressing modes.  The choices for \fIcpu type\fR are
6226 \&\fBka\fR, \fBkb\fR, \fBmc\fR, \fBca\fR, \fBcf\fR,
6227 \&\fBsa\fR, and \fBsb\fR.
6228 The default is
6229 \&\fBkb\fR.
6230 .Ip "\fB\-mnumerics\fR" 4
6231 .IX Item "-mnumerics"
6232 .PD 0
6233 .Ip "\fB\-msoft-float\fR" 4
6234 .IX Item "-msoft-float"
6235 .PD
6236 The \fB\-mnumerics\fR option indicates that the processor does support
6237 floating-point instructions.  The \fB\-msoft-float\fR option indicates
6238 that floating-point support should not be assumed.
6239 .Ip "\fB\-mleaf-procedures\fR" 4
6240 .IX Item "-mleaf-procedures"
6241 .PD 0
6242 .Ip "\fB\-mno-leaf-procedures\fR" 4
6243 .IX Item "-mno-leaf-procedures"
6244 .PD
6245 Do (or do not) attempt to alter leaf procedures to be callable with the
6246 \&\f(CW\*(C`bal\*(C'\fR instruction as well as \f(CW\*(C`call\*(C'\fR.  This will result in more
6247 efficient code for explicit calls when the \f(CW\*(C`bal\*(C'\fR instruction can be
6248 substituted by the assembler or linker, but less efficient code in other
6249 cases, such as calls via function pointers, or using a linker that doesn't
6250 support this optimization.
6251 .Ip "\fB\-mtail-call\fR" 4
6252 .IX Item "-mtail-call"
6253 .PD 0
6254 .Ip "\fB\-mno-tail-call\fR" 4
6255 .IX Item "-mno-tail-call"
6256 .PD
6257 Do (or do not) make additional attempts (beyond those of the
6258 machine-independent portions of the compiler) to optimize tail-recursive
6259 calls into branches.  You may not want to do this because the detection of
6260 cases where this is not valid is not totally complete.  The default is
6261 \&\fB\-mno-tail-call\fR.
6262 .Ip "\fB\-mcomplex-addr\fR" 4
6263 .IX Item "-mcomplex-addr"
6264 .PD 0
6265 .Ip "\fB\-mno-complex-addr\fR" 4
6266 .IX Item "-mno-complex-addr"
6267 .PD
6268 Assume (or do not assume) that the use of a complex addressing mode is a
6269 win on this implementation of the i960.  Complex addressing modes may not
6270 be worthwhile on the K-series, but they definitely are on the C-series.
6271 The default is currently \fB\-mcomplex-addr\fR for all processors except
6272 the \s-1CB\s0 and \s-1CC\s0.
6273 .Ip "\fB\-mcode-align\fR" 4
6274 .IX Item "-mcode-align"
6275 .PD 0
6276 .Ip "\fB\-mno-code-align\fR" 4
6277 .IX Item "-mno-code-align"
6278 .PD
6279 Align code to 8\-byte boundaries for faster fetching (or don't bother).
6280 Currently turned on by default for C-series implementations only.
6281 .Ip "\fB\-mic-compat\fR" 4
6282 .IX Item "-mic-compat"
6283 .PD 0
6284 .Ip "\fB\-mic2.0\-compat\fR" 4
6285 .IX Item "-mic2.0-compat"
6286 .Ip "\fB\-mic3.0\-compat\fR" 4
6287 .IX Item "-mic3.0-compat"
6288 .PD
6289 Enable compatibility with iC960 v2.0 or v3.0.
6290 .Ip "\fB\-masm-compat\fR" 4
6291 .IX Item "-masm-compat"
6292 .PD 0
6293 .Ip "\fB\-mintel-asm\fR" 4
6294 .IX Item "-mintel-asm"
6295 .PD
6296 Enable compatibility with the iC960 assembler.
6297 .Ip "\fB\-mstrict-align\fR" 4
6298 .IX Item "-mstrict-align"
6299 .PD 0
6300 .Ip "\fB\-mno-strict-align\fR" 4
6301 .IX Item "-mno-strict-align"
6302 .PD
6303 Do not permit (do permit) unaligned accesses.
6304 .Ip "\fB\-mold-align\fR" 4
6305 .IX Item "-mold-align"
6306 Enable structure-alignment compatibility with Intel's gcc release version
6307 1.3 (based on gcc 1.37).  This option implies \fB\-mstrict-align\fR.
6308 .Ip "\fB\-mlong-double-64\fR" 4
6309 .IX Item "-mlong-double-64"
6310 Implement type \fBlong double\fR as 64\-bit floating point numbers.
6311 Without the option \fBlong double\fR is implemented by 80\-bit
6312 floating point numbers.  The only reason we have it because there is
6313 no 128\-bit \fBlong double\fR support in \fBfp-bit.c\fR yet.  So it
6314 is only useful for people using soft-float targets.  Otherwise, we
6315 should recommend against use of it.
6316 .PP
6317 .I "\s-1DEC\s0 Alpha Options"
6318 .IX Subsection "DEC Alpha Options"
6319 .PP
6320 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
6321 .Ip "\fB\-mno-soft-float\fR" 4
6322 .IX Item "-mno-soft-float"
6323 .PD 0
6324 .Ip "\fB\-msoft-float\fR" 4
6325 .IX Item "-msoft-float"
6326 .PD
6327 Use (do not use) the hardware floating-point instructions for
6328 floating-point operations.  When \fB\-msoft-float\fR is specified,
6329 functions in \fIlibgcc1.c\fR will be used to perform floating-point
6330 operations.  Unless they are replaced by routines that emulate the
6331 floating-point operations, or compiled in such a way as to call such
6332 emulations routines, these routines will issue floating-point
6333 operations.   If you are compiling for an Alpha without floating-point
6334 operations, you must ensure that the library is built so as not to call
6335 them.
6336 .Sp
6337 Note that Alpha implementations without floating-point operations are
6338 required to have floating-point registers.
6339 .Ip "\fB\-mfp-reg\fR" 4
6340 .IX Item "-mfp-reg"
6341 .PD 0
6342 .Ip "\fB\-mno-fp-regs\fR" 4
6343 .IX Item "-mno-fp-regs"
6344 .PD
6345 Generate code that uses (does not use) the floating-point register set.
6346 \&\fB\-mno-fp-regs\fR implies \fB\-msoft-float\fR.  If the floating-point
6347 register set is not used, floating point operands are passed in integer
6348 registers as if they were integers and floating-point results are passed
6349 in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence, so any
6350 function with a floating-point argument or return value called by code
6351 compiled with \fB\-mno-fp-regs\fR must also be compiled with that
6352 option.
6353 .Sp
6354 A typical use of this option is building a kernel that does not use,
6355 and hence need not save and restore, any floating-point registers.
6356 .Ip "\fB\-mieee\fR" 4
6357 .IX Item "-mieee"
6358 The Alpha architecture implements floating-point hardware optimized for
6359 maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating
6360 point standard.  However, for full compliance, software assistance is
6361 required.  This option generates code fully \s-1IEEE\s0 compliant code
6362 \&\fIexcept\fR that the \fIinexact flag\fR is not maintained (see below).
6363 If this option is turned on, the \s-1CPP\s0 macro \f(CW\*(C`_IEEE_FP\*(C'\fR is defined
6364 during compilation.  The option is a shorthand for: \fB\-D_IEEE_FP
6365 \&\-mfp-trap-mode=su \-mtrap-precision=i \-mieee-conformant\fR.  The resulting
6366 code is less efficient but is able to correctly support denormalized
6367 numbers and exceptional \s-1IEEE\s0 values such as not-a-number and plus/minus
6368 infinity.  Other Alpha compilers call this option
6369 \&\fB\-ieee_with_no_inexact\fR.
6370 .Ip "\fB\-mieee-with-inexact\fR" 4
6371 .IX Item "-mieee-with-inexact"
6372 This is like \fB\-mieee\fR except the generated code also maintains the
6373 \&\s-1IEEE\s0 \fIinexact flag\fR.  Turning on this option causes the generated
6374 code to implement fully-compliant \s-1IEEE\s0 math.  The option is a shorthand
6375 for \fB\-D_IEEE_FP \-D_IEEE_FP_INEXACT\fR plus the three following:
6376 \&\fB\-mieee-conformant\fR,
6377 \&\fB\-mfp-trap-mode=sui\fR, 
6378 and \fB\-mtrap-precision=i\fR.  
6379 On some Alpha implementations the resulting code may execute
6380 significantly slower than the code generated by default.  Since there
6381 is very little code that depends on the \fIinexact flag\fR, you should
6382 normally not specify this option.  Other Alpha compilers call this
6383 option \fB\-ieee_with_inexact\fR.
6384 .Ip "\fB\-mfp-trap-mode=\fR\fItrap mode\fR" 4
6385 .IX Item "-mfp-trap-mode=trap mode"
6386 This option controls what floating-point related traps are enabled.
6387 Other Alpha compilers call this option \fB\-fptm\fR \fItrap mode\fR.
6388 The trap mode can be set to one of four values:
6389 .RS 4
6390 .Ip "\fBn\fR" 4
6391 .IX Item "n"
6392 This is the default (normal) setting.  The only traps that are enabled
6393 are the ones that cannot be disabled in software (e.g., division by zero
6394 trap).
6395 .Ip "\fBu\fR" 4
6396 .IX Item "u"
6397 In addition to the traps enabled by \fBn\fR, underflow traps are enabled
6398 as well.
6399 .Ip "\fBsu\fR" 4
6400 .IX Item "su"
6401 Like \fBsu\fR, but the instructions are marked to be safe for software
6402 completion (see Alpha architecture manual for details).
6403 .Ip "\fBsui\fR" 4
6404 .IX Item "sui"
6405 Like \fBsu\fR, but inexact traps are enabled as well.
6406 .RE
6407 .RS 4
6408 .RE
6409 .Ip "\fB\-mfp-rounding-mode=\fR\fIrounding mode\fR" 4
6410 .IX Item "-mfp-rounding-mode=rounding mode"
6411 Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
6412 \&\fB\-fprm\fR \fIrounding mode\fR.  The \fIrounding mode\fR can be one
6413 of:
6414 .RS 4
6415 .Ip "\fBn\fR" 4
6416 .IX Item "n"
6417 Normal \s-1IEEE\s0 rounding mode.  Floating point numbers are rounded towards
6418 the nearest machine number or towards the even machine number in case
6419 of a tie.
6420 .Ip "\fBm\fR" 4
6421 .IX Item "m"
6422 Round towards minus infinity.
6423 .Ip "\fBc\fR" 4
6424 .IX Item "c"
6425 Chopped rounding mode.  Floating point numbers are rounded towards zero.
6426 .Ip "\fBd\fR" 4
6427 .IX Item "d"
6428 Dynamic rounding mode.  A field in the floating point control register
6429 (\fIfpcr\fR, see Alpha architecture reference manual) controls the
6430 rounding mode in effect.  The C library initializes this register for
6431 rounding towards plus infinity.  Thus, unless your program modifies the
6432 \&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
6433 .RE
6434 .RS 4
6435 .RE
6436 .Ip "\fB\-mtrap-precision=\fR\fItrap precision\fR" 4
6437 .IX Item "-mtrap-precision=trap precision"
6438 In the Alpha architecture, floating point traps are imprecise.  This
6439 means without software assistance it is impossible to recover from a
6440 floating trap and program execution normally needs to be terminated.
6441 \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
6442 in determining the exact location that caused a floating point trap.
6443 Depending on the requirements of an application, different levels of
6444 precisions can be selected:
6445 .RS 4
6446 .Ip "\fBp\fR" 4
6447 .IX Item "p"
6448 Program precision.  This option is the default and means a trap handler
6449 can only identify which program caused a floating point exception.
6450 .Ip "\fBf\fR" 4
6451 .IX Item "f"
6452 Function precision.  The trap handler can determine the function that
6453 caused a floating point exception.
6454 .Ip "\fBi\fR" 4
6455 .IX Item "i"
6456 Instruction precision.  The trap handler can determine the exact
6457 instruction that caused a floating point exception.
6458 .RE
6459 .RS 4
6460 .Sp
6461 Other Alpha compilers provide the equivalent options called
6462 \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
6463 .RE
6464 .Ip "\fB\-mieee-conformant\fR" 4
6465 .IX Item "-mieee-conformant"
6466 This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
6467 use this option unless you also specify \fB\-mtrap-precision=i\fR and either
6468 \&\fB\-mfp-trap-mode=su\fR or \fB\-mfp-trap-mode=sui\fR.  Its only effect
6469 is to emit the line \fB.eflag 48\fR in the function prologue of the
6470 generated assembly file.  Under \s-1DEC\s0 Unix, this has the effect that
6471 IEEE-conformant math library routines will be linked in.
6472 .Ip "\fB\-mbuild-constants\fR" 4
6473 .IX Item "-mbuild-constants"
6474 Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
6475 see if it can construct it from smaller constants in two or three
6476 instructions.  If it cannot, it will output the constant as a literal and
6477 generate code to load it from the data segment at runtime.
6478 .Sp
6479 Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
6480 using code, even if it takes more instructions (the maximum is six).
6481 .Sp
6482 You would typically use this option to build a shared library dynamic
6483 loader.  Itself a shared library, it must relocate itself in memory
6484 before it can find the variables and constants in its own data segment.
6485 .Ip "\fB\-malpha-as\fR" 4
6486 .IX Item "-malpha-as"
6487 .PD 0
6488 .Ip "\fB\-mgas\fR" 4
6489 .IX Item "-mgas"
6490 .PD
6491 Select whether to generate code to be assembled by the vendor-supplied
6492 assembler (\fB\-malpha-as\fR) or by the \s-1GNU\s0 assembler \fB\-mgas\fR.
6493 .Ip "\fB\-mbwx\fR" 4
6494 .IX Item "-mbwx"
6495 .PD 0
6496 .Ip "\fB\-mno-bwx\fR" 4
6497 .IX Item "-mno-bwx"
6498 .Ip "\fB\-mcix\fR" 4
6499 .IX Item "-mcix"
6500 .Ip "\fB\-mno-cix\fR" 4
6501 .IX Item "-mno-cix"
6502 .Ip "\fB\-mmax\fR" 4
6503 .IX Item "-mmax"
6504 .Ip "\fB\-mno-max\fR" 4
6505 .IX Item "-mno-max"
6506 .PD
6507 Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX\s0,
6508 \&\s-1CIX\s0, and \s-1MAX\s0 instruction sets.  The default is to use the instruction sets
6509 supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
6510 of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none was specified.
6511 .Ip "\fB\-mcpu=\fR\fIcpu_type\fR" 4
6512 .IX Item "-mcpu=cpu_type"
6513 Set the instruction set, register set, and instruction scheduling
6514 parameters for machine type \fIcpu_type\fR.  You can specify either the
6515 \&\fB\s-1EV\s0\fR style name or the corresponding chip number.  \s-1GCC\s0
6516 supports scheduling parameters for the \s-1EV4\s0 and \s-1EV5\s0 family of processors
6517 and will choose the default values for the instruction set from
6518 the processor you specify.  If you do not specify a processor type,
6519 \&\s-1GCC\s0 will default to the processor on which the compiler was built.
6520 .Sp
6521 Supported values for \fIcpu_type\fR are
6522 .RS 4
6523 .Ip "\fBev4\fR" 4
6524 .IX Item "ev4"
6525 .PD 0
6526 .Ip "\fB21064\fR" 4
6527 .IX Item "21064"
6528 .PD
6529 Schedules as an \s-1EV4\s0 and has no instruction set extensions.
6530 .Ip "\fBev5\fR" 4
6531 .IX Item "ev5"
6532 .PD 0
6533 .Ip "\fB21164\fR" 4
6534 .IX Item "21164"
6535 .PD
6536 Schedules as an \s-1EV5\s0 and has no instruction set extensions.
6537 .Ip "\fBev56\fR" 4
6538 .IX Item "ev56"
6539 .PD 0
6540 .Ip "\fB21164a\fR" 4
6541 .IX Item "21164a"
6542 .PD
6543 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
6544 .Ip "\fBpca56\fR" 4
6545 .IX Item "pca56"
6546 .PD 0
6547 .Ip "\fB21164pc\fR" 4
6548 .IX Item "21164pc"
6549 .Ip "\fB21164PC\fR" 4
6550 .IX Item "21164PC"
6551 .PD
6552 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
6553 .Ip "\fBev6\fR" 4
6554 .IX Item "ev6"
6555 .PD 0
6556 .Ip "\fB21264\fR" 4
6557 .IX Item "21264"
6558 .PD
6559 Schedules as an \s-1EV5\s0 (until Digital releases the scheduling parameters
6560 for the \s-1EV6\s0) and supports the \s-1BWX\s0, \s-1CIX\s0, and \s-1MAX\s0 extensions.
6561 .RE
6562 .RS 4
6563 .RE
6564 .Ip "\fB\-mmemory-latency=\fR\fItime\fR" 4
6565 .IX Item "-mmemory-latency=time"
6566 Sets the latency the scheduler should assume for typical memory
6567 references as seen by the application.  This number is highly
6568 dependent on the memory access patterns used by the application
6569 and the size of the external cache on the machine.
6570 .Sp
6571 Valid options for \fItime\fR are
6572 .RS 4
6573 .Ip "\fInumber\fR" 4
6574 .IX Item "number"
6575 A decimal number representing clock cycles.
6576 .Ip "\fBL1\fR" 4
6577 .IX Item "L1"
6578 .PD 0
6579 .Ip "\fBL2\fR" 4
6580 .IX Item "L2"
6581 .Ip "\fBL3\fR" 4
6582 .IX Item "L3"
6583 .Ip "\fBmain\fR" 4
6584 .IX Item "main"
6585 .PD
6586 The compiler contains estimates of the number of clock cycles for
6587 ``typical'' \s-1EV4\s0 & \s-1EV5\s0 hardware for the Level 1, 2 & 3 caches
6588 (also called Dcache, Scache, and Bcache), as well as to main memory.
6589 Note that L3 is only valid for \s-1EV5\s0.
6590 .RE
6591 .RS 4
6592 .RE
6593 .PP
6594 .I "Clipper Options"
6595 .IX Subsection "Clipper Options"
6596 .PP
6597 These \fB\-m\fR options are defined for the Clipper implementations:
6598 .Ip "\fB\-mc300\fR" 4
6599 .IX Item "-mc300"
6600 Produce code for a C300 Clipper processor. This is the default.
6601 .Ip "\fB\-mc400\fR" 4
6602 .IX Item "-mc400"
6603 Produce code for a C400 Clipper processor i.e. use floating point
6604 registers f8..f15.
6605 .PP
6606 .I "H8/300 Options"
6607 .IX Subsection "H8/300 Options"
6608 .PP
6609 These \fB\-m\fR options are defined for the H8/300 implementations:
6610 .Ip "\fB\-mrelax\fR" 4
6611 .IX Item "-mrelax"
6612 Shorten some address references at link time, when possible; uses the
6613 linker option \fB\-relax\fR.  
6614 .Ip "\fB\-mh\fR" 4
6615 .IX Item "-mh"
6616 Generate code for the H8/300H.
6617 .Ip "\fB\-ms\fR" 4
6618 .IX Item "-ms"
6619 Generate code for the H8/S.
6620 .Ip "\fB\-ms2600\fR" 4
6621 .IX Item "-ms2600"
6622 Generate code for the H8/S2600.  This switch must be used with \-ms.
6623 .Ip "\fB\-mint32\fR" 4
6624 .IX Item "-mint32"
6625 Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
6626 .Ip "\fB\-malign-300\fR" 4
6627 .IX Item "-malign-300"
6628 On the H8/300H and H8/S, use the same alignment rules as for the H8/300.
6629 The default for the H8/300H and H8/S is to align longs and floats on 4
6630 byte boundaries.
6631 \&\fB\-malign-300\fR causes them to be aligned on 2 byte boundaries.
6632 This option has no effect on the H8/300.
6633 .PP
6634 .I "\s-1SH\s0 Options"
6635 .IX Subsection "SH Options"
6636 .PP
6637 These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
6638 .Ip "\fB\-m1\fR" 4
6639 .IX Item "-m1"
6640 Generate code for the \s-1SH1\s0.
6641 .Ip "\fB\-m2\fR" 4
6642 .IX Item "-m2"
6643 Generate code for the \s-1SH2\s0.
6644 .Ip "\fB\-m3\fR" 4
6645 .IX Item "-m3"
6646 Generate code for the \s-1SH3\s0.
6647 .Ip "\fB\-m3e\fR" 4
6648 .IX Item "-m3e"
6649 Generate code for the SH3e.
6650 .Ip "\fB\-m4\-nofpu\fR" 4
6651 .IX Item "-m4-nofpu"
6652 Generate code for the \s-1SH4\s0 without a floating-point unit.
6653 .Ip "\fB\-m4\-single-only\fR" 4
6654 .IX Item "-m4-single-only"
6655 Generate code for the \s-1SH4\s0 with a floating-point unit that only
6656 supports single-precision arithmentic.
6657 .Ip "\fB\-m4\-single\fR" 4
6658 .IX Item "-m4-single"
6659 Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
6660 single-precision mode by default.
6661 .Ip "\fB\-m4\fR" 4
6662 .IX Item "-m4"
6663 Generate code for the \s-1SH4\s0.
6664 .Ip "\fB\-mb\fR" 4
6665 .IX Item "-mb"
6666 Compile code for the processor in big endian mode.
6667 .Ip "\fB\-ml\fR" 4
6668 .IX Item "-ml"
6669 Compile code for the processor in little endian mode.
6670 .Ip "\fB\-mdalign\fR" 4
6671 .IX Item "-mdalign"
6672 Align doubles at 64 bit boundaries.  Note that this changes the calling
6673 conventions, and thus some functions from the standard C library will
6674 not work unless you recompile it first with \-mdalign.
6675 .Ip "\fB\-mrelax\fR" 4
6676 .IX Item "-mrelax"
6677 Shorten some address references at link time, when possible; uses the
6678 linker option \fB\-relax\fR.
6679 .Ip "\fB\-mbigtable\fR" 4
6680 .IX Item "-mbigtable"
6681 Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
6682 16\-bit offsets.
6683 .Ip "\fB\-mfmovd\fR" 4
6684 .IX Item "-mfmovd"
6685 Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.
6686 .Ip "\fB\-mhitachi\fR" 4
6687 .IX Item "-mhitachi"
6688 Comply with the calling conventions defined by Hitachi.
6689 .Ip "\fB\-mnomacsave\fR" 4
6690 .IX Item "-mnomacsave"
6691 Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
6692 \&\fB\-mhitachi\fR is given.
6693 .Ip "\fB\-misize\fR" 4
6694 .IX Item "-misize"
6695 Dump instruction size and location in the assembly code.
6696 .Ip "\fB\-mpadstruct\fR" 4
6697 .IX Item "-mpadstruct"
6698 This option is deprecated.  It pads structures to multiple of 4 bytes,
6699 which is incompatible with the \s-1SH\s0 \s-1ABI\s0.
6700 .Ip "\fB\-mspace\fR" 4
6701 .IX Item "-mspace"
6702 Optimize for space instead of speed.  Implied by \fB\-Os\fR.
6703 .Ip "\fB\-mprefergot\fR" 4
6704 .IX Item "-mprefergot"
6705 When generating position-independent code, emit function calls using
6706 the Global Offset Table instead of the Procedure Linkage Table.
6707 .Ip "\fB\-musermode\fR" 4
6708 .IX Item "-musermode"
6709 Generate a library function call to invalidate instruction cache
6710 entries, after fixing up a trampoline.  This library function call
6711 doesn't assume it can write to the whole memory address space.  This
6712 is the default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
6713 .PP
6714 .I "Options for System V"
6715 .IX Subsection "Options for System V"
6716 .PP
6717 These additional options are available on System V Release 4 for
6718 compatibility with other compilers on those systems:
6719 .Ip "\fB\-G\fR" 4
6720 .IX Item "-G"
6721 Create a shared object.
6722 It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
6723 .Ip "\fB\-Qy\fR" 4
6724 .IX Item "-Qy"
6725 Identify the versions of each tool used by the compiler, in a
6726 \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
6727 .Ip "\fB\-Qn\fR" 4
6728 .IX Item "-Qn"
6729 Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
6730 the default).
6731 .Ip "\fB\-YP,\fR\fIdirs\fR" 4
6732 .IX Item "-YP,dirs"
6733 Search the directories \fIdirs\fR, and no others, for libraries
6734 specified with \fB\-l\fR.
6735 .Ip "\fB\-Ym,\fR\fIdir\fR" 4
6736 .IX Item "-Ym,dir"
6737 Look in the directory \fIdir\fR to find the M4 preprocessor.
6738 The assembler uses this option.
6739 .PP
6740 .I "TMS320C3x/C4x Options"
6741 .IX Subsection "TMS320C3x/C4x Options"
6742 .PP
6743 These \fB\-m\fR options are defined for TMS320C3x/C4x implementations:
6744 .Ip "\fB\-mcpu=\fR\fIcpu_type\fR" 4
6745 .IX Item "-mcpu=cpu_type"
6746 Set the instruction set, register set, and instruction scheduling
6747 parameters for machine type \fIcpu_type\fR.  Supported values for
6748 \&\fIcpu_type\fR are \fBc30\fR, \fBc31\fR, \fBc32\fR, \fBc40\fR, and
6749 \&\fBc44\fR.  The default is \fBc40\fR to generate code for the
6750 \&\s-1TMS320C40\s0.
6751 .Ip "\fB\-mbig-memory\fR" 4
6752 .IX Item "-mbig-memory"
6753 .PD 0
6754 .Ip "\fB\-mbig\fR" 4
6755 .IX Item "-mbig"
6756 .Ip "\fB\-msmall-memory\fR" 4
6757 .IX Item "-msmall-memory"
6758 .Ip "\fB\-msmall\fR" 4
6759 .IX Item "-msmall"
6760 .PD
6761 Generates code for the big or small memory model.  The small memory
6762 model assumed that all data fits into one 64K word page.  At run-time
6763 the data page (\s-1DP\s0) register must be set to point to the 64K page
6764 containing the .bss and .data program sections.  The big memory model is
6765 the default and requires reloading of the \s-1DP\s0 register for every direct
6766 memory access.
6767 .Ip "\fB\-mbk\fR" 4
6768 .IX Item "-mbk"
6769 .PD 0
6770 .Ip "\fB\-mno-bk\fR" 4
6771 .IX Item "-mno-bk"
6772 .PD
6773 Allow (disallow) allocation of general integer operands into the block
6774 count register \s-1BK\s0. 
6775 .Ip "\fB\-mdb\fR" 4
6776 .IX Item "-mdb"
6777 .PD 0
6778 .Ip "\fB\-mno-db\fR" 4
6779 .IX Item "-mno-db"
6780 .PD
6781 Enable (disable) generation of code using decrement and branch,
6782 \&\fIDBcond\fR\|(D), instructions.  This is enabled by default for the C4x.  To be
6783 on the safe side, this is disabled for the C3x, since the maximum
6784 iteration count on the C3x is 2^23 + 1 (but who iterates loops more than
6785 2^23 times on the C3x?).  Note that \s-1GCC\s0 will try to reverse a loop so
6786 that it can utilise the decrement and branch instruction, but will give
6787 up if there is more than one memory reference in the loop.  Thus a loop
6788 where the loop counter is decremented can generate slightly more
6789 efficient code, in cases where the \s-1RPTB\s0 instruction cannot be utilised.
6790 .Ip "\fB\-mdp-isr-reload\fR" 4
6791 .IX Item "-mdp-isr-reload"
6792 .PD 0
6793 .Ip "\fB\-mparanoid\fR" 4
6794 .IX Item "-mparanoid"
6795 .PD
6796 Force the \s-1DP\s0 register to be saved on entry to an interrupt service
6797 routine (\s-1ISR\s0), reloaded to point to the data section, and restored on
6798 exit from the \s-1ISR\s0.  This should not be required unless someone has
6799 violated the small memory model by modifying the \s-1DP\s0 register, say within
6800 an object library.
6801 .Ip "\fB\-mmpyi\fR" 4
6802 .IX Item "-mmpyi"
6803 .PD 0
6804 .Ip "\fB\-mno-mpyi\fR" 4
6805 .IX Item "-mno-mpyi"
6806 .PD
6807 For the C3x use the 24\-bit \s-1MPYI\s0 instruction for integer multiplies
6808 instead of a library call to guarantee 32\-bit results.  Note that if one
6809 of the operands is a constant, then the multiplication will be performed
6810 using shifts and adds.  If the \-mmpyi option is not specified for the C3x,
6811 then squaring operations are performed inline instead of a library call.
6812 .Ip "\fB\-mfast-fix\fR" 4
6813 .IX Item "-mfast-fix"
6814 .PD 0
6815 .Ip "\fB\-mno-fast-fix\fR" 4
6816 .IX Item "-mno-fast-fix"
6817 .PD
6818 The C3x/C4x \s-1FIX\s0 instruction to convert a floating point value to an
6819 integer value chooses the nearest integer less than or equal to the
6820 floating point value rather than to the nearest integer.  Thus if the
6821 floating point number is negative, the result will be incorrectly
6822 truncated an additional code is necessary to detect and correct this
6823 case.  This option can be used to disable generation of the additional
6824 code required to correct the result.
6825 .Ip "\fB\-mrptb\fR" 4
6826 .IX Item "-mrptb"
6827 .PD 0
6828 .Ip "\fB\-mno-rptb\fR" 4
6829 .IX Item "-mno-rptb"
6830 .PD
6831 Enable (disable) generation of repeat block sequences using the \s-1RPTB\s0
6832 instruction for zero overhead looping.  The \s-1RPTB\s0 construct is only used
6833 for innermost loops that do not call functions or jump across the loop
6834 boundaries.  There is no advantage having nested \s-1RPTB\s0 loops due to the
6835 overhead required to save and restore the \s-1RC\s0, \s-1RS\s0, and \s-1RE\s0 registers.
6836 This is enabled by default with \-O2.
6837 .Ip "\fB\-mrpts=\fR\fIcount\fR" 4
6838 .IX Item "-mrpts=count"
6839 .PD 0
6840 .Ip "\fB\-mno-rpts\fR" 4
6841 .IX Item "-mno-rpts"
6842 .PD
6843 Enable (disable) the use of the single instruction repeat instruction
6844 \&\s-1RPTS\s0.  If a repeat block contains a single instruction, and the loop
6845 count can be guaranteed to be less than the value \fIcount\fR, \s-1GCC\s0 will
6846 emit a \s-1RPTS\s0 instruction instead of a \s-1RPTB\s0.  If no value is specified,
6847 then a \s-1RPTS\s0 will be emitted even if the loop count cannot be determined
6848 at compile time.  Note that the repeated instruction following \s-1RPTS\s0 does
6849 not have to be reloaded from memory each iteration, thus freeing up the
6850 \&\s-1CPU\s0 buses for operands.  However, since interrupts are blocked by this
6851 instruction, it is disabled by default.
6852 .Ip "\fB\-mloop-unsigned\fR" 4
6853 .IX Item "-mloop-unsigned"
6854 .PD 0
6855 .Ip "\fB\-mno-loop-unsigned\fR" 4
6856 .IX Item "-mno-loop-unsigned"
6857 .PD
6858 The maximum iteration count when using \s-1RPTS\s0 and \s-1RPTB\s0 (and \s-1DB\s0 on the C40)
6859 is 2^31 + 1 since these instructions test if the iteration count is
6860 negative to terminate the loop.  If the iteration count is unsigned
6861 there is a possibility than the 2^31 + 1 maximum iteration count may be
6862 exceeded.  This switch allows an unsigned iteration count.
6863 .Ip "\fB\-mti\fR" 4
6864 .IX Item "-mti"
6865 Try to emit an assembler syntax that the \s-1TI\s0 assembler (asm30) is happy
6866 with.  This also enforces compatibility with the \s-1API\s0 employed by the \s-1TI\s0
6867 C3x C compiler.  For example, long doubles are passed as structures
6868 rather than in floating point registers.
6869 .Ip "\fB\-mregparm\fR" 4
6870 .IX Item "-mregparm"
6871 .PD 0
6872 .Ip "\fB\-mmemparm\fR" 4
6873 .IX Item "-mmemparm"
6874 .PD
6875 Generate code that uses registers (stack) for passing arguments to functions.
6876 By default, arguments are passed in registers where possible rather
6877 than by pushing arguments on to the stack.
6878 .Ip "\fB\-mparallel-insns\fR" 4
6879 .IX Item "-mparallel-insns"
6880 .PD 0
6881 .Ip "\fB\-mno-parallel-insns\fR" 4
6882 .IX Item "-mno-parallel-insns"
6883 .PD
6884 Allow the generation of parallel instructions.  This is enabled by
6885 default with \-O2.
6886 .Ip "\fB\-mparallel-mpy\fR" 4
6887 .IX Item "-mparallel-mpy"
6888 .PD 0
6889 .Ip "\fB\-mno-parallel-mpy\fR" 4
6890 .IX Item "-mno-parallel-mpy"
6891 .PD
6892 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
6893 provided \-mparallel-insns is also specified.  These instructions have
6894 tight register constraints which can pessimize the code generation
6895 of large functions.
6896 .PP
6897 .I "V850 Options"
6898 .IX Subsection "V850 Options"
6899 .PP
6900 These \fB\-m\fR options are defined for V850 implementations:
6901 .Ip "\fB\-mlong-calls\fR" 4
6902 .IX Item "-mlong-calls"
6903 .PD 0
6904 .Ip "\fB\-mno-long-calls\fR" 4
6905 .IX Item "-mno-long-calls"
6906 .PD
6907 Treat all calls as being far away (near).  If calls are assumed to be
6908 far away, the compiler will always load the functions address up into a
6909 register, and call indirect through the pointer.
6910 .Ip "\fB\-mno-ep\fR" 4
6911 .IX Item "-mno-ep"
6912 .PD 0
6913 .Ip "\fB\-mep\fR" 4
6914 .IX Item "-mep"
6915 .PD
6916 Do not optimize (do optimize) basic blocks that use the same index
6917 pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
6918 use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
6919 option is on by default if you optimize.
6920 .Ip "\fB\-mno-prolog-function\fR" 4
6921 .IX Item "-mno-prolog-function"
6922 .PD 0
6923 .Ip "\fB\-mprolog-function\fR" 4
6924 .IX Item "-mprolog-function"
6925 .PD
6926 Do not use (do use) external functions to save and restore registers at
6927 the prolog and epilog of a function.  The external functions are slower,
6928 but use less code space if more than one function saves the same number
6929 of registers.  The \fB\-mprolog-function\fR option is on by default if
6930 you optimize.
6931 .Ip "\fB\-mspace\fR" 4
6932 .IX Item "-mspace"
6933 Try to make the code as small as possible.  At present, this just turns
6934 on the \fB\-mep\fR and \fB\-mprolog-function\fR options.
6935 .Ip "\fB\-mtda=\fR\fIn\fR" 4
6936 .IX Item "-mtda=n"
6937 Put static or global variables whose size is \fIn\fR bytes or less into
6938 the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
6939 area can hold up to 256 bytes in total (128 bytes for byte references).
6940 .Ip "\fB\-msda=\fR\fIn\fR" 4
6941 .IX Item "-msda=n"
6942 Put static or global variables whose size is \fIn\fR bytes or less into
6943 the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
6944 area can hold up to 64 kilobytes.
6945 .Ip "\fB\-mzda=\fR\fIn\fR" 4
6946 .IX Item "-mzda=n"
6947 Put static or global variables whose size is \fIn\fR bytes or less into
6948 the first 32 kilobytes of memory.
6949 .Ip "\fB\-mv850\fR" 4
6950 .IX Item "-mv850"
6951 Specify that the target processor is the V850.
6952 .Ip "\fB\-mbig-switch\fR" 4
6953 .IX Item "-mbig-switch"
6954 Generate code suitable for big switch tables.  Use this option only if
6955 the assembler/linker complain about out of range branches within a switch
6956 table.
6957 .PP
6958 .I "\s-1ARC\s0 Options"
6959 .IX Subsection "ARC Options"
6960 .PP
6961 These options are defined for \s-1ARC\s0 implementations:
6962 .Ip "\fB\-EL\fR" 4
6963 .IX Item "-EL"
6964 Compile code for little endian mode.  This is the default.
6965 .Ip "\fB\-EB\fR" 4
6966 .IX Item "-EB"
6967 Compile code for big endian mode.
6968 .Ip "\fB\-mmangle-cpu\fR" 4
6969 .IX Item "-mmangle-cpu"
6970 Prepend the name of the cpu to all public symbol names.
6971 In multiple-processor systems, there are many \s-1ARC\s0 variants with different
6972 instruction and register set characteristics.  This flag prevents code
6973 compiled for one cpu to be linked with code compiled for another.
6974 No facility exists for handling variants that are \*(L"almost identical\*(R".
6975 This is an all or nothing option.
6976 .Ip "\fB\-mcpu=\fR\fIcpu\fR" 4
6977 .IX Item "-mcpu=cpu"
6978 Compile code for \s-1ARC\s0 variant \fIcpu\fR.
6979 Which variants are supported depend on the configuration.
6980 All variants support \fB\-mcpu=base\fR, this is the default.
6981 .Ip "\fB\-mtext=\fR\fItext section\fR" 4
6982 .IX Item "-mtext=text section"
6983 .PD 0
6984 .Ip "\fB\-mdata=\fR\fIdata section\fR" 4
6985 .IX Item "-mdata=data section"
6986 .Ip "\fB\-mrodata=\fR\fIreadonly data section\fR" 4
6987 .IX Item "-mrodata=readonly data section"
6988 .PD
6989 Put functions, data, and readonly data in \fItext section\fR,
6990 \&\fIdata section\fR, and \fIreadonly data section\fR respectively
6991 by default.  This can be overridden with the \f(CW\*(C`section\*(C'\fR attribute.
6992 .PP
6993 .I "\s-1NS32K\s0 Options"
6994 .IX Subsection "NS32K Options"
6995 .PP
6996 These are the \fB\-m\fR options defined for the 32000 series.  The default
6997 values for these options depends on which style of 32000 was selected when
6998 the compiler was configured; the defaults for the most common choices are
6999 given below.
7000 .Ip "\fB\-m32032\fR" 4
7001 .IX Item "-m32032"
7002 .PD 0
7003 .Ip "\fB\-m32032\fR" 4
7004 .IX Item "-m32032"
7005 .PD
7006 Generate output for a 32032.  This is the default
7007 when the compiler is configured for 32032 and 32016 based systems.
7008 .Ip "\fB\-m32332\fR" 4
7009 .IX Item "-m32332"
7010 .PD 0
7011 .Ip "\fB\-m32332\fR" 4
7012 .IX Item "-m32332"
7013 .PD
7014 Generate output for a 32332.  This is the default
7015 when the compiler is configured for 32332\-based systems.
7016 .Ip "\fB\-m32532\fR" 4
7017 .IX Item "-m32532"
7018 .PD 0
7019 .Ip "\fB\-m32532\fR" 4
7020 .IX Item "-m32532"
7021 .PD
7022 Generate output for a 32532.  This is the default
7023 when the compiler is configured for 32532\-based systems.
7024 .Ip "\fB\-m32081\fR" 4
7025 .IX Item "-m32081"
7026 Generate output containing 32081 instructions for floating point.
7027 This is the default for all systems.
7028 .Ip "\fB\-m32381\fR" 4
7029 .IX Item "-m32381"
7030 Generate output containing 32381 instructions for floating point.  This
7031 also implies \fB\-m32081\fR. The 32381 is only compatible with the 32332
7032 and 32532 cpus. This is the default for the pc532\-netbsd configuration.
7033 .Ip "\fB\-mmulti-add\fR" 4
7034 .IX Item "-mmulti-add"
7035 Try and generate multiply-add floating point instructions \f(CW\*(C`polyF\*(C'\fR
7036 and \f(CW\*(C`dotF\*(C'\fR. This option is only available if the \fB\-m32381\fR
7037 option is in effect. Using these instructions requires changes to to
7038 register allocation which generally has a negative impact on
7039 performance.  This option should only be enabled when compiling code
7040 particularly likely to make heavy use of multiply-add instructions.
7041 .Ip "\fB\-mnomulti-add\fR" 4
7042 .IX Item "-mnomulti-add"
7043 Do not try and generate multiply-add floating point instructions
7044 \&\f(CW\*(C`polyF\*(C'\fR and \f(CW\*(C`dotF\*(C'\fR. This is the default on all platforms.
7045 .Ip "\fB\-msoft-float\fR" 4
7046 .IX Item "-msoft-float"
7047 Generate output containing library calls for floating point.
7048 \&\fBWarning:\fR the requisite libraries may not be available.
7049 .Ip "\fB\-mnobitfield\fR" 4
7050 .IX Item "-mnobitfield"
7051 Do not use the bit-field instructions. On some machines it is faster to
7052 use shifting and masking operations. This is the default for the pc532.
7053 .Ip "\fB\-mbitfield\fR" 4
7054 .IX Item "-mbitfield"
7055 Do use the bit-field instructions. This is the default for all platforms
7056 except the pc532.
7057 .Ip "\fB\-mrtd\fR" 4
7058 .IX Item "-mrtd"
7059 Use a different function-calling convention, in which functions
7060 that take a fixed number of arguments return pop their
7061 arguments on return with the \f(CW\*(C`ret\*(C'\fR instruction.
7062 .Sp
7063 This calling convention is incompatible with the one normally
7064 used on Unix, so you cannot use it if you need to call libraries
7065 compiled with the Unix compiler.
7066 .Sp
7067 Also, you must provide function prototypes for all functions that
7068 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
7069 otherwise incorrect code will be generated for calls to those
7070 functions.
7071 .Sp
7072 In addition, seriously incorrect code will result if you call a
7073 function with too many arguments.  (Normally, extra arguments are
7074 harmlessly ignored.)
7075 .Sp
7076 This option takes its name from the 680x0 \f(CW\*(C`rtd\*(C'\fR instruction.
7077 .Ip "\fB\-mregparam\fR" 4
7078 .IX Item "-mregparam"
7079 Use a different function-calling convention where the first two arguments
7080 are passed in registers.
7081 .Sp
7082 This calling convention is incompatible with the one normally
7083 used on Unix, so you cannot use it if you need to call libraries
7084 compiled with the Unix compiler.
7085 .Ip "\fB\-mnoregparam\fR" 4
7086 .IX Item "-mnoregparam"
7087 Do not pass any arguments in registers. This is the default for all
7088 targets.
7089 .Ip "\fB\-msb\fR" 4
7090 .IX Item "-msb"
7091 It is \s-1OK\s0 to use the sb as an index register which is always loaded with
7092 zero. This is the default for the pc532\-netbsd target.
7093 .Ip "\fB\-mnosb\fR" 4
7094 .IX Item "-mnosb"
7095 The sb register is not available for use or has not been initialized to
7096 zero by the run time system. This is the default for all targets except
7097 the pc532\-netbsd. It is also implied whenever \fB\-mhimem\fR or
7098 \&\fB\-fpic\fR is set.
7099 .Ip "\fB\-mhimem\fR" 4
7100 .IX Item "-mhimem"
7101 Many ns32000 series addressing modes use displacements of up to 512MB.
7102 If an address is above 512MB then displacements from zero can not be used.
7103 This option causes code to be generated which can be loaded above 512MB.
7104 This may be useful for operating systems or \s-1ROM\s0 code.
7105 .Ip "\fB\-mnohimem\fR" 4
7106 .IX Item "-mnohimem"
7107 Assume code will be loaded in the first 512MB of virtual address space.
7108 This is the default for all platforms.
7109 .PP
7110 .I "\s-1AVR\s0 Options"
7111 .IX Subsection "AVR Options"
7112 .PP
7113 These options are defined for \s-1AVR\s0 implementations:
7114 .Ip "\fB\-mmcu=\fR\fImcu\fR" 4
7115 .IX Item "-mmcu=mcu"
7116 Specify \s-1ATMEL\s0 \s-1AVR\s0 instruction set or \s-1MCU\s0 type.
7117 .Sp
7118 Instruction set avr1 is for the minimal \s-1AVR\s0 core, not supported by the C
7119 compiler, only for assembler programs (\s-1MCU\s0 types: at90s1200, attiny10,
7120 attiny11, attiny12, attiny15, attiny28).
7121 .Sp
7122 Instruction set avr2 (default) is for the classic \s-1AVR\s0 core with up to
7123 8K program memory space (\s-1MCU\s0 types: at90s2313, at90s2323, attiny22,
7124 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
7125 at90c8534, at90s8535).
7126 .Sp
7127 Instruction set avr3 is for the classic \s-1AVR\s0 core with up to 128K program
7128 memory space (\s-1MCU\s0 types: atmega103, atmega603).
7129 .Sp
7130 Instruction set avr4 is for the enhanced \s-1AVR\s0 core with up to 8K program
7131 memory space (\s-1MCU\s0 types: atmega83, atmega85).
7132 .Sp
7133 Instruction set avr5 is for the enhanced \s-1AVR\s0 core with up to 128K program
7134 memory space (\s-1MCU\s0 types: atmega161, atmega163, atmega32, at94k).
7135 .Ip "\fB\-msize\fR" 4
7136 .IX Item "-msize"
7137 Output instruction sizes to the asm file.
7138 .Ip "\fB\-minit-stack=\fR\fIN\fR" 4
7139 .IX Item "-minit-stack=N"
7140 Specify the initial stack address, which may be a symbol or numeric value,
7141 _\|_stack is the default.
7142 .Ip "\fB\-mno-interrupts\fR" 4
7143 .IX Item "-mno-interrupts"
7144 Generated code is not compatible with hardware interrupts.
7145 Code size will be smaller.
7146 .Ip "\fB\-mcall-prologues\fR" 4
7147 .IX Item "-mcall-prologues"
7148 Functions prologues/epilogues expanded as call to appropriate
7149 subroutines. Code size will be smaller.
7150 .Ip "\fB\-mno-tablejump\fR" 4
7151 .IX Item "-mno-tablejump"
7152 Do not generate tablejump insns which sometimes increase code size.
7153 .Ip "\fB\-mtiny-stack\fR" 4
7154 .IX Item "-mtiny-stack"
7155 Change only the low 8 bits of the stack pointer.
7156 .PP
7157 .I "MCore Options"
7158 .IX Subsection "MCore Options"
7159 .PP
7160 These are the \fB\-m\fR options defined for the Motorola M*Core
7161 processors.  
7162 .Ip "\fB\-mhardlit\fR" 4
7163 .IX Item "-mhardlit"
7164 .PD 0
7165 .Ip "\fB\-mhardlit\fR" 4
7166 .IX Item "-mhardlit"
7167 .Ip "\fB\-mno-hardlit\fR" 4
7168 .IX Item "-mno-hardlit"
7169 .PD
7170 Inline constants into the code stream if it can be done in two
7171 instructions or less.
7172 .Ip "\fB\-mdiv\fR" 4
7173 .IX Item "-mdiv"
7174 .PD 0
7175 .Ip "\fB\-mdiv\fR" 4
7176 .IX Item "-mdiv"
7177 .Ip "\fB\-mno-div\fR" 4
7178 .IX Item "-mno-div"
7179 .PD
7180 Use the divide instruction.  (Enabled by default).
7181 .Ip "\fB\-mrelax-immediate\fR" 4
7182 .IX Item "-mrelax-immediate"
7183 .PD 0
7184 .Ip "\fB\-mrelax-immediate\fR" 4
7185 .IX Item "-mrelax-immediate"
7186 .Ip "\fB\-mno-relax-immediate\fR" 4
7187 .IX Item "-mno-relax-immediate"
7188 .PD
7189 Allow arbitrary sized immediates in bit operations.
7190 .Ip "\fB\-mwide-bitfields\fR" 4
7191 .IX Item "-mwide-bitfields"
7192 .PD 0
7193 .Ip "\fB\-mwide-bitfields\fR" 4
7194 .IX Item "-mwide-bitfields"
7195 .Ip "\fB\-mno-wide-bitfields\fR" 4
7196 .IX Item "-mno-wide-bitfields"
7197 .PD
7198 Always treat bitfields as int-sized.
7199 .Ip "\fB\-m4byte-functions\fR" 4
7200 .IX Item "-m4byte-functions"
7201 .PD 0
7202 .Ip "\fB\-m4byte-functions\fR" 4
7203 .IX Item "-m4byte-functions"
7204 .Ip "\fB\-mno-4byte-functions\fR" 4
7205 .IX Item "-mno-4byte-functions"
7206 .PD
7207 Force all functions to be aligned to a four byte boundary.
7208 .Ip "\fB\-mcallgraph-data\fR" 4
7209 .IX Item "-mcallgraph-data"
7210 .PD 0
7211 .Ip "\fB\-mcallgraph-data\fR" 4
7212 .IX Item "-mcallgraph-data"
7213 .Ip "\fB\-mno-callgraph-data\fR" 4
7214 .IX Item "-mno-callgraph-data"
7215 .PD
7216 Emit callgraph information.
7217 .Ip "\fB\-mslow-bytes\fR" 4
7218 .IX Item "-mslow-bytes"
7219 .PD 0
7220 .Ip "\fB\-mslow-bytes\fR" 4
7221 .IX Item "-mslow-bytes"
7222 .Ip "\fB\-mno-slow-bytes\fR" 4
7223 .IX Item "-mno-slow-bytes"
7224 .PD
7225 Prefer word access when reading byte quantities.
7226 .Ip "\fB\-mlittle-endian\fR" 4
7227 .IX Item "-mlittle-endian"
7228 .PD 0
7229 .Ip "\fB\-mlittle-endian\fR" 4
7230 .IX Item "-mlittle-endian"
7231 .Ip "\fB\-mbig-endian\fR" 4
7232 .IX Item "-mbig-endian"
7233 .PD
7234 Generate code for a little endian target.
7235 .Ip "\fB\-m210\fR" 4
7236 .IX Item "-m210"
7237 .PD 0
7238 .Ip "\fB\-m210\fR" 4
7239 .IX Item "-m210"
7240 .Ip "\fB\-m340\fR" 4
7241 .IX Item "-m340"
7242 .PD
7243 Generate code for the 210 processor.
7244 .PP
7245 .I "\s-1IA-64\s0 Options"
7246 .IX Subsection "IA-64 Options"
7247 .PP
7248 These are the \fB\-m\fR options defined for the Intel \s-1IA-64\s0 architecture.
7249 .Ip "\fB\-mbig-endian\fR" 4
7250 .IX Item "-mbig-endian"
7251 Generate code for a big endian target.  This is the default for \s-1HPUX\s0.
7252 .Ip "\fB\-mlittle-endian\fR" 4
7253 .IX Item "-mlittle-endian"
7254 Generate code for a little endian target.  This is the default for \s-1AIX5\s0
7255 and Linux.
7256 .Ip "\fB\-mgnu-as\fR" 4
7257 .IX Item "-mgnu-as"
7258 .PD 0
7259 .Ip "\fB\-mno-gnu-as\fR" 4
7260 .IX Item "-mno-gnu-as"
7261 .PD
7262 Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
7263 .Ip "\fB\-mgnu-ld\fR" 4
7264 .IX Item "-mgnu-ld"
7265 .PD 0
7266 .Ip "\fB\-mno-gnu-ld\fR" 4
7267 .IX Item "-mno-gnu-ld"
7268 .PD
7269 Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
7270 .Ip "\fB\-mno-pic\fR" 4
7271 .IX Item "-mno-pic"
7272 Generate code that does not use a global pointer register.  The result
7273 is not position independent code, and violates the \s-1IA-64\s0 \s-1ABI\s0.
7274 .Ip "\fB\-mvolatile-asm-stop\fR" 4
7275 .IX Item "-mvolatile-asm-stop"
7276 .PD 0
7277 .Ip "\fB\-mno-volatile-asm-stop\fR" 4
7278 .IX Item "-mno-volatile-asm-stop"
7279 .PD
7280 Generate (or don't) a stop bit immediately before and after volatile asm
7281 statements.
7282 .Ip "\fB\-mb-step\fR" 4
7283 .IX Item "-mb-step"
7284 Generate code that works around Itanium B step errata.
7285 .Ip "\fB\-mregister-names\fR" 4
7286 .IX Item "-mregister-names"
7287 .PD 0
7288 .Ip "\fB\-mno-register-names\fR" 4
7289 .IX Item "-mno-register-names"
7290 .PD
7291 Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
7292 the stacked registers.  This may make assembler output more readable.
7293 .Ip "\fB\-mno-sdata\fR" 4
7294 .IX Item "-mno-sdata"
7295 .PD 0
7296 .Ip "\fB\-msdata\fR" 4
7297 .IX Item "-msdata"
7298 .PD
7299 Disable (or enable) optimizations that use the small data section.  This may
7300 be useful for working around optimizer bugs.
7301 .Ip "\fB\-mconstant-gp\fR" 4
7302 .IX Item "-mconstant-gp"
7303 Generate code that uses a single constant global pointer value.  This is
7304 useful when compiling kernel code.
7305 .Ip "\fB\-mauto-pic\fR" 4
7306 .IX Item "-mauto-pic"
7307 Generate code that is self-relocatable.  This implies \fB\-mconstant-gp\fR.
7308 This is useful when compiling firmware code.
7309 .Ip "\fB\-minline-divide-min-latency\fR" 4
7310 .IX Item "-minline-divide-min-latency"
7311 Generate code for inline divides using the minimum latency algorithm.
7312 .Ip "\fB\-minline-divide-max-throughput\fR" 4
7313 .IX Item "-minline-divide-max-throughput"
7314 Generate code for inline divides using the maximum throughput algorithm.
7315 .Ip "\fB\-mno-dwarf2\-asm\fR" 4
7316 .IX Item "-mno-dwarf2-asm"
7317 .PD 0
7318 .Ip "\fB\-mdwarf2\-asm\fR" 4
7319 .IX Item "-mdwarf2-asm"
7320 .PD
7321 Don't (or do) generate assembler code for the \s-1DWARF2\s0 line number debugging
7322 info.  This may be useful when not using the \s-1GNU\s0 assembler.
7323 .Ip "\fB\-mfixed-range=\fR\fIregister range\fR" 4
7324 .IX Item "-mfixed-range=register range"
7325 Generate code treating the given register range as fixed registers.
7326 A fixed register is one that the register allocator can not use.  This is
7327 useful when compiling kernel code.  A register range is specified as
7328 two registers separated by a dash.  Multiple register ranges can be
7329 specified separated by a comma.
7330 .PP
7331 .I "D30V Options"
7332 .IX Subsection "D30V Options"
7333 .PP
7334 These \fB\-m\fR options are defined for D30V implementations:
7335 .Ip "\fB\-mextmem\fR" 4
7336 .IX Item "-mextmem"
7337 Link the \fB.text\fR, \fB.data\fR, \fB.bss\fR, \fB.strings\fR,
7338 \&\fB.rodata\fR, \fB.rodata1\fR, \fB.data1\fR sections into external
7339 memory, which starts at location \f(CW\*(C`0x80000000\*(C'\fR.
7340 .Ip "\fB\-mextmemory\fR" 4
7341 .IX Item "-mextmemory"
7342 Same as the \fB\-mextmem\fR switch.
7343 .Ip "\fB\-monchip\fR" 4
7344 .IX Item "-monchip"
7345 Link the \fB.text\fR section into onchip text memory, which starts at
7346 location \f(CW\*(C`0x0\*(C'\fR.  Also link \fB.data\fR, \fB.bss\fR,
7347 \&\fB.strings\fR, \fB.rodata\fR, \fB.rodata1\fR, \fB.data1\fR sections
7348 into onchip data memory, which starts at location \f(CW\*(C`0x20000000\*(C'\fR.
7349 .Ip "\fB\-mno-asm-optimize\fR" 4
7350 .IX Item "-mno-asm-optimize"
7351 .PD 0
7352 .Ip "\fB\-masm-optimize\fR" 4
7353 .IX Item "-masm-optimize"
7354 .PD
7355 Disable (enable) passing \fB\-O\fR to the assembler when optimizing.
7356 The assembler uses the \fB\-O\fR option to automatically parallelize
7357 adjacent short instructions where possible.
7358 .Ip "\fB\-mbranch-cost=\fR\fIn\fR" 4
7359 .IX Item "-mbranch-cost=n"
7360 Increase the internal costs of branches to \fIn\fR.  Higher costs means
7361 that the compiler will issue more instructions to avoid doing a branch.
7362 The default is 2.
7363 .Ip "\fB\-mcond-exec=\fR\fIn\fR" 4
7364 .IX Item "-mcond-exec=n"
7365 Specify the maximum number of conditionally executed instructions that
7366 replace a branch.  The default is 4.
7367 .Sh "Options for Code Generation Conventions"
7368 .IX Subsection "Options for Code Generation Conventions"
7369 These machine-independent options control the interface conventions
7370 used in code generation.
7371 .PP
7372 Most of them have both positive and negative forms; the negative form
7373 of \fB\-ffoo\fR would be \fB\-fno-foo\fR.  In the table below, only
7374 one of the forms is listed\-\-\-the one which is not the default.  You
7375 can figure out the other form by either removing \fBno-\fR or adding
7376 it.
7377 .Ip "\fB\-fexceptions\fR" 4
7378 .IX Item "-fexceptions"
7379 Enable exception handling. Generates extra code needed to propagate
7380 exceptions.  For some targets, this implies \s-1GNU\s0 \s-1CC\s0 will generate frame
7381 unwind information for all functions, which can produce significant data
7382 size overhead, although it does not affect execution.  If you do not
7383 specify this option, \s-1GNU\s0 \s-1CC\s0 will enable it by default for languages like
7384 \&\*(C+ which normally require exception handling, and disable itfor
7385 languages like C that do not normally require it.  However, you may need
7386 to enable this option when compiling C code that needs to interoperate
7387 properly with exception handlers written in \*(C+.  You may also wish to
7388 disable this option if you are compiling older \*(C+ programs that don't
7389 use exception handling.
7390 .Ip "\fB\-funwind-tables\fR" 4
7391 .IX Item "-funwind-tables"
7392 Similar to \fB\-fexceptions\fR, except that it will just generate any needed
7393 static data, but will not affect the generated code in any other way.
7394 You will normally not enable this option; instead, a language processor
7395 that needs this handling would enable it on your behalf.
7396 .Ip "\fB\-fpcc-struct-return\fR" 4
7397 .IX Item "-fpcc-struct-return"
7398 Return ``short'' \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
7399 longer ones, rather than in registers.  This convention is less
7400 efficient, but it has the advantage of allowing intercallability between
7401 GCC-compiled files and files compiled with other compilers.
7402 .Sp
7403 The precise convention for returning structures in memory depends
7404 on the target configuration macros.
7405 .Sp
7406 Short structures and unions are those whose size and alignment match
7407 that of some integer type.
7408 .Ip "\fB\-freg-struct-return\fR" 4
7409 .IX Item "-freg-struct-return"
7410 Use the convention that \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values are
7411 returned in registers when possible.  This is more efficient for small
7412 structures than \fB\-fpcc-struct-return\fR.
7413 .Sp
7414 If you specify neither \fB\-fpcc-struct-return\fR nor its contrary
7415 \&\fB\-freg-struct-return\fR, \s-1GCC\s0 defaults to whichever convention is
7416 standard for the target.  If there is no standard convention, \s-1GCC\s0
7417 defaults to \fB\-fpcc-struct-return\fR, except on targets where \s-1GCC\s0
7418 is the principal compiler.  In those cases, we can choose the standard,
7419 and we chose the more efficient register return alternative.
7420 .Ip "\fB\-fshort-enums\fR" 4
7421 .IX Item "-fshort-enums"
7422 Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
7423 declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
7424 will be equivalent to the smallest integer type which has enough room.
7425 .Ip "\fB\-fshort-double\fR" 4
7426 .IX Item "-fshort-double"
7427 Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
7428 .Ip "\fB\-fshared-data\fR" 4
7429 .IX Item "-fshared-data"
7430 Requests that the data and non-\f(CW\*(C`const\*(C'\fR variables of this
7431 compilation be shared data rather than private data.  The distinction
7432 makes sense only on certain operating systems, where shared data is
7433 shared between processes running the same program, while private data
7434 exists in one copy per process.
7435 .Ip "\fB\-fno-common\fR" 4
7436 .IX Item "-fno-common"
7437 Allocate even uninitialized global variables in the data section of the
7438 object file, rather than generating them as common blocks.  This has the
7439 effect that if the same variable is declared (without \f(CW\*(C`extern\*(C'\fR) in
7440 two different compilations, you will get an error when you link them.
7441 The only reason this might be useful is if you wish to verify that the
7442 program will work on other systems which always work this way.
7443 .Ip "\fB\-fno-ident\fR" 4
7444 .IX Item "-fno-ident"
7445 Ignore the \fB#ident\fR directive.
7446 .Ip "\fB\-fno-gnu-linker\fR" 4
7447 .IX Item "-fno-gnu-linker"
7448 Do not output global initializations (such as \*(C+ constructors and
7449 destructors) in the form used by the \s-1GNU\s0 linker (on systems where the \s-1GNU\s0
7450 linker is the standard method of handling them).  Use this option when
7451 you want to use a non-GNU linker, which also requires using the
7452 \&\fBcollect2\fR program to make sure the system linker includes
7453 constructors and destructors.  (\fBcollect2\fR is included in the \s-1GCC\s0
7454 distribution.)  For systems which \fImust\fR use \fBcollect2\fR, the
7455 compiler driver \fBgcc\fR is configured to do this automatically.
7456 .Ip "\fB\-finhibit-size-directive\fR" 4
7457 .IX Item "-finhibit-size-directive"
7458 Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
7459 would cause trouble if the function is split in the middle, and the
7460 two halves are placed at locations far apart in memory.  This option is
7461 used when compiling \fIcrtstuff.c\fR; you should not need to use it
7462 for anything else.
7463 .Ip "\fB\-fverbose-asm\fR" 4
7464 .IX Item "-fverbose-asm"
7465 Put extra commentary information in the generated assembly code to
7466 make it more readable.  This option is generally only of use to those
7467 who actually need to read the generated assembly code (perhaps while
7468 debugging the compiler itself).
7469 .Sp
7470 \&\fB\-fno-verbose-asm\fR, the default, causes the
7471 extra information to be omitted and is useful when comparing two assembler
7472 files.
7473 .Ip "\fB\-fvolatile\fR" 4
7474 .IX Item "-fvolatile"
7475 Consider all memory references through pointers to be volatile.
7476 .Ip "\fB\-fvolatile-global\fR" 4
7477 .IX Item "-fvolatile-global"
7478 Consider all memory references to extern and global data items to
7479 be volatile.  \s-1GCC\s0 does not consider static data items to be volatile
7480 because of this switch.
7481 .Ip "\fB\-fvolatile-static\fR" 4
7482 .IX Item "-fvolatile-static"
7483 Consider all memory references to static data to be volatile.
7484 .Ip "\fB\-fpic\fR" 4
7485 .IX Item "-fpic"
7486 Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
7487 library, if supported for the target machine.  Such code accesses all
7488 constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
7489 loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
7490 loader is not part of \s-1GCC\s0; it is part of the operating system).  If
7491 the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
7492 maximum size, you get an error message from the linker indicating that
7493 \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
7494 instead.  (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
7495 on the m68k and \s-1RS/6000\s0.  The 386 has no such limit.)
7496 .Sp
7497 Position-independent code requires special support, and therefore works
7498 only on certain machines.  For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
7499 but not for the Sun 386i.  Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
7500 position-independent.
7501 .Ip "\fB\-fPIC\fR" 4
7502 .IX Item "-fPIC"
7503 If supported for the target machine, emit position-independent code,
7504 suitable for dynamic linking and avoiding any limit on the size of the
7505 global offset table.  This option makes a difference on the m68k, m88k,
7506 and the Sparc.
7507 .Sp
7508 Position-independent code requires special support, and therefore works
7509 only on certain machines.
7510 .Ip "\fB\-ffixed-\fR\fIreg\fR" 4
7511 .IX Item "-ffixed-reg"
7512 Treat the register named \fIreg\fR as a fixed register; generated code
7513 should never refer to it (except perhaps as a stack pointer, frame
7514 pointer or in some other fixed role).
7515 .Sp
7516 \&\fIreg\fR must be the name of a register.  The register names accepted
7517 are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
7518 macro in the machine description macro file.
7519 .Sp
7520 This flag does not have a negative form, because it specifies a
7521 three-way choice.
7522 .Ip "\fB\-fcall-used-\fR\fIreg\fR" 4
7523 .IX Item "-fcall-used-reg"
7524 Treat the register named \fIreg\fR as an allocable register that is
7525 clobbered by function calls.  It may be allocated for temporaries or
7526 variables that do not live across a call.  Functions compiled this way
7527 will not save and restore the register \fIreg\fR.
7528 .Sp
7529 It is an error to used this flag with the frame pointer or stack pointer.
7530 Use of this flag for other registers that have fixed pervasive roles in
7531 the machine's execution model will produce disastrous results.
7532 .Sp
7533 This flag does not have a negative form, because it specifies a
7534 three-way choice.
7535 .Ip "\fB\-fcall-saved-\fR\fIreg\fR" 4
7536 .IX Item "-fcall-saved-reg"
7537 Treat the register named \fIreg\fR as an allocable register saved by
7538 functions.  It may be allocated even for temporaries or variables that
7539 live across a call.  Functions compiled this way will save and restore
7540 the register \fIreg\fR if they use it.
7541 .Sp
7542 It is an error to used this flag with the frame pointer or stack pointer.
7543 Use of this flag for other registers that have fixed pervasive roles in
7544 the machine's execution model will produce disastrous results.
7545 .Sp
7546 A different sort of disaster will result from the use of this flag for
7547 a register in which function values may be returned.
7548 .Sp
7549 This flag does not have a negative form, because it specifies a
7550 three-way choice.
7551 .Ip "\fB\-fpack-struct\fR" 4
7552 .IX Item "-fpack-struct"
7553 Pack all structure members together without holes.  Usually you would
7554 not want to use this option, since it makes the code suboptimal, and
7555 the offsets of structure members won't agree with system libraries.
7556 .Ip "\fB\-fcheck-memory-usage\fR" 4
7557 .IX Item "-fcheck-memory-usage"
7558 Generate extra code to check each memory access.  \s-1GCC\s0 will generate
7559 code that is suitable for a detector of bad memory accesses such as
7560 \&\fIChecker\fR.
7561 .Sp
7562 Normally, you should compile all, or none, of your code with this option.
7563 .Sp
7564 If you do mix code compiled with and without this option,
7565 you must ensure that all code that has side effects
7566 and that is called by code compiled with this option
7567 is, itself, compiled with this option.
7568 If you do not, you might get erroneous messages from the detector.
7569 .Sp
7570 If you use functions from a library that have side-effects (such as
7571 \&\f(CW\*(C`read\*(C'\fR), you might not be able to recompile the library and
7572 specify this option.  In that case, you can enable the
7573 \&\fB\-fprefix-function-name\fR option, which requests \s-1GCC\s0 to encapsulate
7574 your code and make other functions look as if they were compiled with
7575 \&\fB\-fcheck-memory-usage\fR.  This is done by calling ``stubs'',
7576 which are provided by the detector.  If you cannot find or build
7577 stubs for every function you call, you might have to specify
7578 \&\fB\-fcheck-memory-usage\fR without \fB\-fprefix-function-name\fR.
7579 .Sp
7580 If you specify this option, you can not use the \f(CW\*(C`asm\*(C'\fR or
7581 \&\f(CW\*(C`_\|_asm_\|_\*(C'\fR keywords in functions with memory checking enabled.  \s-1GNU\s0
7582 \&\s-1CC\s0 cannot understand what the \f(CW\*(C`asm\*(C'\fR statement may do, and therefore
7583 cannot generate the appropriate code, so it will reject it.  However, if
7584 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
7585 function; you may use \f(CW\*(C`asm\*(C'\fR statements inside such functions.  You
7586 may have an inline expansion of a non-checked function within a checked
7587 function; in that case \s-1GNU\s0 \s-1CC\s0 will not generate checks for the inlined
7588 function's memory accesses.
7589 .Sp
7590 If you move your \f(CW\*(C`asm\*(C'\fR statements to non-checked inline functions
7591 and they do access memory, you can add calls to the support code in your
7592 inline function, to indicate any reads, writes, or copies being done.
7593 These calls would be similar to those done in the stubs described above.
7594 .Ip "\fB\-fprefix-function-name\fR" 4
7595 .IX Item "-fprefix-function-name"
7596 Request \s-1GCC\s0 to add a prefix to the symbols generated for function names.
7597 \&\s-1GCC\s0 adds a prefix to the names of functions defined as well as
7598 functions called.  Code compiled with this option and code compiled
7599 without the option can't be linked together, unless stubs are used.
7600 .Sp
7601 If you compile the following code with \fB\-fprefix-function-name\fR
7602 .Sp
7603 .Vb 6
7604 \&        extern void bar (int);
7605 \&        void
7606 \&        foo (int a)
7607 \&        {
7608 \&          return bar (a + 5);
7609 \&        }
7610 .Ve
7611 \&\s-1GCC\s0 will compile the code as if it was written:
7612 .Sp
7613 .Vb 6
7614 \&        extern void prefix_bar (int);
7615 \&        void
7616 \&        prefix_foo (int a)
7617 \&        {
7618 \&          return prefix_bar (a + 5);
7619 \&        }
7620 .Ve
7621 This option is designed to be used with \fB\-fcheck-memory-usage\fR.
7622 .Ip "\fB\-finstrument-functions\fR" 4
7623 .IX Item "-finstrument-functions"
7624 Generate instrumentation calls for entry and exit to functions.  Just
7625 after function entry and just before function exit, the following
7626 profiling functions will be called with the address of the current
7627 function and its call site.  (On some platforms,
7628 \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
7629 function, so the call site information may not be available to the
7630 profiling functions otherwise.)
7631 .Sp
7632 .Vb 2
7633 \&        void __cyg_profile_func_enter (void *this_fn, void *call_site);
7634 \&        void __cyg_profile_func_exit  (void *this_fn, void *call_site);
7635 .Ve
7636 The first argument is the address of the start of the current function,
7637 which may be looked up exactly in the symbol table.
7638 .Sp
7639 This instrumentation is also done for functions expanded inline in other
7640 functions.  The profiling calls will indicate where, conceptually, the
7641 inline function is entered and exited.  This means that addressable
7642 versions of such functions must be available.  If all your uses of a
7643 function are expanded inline, this may mean an additional expansion of
7644 code size.  If you use \fBextern inline\fR in your C code, an
7645 addressable version of such functions must be provided.  (This is
7646 normally the case anyways, but if you get lucky and the optimizer always
7647 expands the functions inline, you might have gotten away without
7648 providing static copies.)
7649 .Sp
7650 A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
7651 which case this instrumentation will not be done.  This can be used, for
7652 example, for the profiling functions listed above, high-priority
7653 interrupt routines, and any functions from which the profiling functions
7654 cannot safely be called (perhaps signal handlers, if the profiling
7655 routines generate output or allocate memory).
7656 .Ip "\fB\-fstack-check\fR" 4
7657 .IX Item "-fstack-check"
7658 Generate code to verify that you do not go beyond the boundary of the
7659 stack.  You should specify this flag if you are running in an
7660 environment with multiple threads, but only rarely need to specify it in
7661 a single-threaded environment since stack overflow is automatically
7662 detected on nearly all systems if there is only one stack.
7663 .Sp
7664 Note that this switch does not actually cause checking to be done; the
7665 operating system must do that.  The switch causes generation of code
7666 to ensure that the operating system sees the stack being extended.
7667 .Ip "\fB\-fstack-limit-register=\fR\fIreg\fR" 4
7668 .IX Item "-fstack-limit-register=reg"
7669 .PD 0
7670 .Ip "\fB\-fstack-limit-symbol=\fR\fIsym\fR" 4
7671 .IX Item "-fstack-limit-symbol=sym"
7672 .Ip "\fB\-fno-stack-limit\fR" 4
7673 .IX Item "-fno-stack-limit"
7674 .PD
7675 Generate code to ensure that the stack does not grow beyond a certain value,
7676 either the value of a register or the address of a symbol.  If the stack
7677 would grow beyond the value, a signal is raised.  For most targets,
7678 the signal is raised before the stack overruns the boundary, so
7679 it is possible to catch the signal without taking special precautions.
7680 .Sp
7681 For instance, if the stack starts at address \fB0x80000000\fR and grows
7682 downwards you can use the flags
7683 \&\fB\-fstack-limit-symbol=_\|_stack_limit\fR
7684 \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR which will enforce a stack
7685 limit of 128K.
7686 .Ip "\fB\-fargument-alias\fR" 4
7687 .IX Item "-fargument-alias"
7688 .PD 0
7689 .Ip "\fB\-fargument-noalias\fR" 4
7690 .IX Item "-fargument-noalias"
7691 .Ip "\fB\-fargument-noalias-global\fR" 4
7692 .IX Item "-fargument-noalias-global"
7693 .PD
7694 Specify the possible relationships among parameters and between
7695 parameters and global data.
7696 .Sp
7697 \&\fB\-fargument-alias\fR specifies that arguments (parameters) may
7698 alias each other and may alias global storage.
7699 \&\fB\-fargument-noalias\fR specifies that arguments do not alias
7700 each other, but may alias global storage.
7701 \&\fB\-fargument-noalias-global\fR specifies that arguments do not
7702 alias each other and do not alias global storage.
7703 .Sp
7704 Each language will automatically use whatever option is required by
7705 the language standard.  You should not need to use these options yourself.
7706 .Ip "\fB\-fleading-underscore\fR" 4
7707 .IX Item "-fleading-underscore"
7708 This option and its counterpart, \-fno-leading-underscore, forcibly
7709 change the way C symbols are represented in the object file.  One use
7710 is to help link with legacy assembly code.
7711 .Sp
7712 Be warned that you should know what you are doing when invoking this
7713 option, and that not all targets provide complete support for it.
7714 .SH "ENVIRONMENT"
7715 .IX Header "ENVIRONMENT"
7716 This section describes several environment variables that affect how \s-1GCC\s0
7717 operates.  Some of them work by specifying directories or prefixes to use
7718 when searching for various kinds of files. Some are used to specify other
7719 aspects of the compilation environment.
7720 .PP
7721 Note that you can also specify places to search using options such as
7722 \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
7723 take precedence over places specified using environment variables, which
7724 in turn take precedence over those specified by the configuration of \s-1GCC\s0.
7725 .Ip "\fB\s-1LANG\s0\fR" 4
7726 .IX Item "LANG"
7727 .PD 0
7728 .Ip "\fB\s-1LC_CTYPE\s0\fR" 4
7729 .IX Item "LC_CTYPE"
7730 .Ip "\fB\s-1LC_MESSAGES\s0\fR" 4
7731 .IX Item "LC_MESSAGES"
7732 .Ip "\fB\s-1LC_ALL\s0\fR" 4
7733 .IX Item "LC_ALL"
7734 .PD
7735 These environment variables control the way that \s-1GCC\s0 uses
7736 localization information that allow \s-1GCC\s0 to work with different
7737 national conventions.  \s-1GCC\s0 inspects the locale categories
7738 \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
7739 so.  These locale categories can be set to any value supported by your
7740 installation.  A typical value is \fBen_UK\fR for English in the United
7741 Kingdom.
7742 .Sp
7743 The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
7744 classification.  \s-1GCC\s0 uses it to determine the character boundaries in
7745 a string; this is needed for some multibyte encodings that contain quote
7746 and escape characters that would otherwise be interpreted as a string
7747 end or escape.
7748 .Sp
7749 The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
7750 use in diagnostic messages.
7751 .Sp
7752 If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
7753 of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
7754 and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
7755 environment variable.  If none of these variables are set, \s-1GCC\s0
7756 defaults to traditional C English behavior.
7757 .Ip "\fB\s-1TMPDIR\s0\fR" 4
7758 .IX Item "TMPDIR"
7759 If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
7760 files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
7761 compilation which is to be used as input to the next stage: for example,
7762 the output of the preprocessor, which is the input to the compiler
7763 proper.
7764 .Ip "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
7765 .IX Item "GCC_EXEC_PREFIX"
7766 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
7767 names of the subprograms executed by the compiler.  No slash is added
7768 when this prefix is combined with the name of a subprogram, but you can
7769 specify a prefix that ends with a slash if you wish.
7770 .Sp
7771 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GNU\s0 \s-1CC\s0 will attempt to figure out
7772 an appropriate prefix to use based on the pathname it was invoked with.
7773 .Sp
7774 If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
7775 tries looking in the usual places for the subprogram.
7776 .Sp
7777 The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
7778 \&\fI\fIprefix\fI/lib/gcc-lib/\fR where \fIprefix\fR is the value
7779 of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
7780 .Sp
7781 Other prefixes specified with \fB\-B\fR take precedence over this prefix.
7782 .Sp
7783 This prefix is also used for finding files such as \fIcrt0.o\fR that are
7784 used for linking.
7785 .Sp
7786 In addition, the prefix is used in an unusual way in finding the
7787 directories to search for header files.  For each of the standard
7788 directories whose name normally begins with \fB/usr/local/lib/gcc-lib\fR
7789 (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
7790 replacing that beginning with the specified prefix to produce an
7791 alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 will search
7792 \&\fIfoo/bar\fR where it would normally search \fI/usr/local/lib/bar\fR.
7793 These alternate directories are searched first; the standard directories
7794 come next.
7795 .Ip "\fB\s-1COMPILER_PATH\s0\fR" 4
7796 .IX Item "COMPILER_PATH"
7797 The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
7798 directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
7799 specified when searching for subprograms, if it can't find the
7800 subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
7801 .Ip "\fB\s-1LIBRARY_PATH\s0\fR" 4
7802 .IX Item "LIBRARY_PATH"
7803 The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
7804 directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
7805 \&\s-1GCC\s0 tries the directories thus specified when searching for special
7806 linker files, if it can't find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
7807 using \s-1GCC\s0 also uses these directories when searching for ordinary
7808 libraries for the \fB\-l\fR option (but directories specified with
7809 \&\fB\-L\fR come first).
7810 .Ip "\fBC_INCLUDE_PATH\fR" 4
7811 .IX Item "C_INCLUDE_PATH"
7812 .PD 0
7813 .Ip "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
7814 .IX Item "CPLUS_INCLUDE_PATH"
7815 .Ip "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
7816 .IX Item "OBJC_INCLUDE_PATH"
7817 .PD
7818 These environment variables pertain to particular languages.  Each
7819 variable's value is a colon-separated list of directories, much like
7820 \&\fB\s-1PATH\s0\fR.  When \s-1GCC\s0 searches for header files, it tries the
7821 directories listed in the variable for the language you are using, after
7822 the directories specified with \fB\-I\fR but before the standard header
7823 file directories.
7824 .Ip "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
7825 .IX Item "DEPENDENCIES_OUTPUT"
7826 If this variable is set, its value specifies how to output dependencies
7827 for Make based on the header files processed by the compiler.  This
7828 output looks much like the output from the \fB\-M\fR option, but it goes to a separate file, and is
7829 in addition to the usual results of compilation.
7830 .Sp
7831 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
7832 which case the Make rules are written to that file, guessing the target
7833 name from the source file name.  Or the value can have the form
7834 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
7835 file \fIfile\fR using \fItarget\fR as the target name.
7836 .Ip "\fB\s-1LANG\s0\fR" 4
7837 .IX Item "LANG"
7838 This variable is used to pass locale information to the compiler. One way in
7839 which this information is used is to determine the character set to be used
7840 when character literals, string literals and comments are parsed in C and \*(C+.
7841 When the compiler is configured to allow multibyte characters,
7842 the following values for \fB\s-1LANG\s0\fR are recognized:
7843 .RS 4
7844 .Ip "\fBC-JIS\fR" 4
7845 .IX Item "C-JIS"
7846 Recognize \s-1JIS\s0 characters.
7847 .Ip "\fBC-SJIS\fR" 4
7848 .IX Item "C-SJIS"
7849 Recognize \s-1SJIS\s0 characters.
7850 .Ip "\fBC-EUCJP\fR" 4
7851 .IX Item "C-EUCJP"
7852 Recognize \s-1EUCJP\s0 characters.
7853 .RE
7854 .RS 4
7855 .Sp
7856 If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
7857 compiler will use mblen and mbtowc as defined by the default locale to
7858 recognize and translate multibyte characters.
7859 .RE
7860 .SH "BUGS"
7861 .IX Header "BUGS"
7862 For instructions on reporting bugs, see
7863 <\fBhttp://gcc.gnu.org/bugs.html\fR>.  Use of the \fBgccbug\fR
7864 script to report bugs is recommended.
7865 .SH "FOOTNOTES"
7866 .IX Header "FOOTNOTES"
7867 .Ip "1." 4
7868 On some systems, \fBgcc \-shared\fR
7869 needs to build supplementary stub code for constructors to work. On
7870 multi-libbed systems, \fBgcc \-shared\fR must select the correct support
7871 libraries to link against.  Failing to supply the correct flags may lead
7872 to subtle defects. Supplying them in cases where they are not necessary
7873 is innocuous.
7874 .SH "SEE ALSO"
7875 .IX Header "SEE ALSO"
7876 \&\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)
7877 and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIg77\fR, \fIas\fR,
7878 \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
7879 .SH "AUTHOR"
7880 .IX Header "AUTHOR"
7881 See the Info entry for \fIgcc\fR, or
7882 <\fBhttp://gcc.gnu.org/thanks.html\fR>, for contributors to \s-1GCC\s0.
7883 .SH "COPYRIGHT"
7884 .IX Header "COPYRIGHT"
7885 Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
7886 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
7887 .PP
7888 Permission is granted to make and distribute verbatim copies of this
7889 manual provided the copyright notice and this permission notice are
7890 preserved on all copies.
7891 .PP
7892 Permission is granted to copy and distribute modified versions of this
7893 manual under the conditions for verbatim copying, provided also that the
7894 entire resulting derived work is distributed under the terms of a
7895 permission notice identical to this one.
7896 .PP
7897 Permission is granted to copy and distribute translations of this manual
7898 into another language, under the above conditions for modified versions,
7899 except that this permission notice may be included in translations
7900 approved by the Free Software Foundation instead of in the original
7901 English.