* regrename.c (copyprop_hardreg_forward): New optimization.
[official-gcc.git] / gcc / doc / invoke.texi
blob66314f1dab870ca0f6f53d7fad1d2ecbafed7e35
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2 @c 2000, 2001 Free Software Foundation, Inc.
3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi.
6 @ignore
7 @c man begin COPYRIGHT
8 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
9 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
11 Permission is granted to copy, distribute and/or modify this document
12 under the terms of the GNU Free Documentation License, Version 1.1 or
13 any later version published by the Free Software Foundation; with the
14 Invariant Sections being ``GNU General Public License'' and ``Funding
15 Free Software'', the Front-Cover texts being (a) (see below), and with
16 the Back-Cover Texts being (b) (see below).  A copy of the license is
17 included in the gfdl(7) man page.
19 (a) The FSF's Front-Cover Text is:
21      A GNU Manual
23 (b) The FSF's Back-Cover Text is:
25      You have freedom to copy and modify this GNU Manual, like GNU
26      software.  Copies published by the Free Software Foundation raise
27      funds for GNU development.
28 @c man end
29 @c Set file name and title for the man page.
30 @setfilename gcc
31 @settitle GNU project C and C++ compiler
32 @c man begin SYNOPSIS
33 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
34     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
35     [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
36     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
37     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
38     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
39     [@option{-o} @var{outfile}] @var{infile}@dots{}
41 Only the most useful options are listed here; see below for the
42 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
43 @c man end
44 @c man begin SEEALSO
45 gpl(7), gfdl(7), fsf-funding(7),
46 cpp(1), gcov(1), g77(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
47 and the Info entries for @file{gcc}, @file{cpp}, @file{g77}, @file{as},
48 @file{ld}, @file{binutils} and @file{gdb}.
49 @c man end
50 @c man begin BUGS
51 For instructions on reporting bugs, see
52 @w{@uref{http://gcc.gnu.org/bugs.html}}.  Use of the @command{gccbug}
53 script to report bugs is recommended.
54 @c man end
55 @c man begin AUTHOR
56 See the Info entry for @file{gcc}, or
57 @w{@uref{http://gcc.gnu.org/thanks.html}}, for contributors to GCC@.
58 @c man end
59 @end ignore
61 @node Invoking GCC
62 @chapter GCC Command Options
63 @cindex GCC command options
64 @cindex command options
65 @cindex options, GCC command
67 @c man begin DESCRIPTION
69 When you invoke GCC, it normally does preprocessing, compilation,
70 assembly and linking.  The ``overall options'' allow you to stop this
71 process at an intermediate stage.  For example, the @option{-c} option
72 says not to run the linker.  Then the output consists of object files
73 output by the assembler.
75 Other options are passed on to one stage of processing.  Some options
76 control the preprocessor and others the compiler itself.  Yet other
77 options control the assembler and linker; most of these are not
78 documented here, since you rarely need to use any of them.
80 @cindex C compilation options
81 Most of the command line options that you can use with GCC are useful
82 for C programs; when an option is only useful with another language
83 (usually C++), the explanation says so explicitly.  If the description
84 for a particular option does not mention a source language, you can use
85 that option with all supported languages.
87 @cindex C++ compilation options
88 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
89 options for compiling C++ programs.
91 @cindex grouping options
92 @cindex options, grouping
93 The @command{gcc} program accepts options and file names as operands.  Many
94 options have multi-letter names; therefore multiple single-letter options
95 may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d
96 -r}}.
98 @cindex order of options
99 @cindex options, order
100 You can mix options and other arguments.  For the most part, the order
101 you use doesn't matter.  Order does matter when you use several options
102 of the same kind; for example, if you specify @option{-L} more than once,
103 the directories are searched in the order specified.
105 Many options have long names starting with @samp{-f} or with
106 @samp{-W}---for example, @option{-fforce-mem},
107 @option{-fstrength-reduce}, @option{-Wformat} and so on.  Most of
108 these have both positive and negative forms; the negative form of
109 @option{-ffoo} would be @option{-fno-foo}.  This manual documents
110 only one of these two forms, whichever one is not the default.
112 @c man end
114 @xref{Option Index}, for an index to GCC's options.
116 @menu
117 * Option Summary::      Brief list of all options, without explanations.
118 * Overall Options::     Controlling the kind of output:
119                         an executable, object files, assembler files,
120                         or preprocessed source.
121 * Invoking G++::        Compiling C++ programs.
122 * C Dialect Options::   Controlling the variant of C language compiled.
123 * C++ Dialect Options:: Variations on C++.
124 * Objective-C Dialect Options:: Variations on Objective-C.
125 * Language Independent Options:: Controlling how diagnostics should be
126                         formatted.
127 * Warning Options::     How picky should the compiler be?
128 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
129 * Optimize Options::    How much optimization?
130 * Preprocessor Options:: Controlling header files and macro definitions.
131                          Also, getting dependency information for Make.
132 * Assembler Options::   Passing options to the assembler.
133 * Link Options::        Specifying libraries and so on.
134 * Directory Options::   Where to find header files and libraries.
135                         Where to find the compiler executable files.
136 * Spec Files::          How to pass switches to sub-processes.
137 * Target Options::      Running a cross-compiler, or an old version of GCC.
138 * Submodel Options::    Specifying minor hardware or convention variations,
139                         such as 68010 vs 68020.
140 * Code Gen Options::    Specifying conventions for function calls, data layout
141                         and register usage.
142 * Environment Variables:: Env vars that affect GCC.
143 * Running Protoize::    Automatically adding or removing function prototypes.
144 @end menu
146 @c man begin OPTIONS
148 @node Option Summary
149 @section Option Summary
151 Here is a summary of all the options, grouped by type.  Explanations are
152 in the following sections.
154 @table @emph
155 @item Overall Options
156 @xref{Overall Options,,Options Controlling the Kind of Output}.
157 @gccoptlist{
158 -c  -S  -E  -o @var{file}  -pipe  -pass-exit-codes  -x @var{language} @gol
159 -v  --target-help  --help}
161 @item C Language Options
162 @xref{C Dialect Options,,Options Controlling C Dialect}.
163 @gccoptlist{
164 -ansi  -std=@var{standard}  -aux-info @var{filename} @gol
165 -fno-asm  -fno-builtin -fno-builtin-@var{function} @gol
166 -fhosted  -ffreestanding @gol
167 -trigraphs  -traditional  -traditional-cpp @gol
168 -fallow-single-precision  -fcond-mismatch @gol
169 -fsigned-bitfields  -fsigned-char @gol
170 -funsigned-bitfields  -funsigned-char @gol
171 -fwritable-strings  -fshort-wchar}
173 @item C++ Language Options
174 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
175 @gccoptlist{
176 -fno-access-control  -fcheck-new  -fconserve-space @gol
177 -fno-const-strings  -fdollars-in-identifiers @gol
178 -fno-elide-constructors @gol
179 -fno-enforce-eh-specs  -fexternal-templates @gol
180 -falt-external-templates @gol
181 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
182 -fno-implicit-templates @gol
183 -fno-implicit-inline-templates @gol
184 -fno-implement-inlines  -fms-extensions @gol
185 -fno-nonansi-builtins  -fno-operator-names @gol
186 -fno-optional-diags  -fpermissive @gol
187 -frepo  -fno-rtti  -fstats  -ftemplate-depth-@var{n} @gol
188 -fuse-cxa-atexit  -fvtable-gc  -fno-weak  -nostdinc++ @gol
189 -fno-default-inline  -Wctor-dtor-privacy @gol
190 -Wnon-virtual-dtor  -Wreorder @gol
191 -Weffc++  -Wno-deprecated @gol
192 -Wno-non-template-friend  -Wold-style-cast @gol
193 -Woverloaded-virtual  -Wno-pmf-conversions @gol
194 -Wsign-promo  -Wsynth}
196 @item Objective-C Language Options
197 @xref{Objective-C Dialect Options,,Options Controlling Objective-C Dialect}.
198 @gccoptlist{
199 -fconstant-string-class=@var{class-name} @gol
200 -fgnu-runtime  -fnext-runtime  -gen-decls @gol
201 -Wno-protocol  -Wselector}
203 @item Language Independent Options
204 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
205 @gccoptlist{
206 -fmessage-length=@var{n}  @gol
207 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}}
209 @item Warning Options
210 @xref{Warning Options,,Options to Request or Suppress Warnings}.
211 @gccoptlist{
212 -fsyntax-only  -pedantic  -pedantic-errors @gol
213 -w  -W  -Wall  -Waggregate-return @gol
214 -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment @gol
215 -Wconversion  -Wdisabled-optimization  -Wdiv-by-zero  -Werror @gol
216 -Wfloat-equal  -Wformat  -Wformat=2 @gol
217 -Wformat-nonliteral  -Wformat-security @gol
218 -Wimplicit  -Wimplicit-int  @gol
219 -Wimplicit-function-declaration @gol
220 -Werror-implicit-function-declaration @gol
221 -Wimport  -Winline @gol
222 -Wlarger-than-@var{len}  -Wlong-long @gol
223 -Wmain  -Wmissing-braces  -Wmissing-declarations @gol
224 -Wmissing-format-attribute  -Wmissing-noreturn @gol
225 -Wmultichar  -Wno-format-extra-args  -Wno-format-y2k @gol
226 -Wno-import  -Wpacked  -Wpadded @gol
227 -Wparentheses  -Wpointer-arith  -Wredundant-decls @gol
228 -Wreturn-type  -Wsequence-point  -Wshadow @gol
229 -Wsign-compare  -Wswitch  -Wsystem-headers @gol
230 -Wtrigraphs  -Wundef  -Wuninitialized @gol
231 -Wunknown-pragmas  -Wunreachable-code @gol
232 -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
233 -Wunused-value  -Wunused-variable  -Wwrite-strings}
235 @item C-only Warning Options
236 @gccoptlist{
237 -Wbad-function-cast  -Wmissing-prototypes  -Wnested-externs @gol
238 -Wstrict-prototypes  -Wtraditional}
240 @item Debugging Options
241 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
242 @gccoptlist{
243 -d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
244 -fdump-unnumbered 
245 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
246 -fdump-tree-original@r{[}-@var{n}@r{]} -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
247 -fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
248 -fmem-report  -fpretend-float @gol
249 -fprofile-arcs  -ftest-coverage  -ftime-report @gol
250 -g  -g@var{level}  -gcoff  -gdwarf  -gdwarf-1  -gdwarf-1+  -gdwarf-2 @gol
251 -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ @gol
252 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
253 -print-multi-directory  -print-multi-lib @gol
254 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
255 -save-temps  -time}
257 @item Optimization Options
258 @xref{Optimize Options,,Options that Control Optimization}.
259 @gccoptlist{
260 -falign-functions=@var{n}  -falign-jumps=@var{n} @gol
261 -falign-labels=@var{n}  -falign-loops=@var{n}  @gol
262 -fbranch-probabilities  -fcaller-saves -fcprop-registers @gol
263 -fcse-follow-jumps  -fcse-skip-blocks  -fdata-sections @gol
264 -fdelayed-branch  -fdelete-null-pointer-checks @gol
265 -fexpensive-optimizations  -ffast-math  -ffloat-store @gol
266 -fforce-addr  -fforce-mem  -ffunction-sections @gol
267 -fgcse  -fgcse-lm  -fgcse-sm @gol
268 -finline-functions  -finline-limit=@var{n}  -fkeep-inline-functions @gol
269 -fkeep-static-consts  -fmerge-constants  -fmerge-all-constants @gol
270 -fmove-all-movables  -fno-default-inline  -fno-defer-pop @gol
271 -fno-function-cse  -fno-guess-branch-probability @gol
272 -fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2 @gol
273 -funsafe-math-optimizations -fno-trapping-math @gol
274 -fomit-frame-pointer  -foptimize-register-move @gol
275 -foptimize-sibling-calls  -freduce-all-givs @gol
276 -fregmove  -frename-registers @gol
277 -frerun-cse-after-loop  -frerun-loop-opt @gol
278 -fschedule-insns  -fschedule-insns2 @gol
279 -fsingle-precision-constant  -fssa -fssa-ccp -fssa-dce @gol
280 -fstrength-reduce  -fstrict-aliasing  -fthread-jumps  -ftrapv @gol
281 -funroll-all-loops  -funroll-loops  @gol
282 --param @var{name}=@var{value}
283 -O  -O0  -O1  -O2  -O3  -Os}
285 @item Preprocessor Options
286 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
287 @gccoptlist{
288 -$  -A@var{question}=@var{answer}  -A-@var{question}@r{[}=@var{answer}@r{]} @gol
289 -C  -dD  -dI  -dM  -dN @gol
290 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
291 -idirafter @var{dir} @gol
292 -include @var{file}  -imacros @var{file} @gol
293 -iprefix @var{file}  -iwithprefix @var{dir} @gol
294 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
295 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  -P  -remap @gol
296 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option}}
298 @item Assembler Option
299 @xref{Assembler Options,,Passing Options to the Assembler}.
300 @gccoptlist{
301 -Wa,@var{option}}
303 @item Linker Options
304 @xref{Link Options,,Options for Linking}.
305 @gccoptlist{
306 @var{object-file-name}  -l@var{library} @gol
307 -nostartfiles  -nodefaultlibs  -nostdlib @gol
308 -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
309 -Wl,@var{option}  -Xlinker @var{option} @gol
310 -u @var{symbol}}
312 @item Directory Options
313 @xref{Directory Options,,Options for Directory Search}.
314 @gccoptlist{
315 -B@var{prefix}  -I@var{dir}  -I-  -L@var{dir}  -specs=@var{file}}
317 @item Target Options
318 @c I wrote this xref this way to avoid overfull hbox. -- rms
319 @xref{Target Options}.
320 @gccoptlist{
321 -b @var{machine}  -V @var{version}}
323 @item Machine Dependent Options
324 @xref{Submodel Options,,Hardware Models and Configurations}.
325 @emph{M680x0 Options}
326 @gccoptlist{
327 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
328 -m68060  -mcpu32  -m5200  -m68881  -mbitfield  -mc68000  -mc68020   @gol
329 -mfpa  -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel @gol
330 -malign-int  -mstrict-align}
332 @emph{M68hc1x Options}
333 @gccoptlist{
334 -m6811  -m6812  -m68hc11  -m68hc12 @gol
335 -mauto-incdec  -mshort  -msoft-reg-count=@var{count}}
337 @emph{VAX Options}
338 @gccoptlist{
339 -mg  -mgnu  -munix}
341 @emph{SPARC Options}
342 @gccoptlist{
343 -mcpu=@var{cpu-type} @gol
344 -mtune=@var{cpu-type} @gol
345 -mcmodel=@var{code-model} @gol
346 -m32  -m64 @gol
347 -mapp-regs  -mbroken-saverestore  -mcypress @gol
348 -mepilogue  -mfaster-structs  -mflat @gol
349 -mfpu  -mhard-float  -mhard-quad-float @gol
350 -mimpure-text  -mlive-g0  -mno-app-regs @gol
351 -mno-epilogue  -mno-faster-structs  -mno-flat  -mno-fpu @gol
352 -mno-impure-text  -mno-stack-bias  -mno-unaligned-doubles @gol
353 -msoft-float  -msoft-quad-float  -msparclite  -mstack-bias @gol
354 -msupersparc  -munaligned-doubles  -mv8}
356 @emph{Convex Options}
357 @gccoptlist{
358 -mc1  -mc2  -mc32  -mc34  -mc38 @gol
359 -margcount  -mnoargcount @gol
360 -mlong32  -mlong64 @gol
361 -mvolatile-cache  -mvolatile-nocache}
363 @emph{AMD29K Options}
364 @gccoptlist{
365 -m29000  -m29050  -mbw  -mnbw  -mdw  -mndw @gol
366 -mlarge  -mnormal  -msmall @gol
367 -mkernel-registers  -mno-reuse-arg-regs @gol
368 -mno-stack-check  -mno-storem-bug @gol
369 -mreuse-arg-regs  -msoft-float  -mstack-check @gol
370 -mstorem-bug  -muser-registers}
372 @emph{ARM Options}
373 @gccoptlist{
374 -mapcs-frame  -mno-apcs-frame @gol
375 -mapcs-26  -mapcs-32 @gol
376 -mapcs-stack-check  -mno-apcs-stack-check @gol
377 -mapcs-float  -mno-apcs-float @gol
378 -mapcs-reentrant  -mno-apcs-reentrant @gol
379 -msched-prolog  -mno-sched-prolog @gol
380 -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
381 -malignment-traps  -mno-alignment-traps @gol
382 -msoft-float  -mhard-float  -mfpe @gol
383 -mthumb-interwork  -mno-thumb-interwork @gol
384 -mcpu=@var{name}  -march=@var{name}  -mfpe=@var{name}  @gol
385 -mstructure-size-boundary=@var{n} @gol
386 -mbsd -mxopen  -mno-symrename @gol
387 -mabort-on-noreturn @gol
388 -mlong-calls  -mno-long-calls @gol
389 -msingle-pic-base  -mno-single-pic-base @gol
390 -mpic-register=@var{reg} @gol
391 -mnop-fun-dllimport @gol
392 -mpoke-function-name @gol
393 -mthumb  -marm @gol
394 -mtpcs-frame  -mtpcs-leaf-frame @gol
395 -mcaller-super-interworking  -mcallee-super-interworking }
397 @emph{MN10200 Options}
398 @gccoptlist{
399 -mrelax}
401 @emph{MN10300 Options}
402 @gccoptlist{
403 -mmult-bug  -mno-mult-bug @gol
404 -mam33  -mno-am33 @gol
405 -mno-crt0  -mrelax}
407 @emph{M32R/D Options}
408 @gccoptlist{
409 -m32rx -m32r -mcode-model=@var{model-type}  -msdata=@var{sdata-type} @gol
410 -G @var{num}}
412 @emph{M88K Options}
413 @gccoptlist{
414 -m88000  -m88100  -m88110  -mbig-pic @gol
415 -mcheck-zero-division  -mhandle-large-shift @gol
416 -midentify-revision  -mno-check-zero-division @gol
417 -mno-ocs-debug-info  -mno-ocs-frame-position @gol
418 -mno-optimize-arg-area  -mno-serialize-volatile @gol
419 -mno-underscores  -mocs-debug-info @gol
420 -mocs-frame-position  -moptimize-arg-area @gol
421 -mserialize-volatile  -mshort-data-@var{num}  -msvr3 @gol
422 -msvr4  -mtrap-large-shift  -muse-div-instruction @gol
423 -mversion-03.00  -mwarn-passed-structs}
425 @emph{RS/6000 and PowerPC Options}
426 @gccoptlist{
427 -mcpu=@var{cpu-type} @gol
428 -mtune=@var{cpu-type} @gol
429 -mpower  -mno-power  -mpower2  -mno-power2 @gol
430 -mpowerpc  -mpowerpc64  -mno-powerpc @gol
431 -maltivec -mno-altivec @gol
432 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
433 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
434 -mnew-mnemonics  -mold-mnemonics @gol
435 -mfull-toc   -mminimal-toc  -mno-fop-in-toc  -mno-sum-in-toc @gol
436 -m64  -m32  -mxl-call  -mno-xl-call  -mthreads  -mpe @gol
437 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
438 -mstring  -mno-string  -mupdate  -mno-update @gol
439 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
440 -mstrict-align  -mno-strict-align  -mrelocatable @gol
441 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
442 -mtoc  -mno-toc -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
443 -mcall-aix -mcall-sysv -mcall-netbsd @gol
444 -maix-struct-return -msvr4-struct-return
445 -mabi=altivec @gol
446 -mprototype  -mno-prototype @gol
447 -msim  -mmvme  -mads  -myellowknife  -memb -msdata @gol
448 -msdata=@var{opt}  -mvxworks -G @var{num}}
450 @emph{RT Options}
451 @gccoptlist{
452 -mcall-lib-mul  -mfp-arg-in-fpregs  -mfp-arg-in-gregs @gol
453 -mfull-fp-blocks  -mhc-struct-return  -min-line-mul @gol
454 -mminimum-fp-blocks  -mnohc-struct-return}
456 @emph{MIPS Options}
457 @gccoptlist{
458 -mabicalls -march=@var{cpu-type} -mtune=@var{cpu=type} @gol
459 -mcpu=@var{cpu-type} -membedded-data  -muninit-const-in-rodata @gol
460 -membedded-pic  -mfp32  -mfp64  -mfused-madd  -mno-fused-madd @gol
461 -mgas  -mgp32  -mgp64 @gol
462 -mgpopt  -mhalf-pic  -mhard-float  -mint64  -mips1 @gol
463 -mips2  -mips3  -mips4  -mlong64  -mlong32  -mlong-calls  -mmemcpy @gol
464 -mmips-as  -mmips-tfile  -mno-abicalls @gol
465 -mno-embedded-data  -mno-uninit-const-in-rodata @gol
466 -mno-embedded-pic  -mno-gpopt  -mno-long-calls @gol
467 -mno-memcpy  -mno-mips-tfile  -mno-rnames  -mno-stats @gol
468 -mrnames  -msoft-float @gol
469 -m4650  -msingle-float  -mmad @gol
470 -mstats  -EL  -EB  -G @var{num}  -nocpp @gol
471 -mabi=32  -mabi=n32  -mabi=64  -mabi=eabi @gol
472 -mfix7000  -mno-crt0 -mflush-func=@var{func} -mno-flush-func}
474 @emph{i386 and x86-64 Options}
475 @gccoptlist{
476 -mcpu=@var{cpu-type}  -march=@var{cpu-type} @gol
477 -mintel-syntax -mieee-fp  -mno-fancy-math-387 @gol
478 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib @gol
479 -mno-wide-multiply  -mrtd  -malign-double @gol
480 -mpreferred-stack-boundary=@var{num} @gol
481 -mmmx  -msse  -m3dnow @gol
482 -mthreads  -mno-align-stringops  -minline-all-stringops @gol
483 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
484 -m96bit-long-double  -mregparm=@var{num}  -momit-leaf-frame-pointer @gol
485 -mno-red-zone@gol
486 -m32 -m64}
488 @emph{HPPA Options}
489 @gccoptlist{
490 -march=@var{architecture-type} @gol
491 -mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
492 -mfast-indirect-calls  -mgas  -mjump-in-delay @gol
493 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
494 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
495 -mno-jump-in-delay  -mno-long-load-store @gol
496 -mno-portable-runtime  -mno-soft-float @gol
497 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
498 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
499 -mschedule=@var{cpu-type}  -mspace-regs}
501 @emph{Intel 960 Options}
502 @gccoptlist{
503 -m@var{cpu-type}  -masm-compat  -mclean-linkage @gol
504 -mcode-align  -mcomplex-addr  -mleaf-procedures @gol
505 -mic-compat  -mic2.0-compat  -mic3.0-compat @gol
506 -mintel-asm  -mno-clean-linkage  -mno-code-align @gol
507 -mno-complex-addr  -mno-leaf-procedures @gol
508 -mno-old-align  -mno-strict-align  -mno-tail-call @gol
509 -mnumerics  -mold-align  -msoft-float  -mstrict-align @gol
510 -mtail-call}
512 @emph{DEC Alpha Options}
513 @gccoptlist{
514 -mfp-regs  -mno-fp-regs  -mno-soft-float  -msoft-float @gol
515 -malpha-as  -mgas @gol
516 -mieee  -mieee-with-inexact  -mieee-conformant @gol
517 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
518 -mtrap-precision=@var{mode}  -mbuild-constants @gol
519 -mcpu=@var{cpu-type} @gol
520 -mbwx  -mno-bwx  -mcix  -mno-cix  -mmax  -mno-max @gol
521 -mmemory-latency=@var{time}}
523 @emph{DEC Alpha/VMS Options}
524 @gccoptlist{
525 -mvms-return-codes}
527 @emph{Clipper Options}
528 @gccoptlist{
529 -mc300  -mc400}
531 @emph{H8/300 Options}
532 @gccoptlist{
533 -mrelax  -mh  -ms  -mint32  -malign-300}
535 @emph{SH Options}
536 @gccoptlist{
537 -m1  -m2  -m3  -m3e @gol
538 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
539 -mb  -ml  -mdalign  -mrelax @gol
540 -mbigtable  -mfmovd  -mhitachi  -mnomacsave @gol
541 -mieee  -misize  -mpadstruct  -mspace @gol
542 -mprefergot  -musermode}
544 @emph{System V Options}
545 @gccoptlist{
546 -Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
548 @emph{ARC Options}
549 @gccoptlist{
550 -EB  -EL @gol
551 -mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
552 -mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
554 @emph{TMS320C3x/C4x Options}
555 @gccoptlist{
556 -mcpu=@var{cpu}  -mbig  -msmall  -mregparm  -mmemparm @gol
557 -mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload @gol
558 -mrpts=@var{count}  -mrptb  -mdb  -mloop-unsigned @gol
559 -mparallel-insns  -mparallel-mpy  -mpreserve-float}
561 @emph{V850 Options}
562 @gccoptlist{
563 -mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
564 -mprolog-function  -mno-prolog-function  -mspace @gol
565 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
566 -mv850  -mbig-switch}
568 @emph{NS32K Options}
569 @gccoptlist{
570 -m32032  -m32332  -m32532  -m32081  -m32381 @gol
571 -mmult-add  -mnomult-add  -msoft-float  -mrtd  -mnortd @gol
572 -mregparam  -mnoregparam  -msb  -mnosb @gol
573 -mbitfield  -mnobitfield  -mhimem  -mnohimem}
575 @emph{AVR Options}
576 @gccoptlist{
577 -mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
578 -mcall-prologues  -mno-tablejump  -mtiny-stack}
580 @emph{MCore Options}
581 @gccoptlist{
582 -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
583 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
584 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
585 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
586 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
588 @emph{MMIX Options}
589 @gccoptlist{
590 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu @gol
591 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols @gol
592 -melf}
594 @emph{IA-64 Options}
595 @gccoptlist{
596 -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
597 -mvolatile-asm-stop  -mb-step  -mregister-names  -mno-sdata @gol
598 -mconstant-gp  -mauto-pic  -minline-divide-min-latency @gol
599 -minline-divide-max-throughput  -mno-dwarf2-asm @gol
600 -mfixed-range=@var{register-range}}
602 @emph{S/390 and zSeries Options}
603 @gccoptlist{
604 -mhard-float  -msoft-float  -mbackchain  -mno-backchain @gol
605 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
606 -m64 -m31 -mdebug -mno-debug}
608 @emph{CRIS Options}
609 @gccoptlist{
610 -mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol
611 -mmax-stack-frame=@var{n} -melinux-stacksize=@var{n} @gol
612 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects @gol
613 -mstack-align -mdata-align -mconst-align @gol
614 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt @gol
615 -melf -maout -melinux -mlinux -sim -sim2}
617 @item Code Generation Options
618 @xref{Code Gen Options,,Options for Code Generation Conventions}.
619 @gccoptlist{
620 -fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
621 -ffixed-@var{reg} -fexceptions @gol
622 -fnon-call-exceptions  -funwind-tables -fasynchronous-unwind-tables @gol
623 -finhibit-size-directive  -finstrument-functions @gol
624 -fno-common  -fno-ident  -fno-gnu-linker @gol
625 -fpcc-struct-return  -fpic  -fPIC @gol
626 -freg-struct-return  -fshared-data  -fshort-enums @gol
627 -fshort-double  -fvolatile @gol
628 -fvolatile-global  -fvolatile-static @gol
629 -fverbose-asm  -fpack-struct  -fstack-check @gol
630 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
631 -fargument-alias  -fargument-noalias @gol
632 -fargument-noalias-global  -fleading-underscore}
633 @end table
635 @menu
636 * Overall Options::     Controlling the kind of output:
637                         an executable, object files, assembler files,
638                         or preprocessed source.
639 * C Dialect Options::   Controlling the variant of C language compiled.
640 * C++ Dialect Options:: Variations on C++.
641 * Objective-C Dialect Options:: Variations on Objective-C.
642 * Language Independent Options:: Controlling how diagnostics should be
643                         formatted.
644 * Warning Options::     How picky should the compiler be?
645 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
646 * Optimize Options::    How much optimization?
647 * Preprocessor Options:: Controlling header files and macro definitions.
648                          Also, getting dependency information for Make.
649 * Assembler Options::   Passing options to the assembler.
650 * Link Options::        Specifying libraries and so on.
651 * Directory Options::   Where to find header files and libraries.
652                         Where to find the compiler executable files.
653 * Spec Files::          How to pass switches to sub-processes.
654 * Target Options::      Running a cross-compiler, or an old version of GCC.
655 @end menu
657 @node Overall Options
658 @section Options Controlling the Kind of Output
660 Compilation can involve up to four stages: preprocessing, compilation
661 proper, assembly and linking, always in that order.  The first three
662 stages apply to an individual source file, and end by producing an
663 object file; linking combines all the object files (those newly
664 compiled, and those specified as input) into an executable file.
666 @cindex file name suffix
667 For any given input file, the file name suffix determines what kind of
668 compilation is done:
670 @table @gcctabopt
671 @item @var{file}.c
672 C source code which must be preprocessed.
674 @item @var{file}.i
675 C source code which should not be preprocessed.
677 @item @var{file}.ii
678 C++ source code which should not be preprocessed.
680 @item @var{file}.m
681 Objective-C source code.  Note that you must link with the library
682 @file{libobjc.a} to make an Objective-C program work.
684 @item @var{file}.mi
685 Objective-C source code which should not be preprocessed.
687 @item @var{file}.h
688 C header file (not to be compiled or linked).
690 @item @var{file}.cc
691 @itemx @var{file}.cp
692 @itemx @var{file}.cxx
693 @itemx @var{file}.cpp
694 @itemx @var{file}.c++
695 @itemx @var{file}.C
696 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
697 the last two letters must both be literally @samp{x}.  Likewise,
698 @samp{.C} refers to a literal capital C@.
700 @item @var{file}.f
701 @itemx @var{file}.for
702 @itemx @var{file}.FOR
703 Fortran source code which should not be preprocessed.
705 @item @var{file}.F
706 @itemx @var{file}.fpp
707 @itemx @var{file}.FPP
708 Fortran source code which must be preprocessed (with the traditional
709 preprocessor).
711 @item @var{file}.r
712 Fortran source code which must be preprocessed with a RATFOR
713 preprocessor (not included with GCC)@.
715 @xref{Overall Options,,Options Controlling the Kind of Output, g77,
716 Using and Porting GNU Fortran}, for more details of the handling of
717 Fortran input files.
719 @c FIXME: Descriptions of Java file types.
720 @c @var{file}.java
721 @c @var{file}.class
722 @c @var{file}.zip
723 @c @var{file}.jar
725 @item @var{file}.ads
726 Ada source code file which contains a library unit declaration (a
727 declaration of a package, subprogram, or generic, or a generic
728 instantiation), or a library unit renaming declaration (a package,
729 generic, or subprogram renaming declaration).  Such files are also
730 called @dfn{specs}.
732 @itemx @var{file}.adb
733 Ada source code file containing a library unit body (a subprogram or
734 package body).  Such files are also called @dfn{bodies}.
736 @c GCC also knows about some suffixes for languages not yet included:
737 @c Pascal:
738 @c @var{file}.p
739 @c @var{file}.pas
741 @item @var{file}.ch
742 @itemx @var{file}.chi
743 CHILL source code (preprocessed with the traditional preprocessor).
745 @item @var{file}.s
746 Assembler code.
748 @item @var{file}.S
749 Assembler code which must be preprocessed.
751 @item @var{other}
752 An object file to be fed straight into linking.
753 Any file name with no recognized suffix is treated this way.
754 @end table
756 @opindex x
757 You can specify the input language explicitly with the @option{-x} option:
759 @table @gcctabopt
760 @item -x @var{language}
761 Specify explicitly the @var{language} for the following input files
762 (rather than letting the compiler choose a default based on the file
763 name suffix).  This option applies to all following input files until
764 the next @option{-x} option.  Possible values for @var{language} are:
765 @example
766 c  c-header  cpp-output
767 c++  c++-cpp-output
768 objective-c  objc-cpp-output
769 assembler  assembler-with-cpp
771 chill
772 f77  f77-cpp-input  ratfor
773 java
774 @end example
776 @item -x none
777 Turn off any specification of a language, so that subsequent files are
778 handled according to their file name suffixes (as they are if @option{-x}
779 has not been used at all).
781 @item -pass-exit-codes
782 @opindex pass-exit-codes
783 Normally the @command{gcc} program will exit with the code of 1 if any
784 phase of the compiler returns a non-success return code.  If you specify
785 @option{-pass-exit-codes}, the @command{gcc} program will instead return with
786 numerically highest error produced by any phase that returned an error
787 indication.
788 @end table
790 If you only want some of the stages of compilation, you can use
791 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
792 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
793 @command{gcc} is to stop.  Note that some combinations (for example,
794 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
796 @table @gcctabopt
797 @item -c
798 @opindex c
799 Compile or assemble the source files, but do not link.  The linking
800 stage simply is not done.  The ultimate output is in the form of an
801 object file for each source file.
803 By default, the object file name for a source file is made by replacing
804 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
806 Unrecognized input files, not requiring compilation or assembly, are
807 ignored.
809 @item -S
810 @opindex S
811 Stop after the stage of compilation proper; do not assemble.  The output
812 is in the form of an assembler code file for each non-assembler input
813 file specified.
815 By default, the assembler file name for a source file is made by
816 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
818 Input files that don't require compilation are ignored.
820 @item -E
821 @opindex E
822 Stop after the preprocessing stage; do not run the compiler proper.  The
823 output is in the form of preprocessed source code, which is sent to the
824 standard output.
826 Input files which don't require preprocessing are ignored.
828 @cindex output file option
829 @item -o @var{file}
830 @opindex o
831 Place output in file @var{file}.  This applies regardless to whatever
832 sort of output is being produced, whether it be an executable file,
833 an object file, an assembler file or preprocessed C code.
835 Since only one output file can be specified, it does not make sense to
836 use @option{-o} when compiling more than one input file, unless you are
837 producing an executable file as output.
839 If @option{-o} is not specified, the default is to put an executable file
840 in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
841 @file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
842 all preprocessed C source on standard output.
844 @item -v
845 @opindex v
846 Print (on standard error output) the commands executed to run the stages
847 of compilation.  Also print the version number of the compiler driver
848 program and of the preprocessor and the compiler proper.
850 @item -pipe
851 @opindex pipe
852 Use pipes rather than temporary files for communication between the
853 various stages of compilation.  This fails to work on some systems where
854 the assembler is unable to read from a pipe; but the GNU assembler has
855 no trouble.
857 @item --help
858 @opindex help
859 Print (on the standard output) a description of the command line options
860 understood by @command{gcc}.  If the @option{-v} option is also specified
861 then @option{--help} will also be passed on to the various processes
862 invoked by @command{gcc}, so that they can display the command line options
863 they accept.  If the @option{-W} option is also specified then command
864 line options which have no documentation associated with them will also
865 be displayed.
867 @item --target-help
868 @opindex target-help
869 Print (on the standard output) a description of target specific command
870 line options for each tool.
871 @end table
873 @node Invoking G++
874 @section Compiling C++ Programs
876 @cindex suffixes for C++ source
877 @cindex C++ source file suffixes
878 C++ source files conventionally use one of the suffixes @samp{.C},
879 @samp{.cc}, @samp{.cpp}, @samp{.c++}, @samp{.cp}, or @samp{.cxx};
880 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
881 files with these names and compiles them as C++ programs even if you
882 call the compiler the same way as for compiling C programs (usually with
883 the name @command{gcc}).
885 @findex g++
886 @findex c++
887 However, C++ programs often require class libraries as well as a
888 compiler that understands the C++ language---and under some
889 circumstances, you might want to compile programs from standard input,
890 or otherwise without a suffix that flags them as C++ programs.
891 @command{g++} is a program that calls GCC with the default language
892 set to C++, and automatically specifies linking against the C++
893 library.  On many systems, @command{g++} is also
894 installed with the name @command{c++}.
896 @cindex invoking @command{g++}
897 When you compile C++ programs, you may specify many of the same
898 command-line options that you use for compiling programs in any
899 language; or command-line options meaningful for C and related
900 languages; or options that are meaningful only for C++ programs.
901 @xref{C Dialect Options,,Options Controlling C Dialect}, for
902 explanations of options for languages related to C@.
903 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
904 explanations of options that are meaningful only for C++ programs.
906 @node C Dialect Options
907 @section Options Controlling C Dialect
908 @cindex dialect options
909 @cindex language dialect options
910 @cindex options, dialect
912 The following options control the dialect of C (or languages derived
913 from C, such as C++ and Objective-C) that the compiler accepts:
915 @table @gcctabopt
916 @cindex ANSI support
917 @cindex ISO support
918 @item -ansi
919 @opindex ansi
920 In C mode, support all ISO C89 programs.  In C++ mode,
921 remove GNU extensions that conflict with ISO C++.
923 This turns off certain features of GCC that are incompatible with ISO
924 C89 (when compiling C code), or of standard C++ (when compiling C++ code),
925 such as the @code{asm} and @code{typeof} keywords, and
926 predefined macros such as @code{unix} and @code{vax} that identify the
927 type of system you are using.  It also enables the undesirable and
928 rarely used ISO trigraph feature.  For the C compiler,
929 it disables recognition of C++ style @samp{//} comments as well as
930 the @code{inline} keyword.
932 The alternate keywords @code{__asm__}, @code{__extension__},
933 @code{__inline__} and @code{__typeof__} continue to work despite
934 @option{-ansi}.  You would not want to use them in an ISO C program, of
935 course, but it is useful to put them in header files that might be included
936 in compilations done with @option{-ansi}.  Alternate predefined macros
937 such as @code{__unix__} and @code{__vax__} are also available, with or
938 without @option{-ansi}.
940 The @option{-ansi} option does not cause non-ISO programs to be
941 rejected gratuitously.  For that, @option{-pedantic} is required in
942 addition to @option{-ansi}.  @xref{Warning Options}.
944 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
945 option is used.  Some header files may notice this macro and refrain
946 from declaring certain functions or defining certain macros that the
947 ISO standard doesn't call for; this is to avoid interfering with any
948 programs that might use these names for other things.
950 Functions which would normally be built in but do not have semantics
951 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
952 functions with @option{-ansi} is used.  @xref{Other Builtins,,Other
953 built-in functions provided by GCC}, for details of the functions
954 affected.
956 @item -std=
957 @opindex std
958 Determine the language standard.  This option is currently only
959 supported when compiling C@.  A value for this option must be provided;
960 possible values are
962 @table @samp
963 @item c89
964 @itemx iso9899:1990
965 ISO C89 (same as @option{-ansi}).
967 @item iso9899:199409
968 ISO C89 as modified in amendment 1.
970 @item c99
971 @itemx c9x
972 @itemx iso9899:1999
973 @itemx iso9899:199x
974 ISO C99.  Note that this standard is not yet fully supported; see
975 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
976 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
978 @item gnu89
979 Default, ISO C89 plus GNU extensions (including some C99 features).
981 @item gnu99
982 @item gnu9x
983 ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
984 this will become the default.  The name @samp{gnu9x} is deprecated.
986 @end table
988 Even when this option is not specified, you can still use some of the
989 features of newer standards in so far as they do not conflict with
990 previous C standards.  For example, you may use @code{__restrict__} even
991 when @option{-std=c99} is not specified.
993 The @option{-std} options specifying some version of ISO C have the same
994 effects as @option{-ansi}, except that features that were not in ISO C89
995 but are in the specified version (for example, @samp{//} comments and
996 the @code{inline} keyword in ISO C99) are not disabled.
998 @xref{Standards,,Language Standards Supported by GCC}, for details of
999 these standard versions.
1001 @item -aux-info @var{filename}
1002 @opindex aux-info
1003 Output to the given filename prototyped declarations for all functions
1004 declared and/or defined in a translation unit, including those in header
1005 files.  This option is silently ignored in any language other than C@.
1007 Besides declarations, the file indicates, in comments, the origin of
1008 each declaration (source file and line), whether the declaration was
1009 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1010 @samp{O} for old, respectively, in the first character after the line
1011 number and the colon), and whether it came from a declaration or a
1012 definition (@samp{C} or @samp{F}, respectively, in the following
1013 character).  In the case of function definitions, a K&R-style list of
1014 arguments followed by their declarations is also provided, inside
1015 comments, after the declaration.
1017 @item -fno-asm
1018 @opindex fno-asm
1019 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1020 keyword, so that code can use these words as identifiers.  You can use
1021 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1022 instead.  @option{-ansi} implies @option{-fno-asm}.
1024 In C++, this switch only affects the @code{typeof} keyword, since
1025 @code{asm} and @code{inline} are standard keywords.  You may want to
1026 use the @option{-fno-gnu-keywords} flag instead, which has the same
1027 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1028 switch only affects the @code{asm} and @code{typeof} keywords, since
1029 @code{inline} is a standard keyword in ISO C99.
1031 @item -fno-builtin
1032 @itemx -fno-builtin-@var{function} @r{(C and Objective-C only)}
1033 @opindex fno-builtin
1034 @cindex built-in functions
1035 Don't recognize built-in functions that do not begin with
1036 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1037 functions provided by GCC}, for details of the functions affected,
1038 including those which are not built-in functions when @option{-ansi} or
1039 @option{-std} options for strict ISO C conformance are used because they
1040 do not have an ISO standard meaning.
1042 GCC normally generates special code to handle certain built-in functions
1043 more efficiently; for instance, calls to @code{alloca} may become single
1044 instructions that adjust the stack directly, and calls to @code{memcpy}
1045 may become inline copy loops.  The resulting code is often both smaller
1046 and faster, but since the function calls no longer appear as such, you
1047 cannot set a breakpoint on those calls, nor can you change the behavior
1048 of the functions by linking with a different library.
1050 In C++, @option{-fno-builtin} is always in effect.  The @option{-fbuiltin}
1051 option has no effect.  Therefore, in C++, the only way to get the
1052 optimization benefits of built-in functions is to call the function
1053 using the @samp{__builtin_} prefix.  The GNU C++ Standard Library uses
1054 built-in functions to implement many functions (like
1055 @code{std::strchr}), so that you automatically get efficient code.
1057 With the @option{-fno-builtin-@var{function}} option, not available
1058 when compiling C++, only the built-in function @var{function} is
1059 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1060 function is named this is not built-in in this version of GCC, this
1061 option is ignored.  There is no corresponding
1062 @option{-fbuiltin-@var{function}} option; if you wish to enable
1063 built-in functions selectively when using @option{-fno-builtin} or
1064 @option{-ffreestanding}, you may define macros such as:
1066 @smallexample
1067 #define abs(n)          __builtin_abs ((n))
1068 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1069 @end smallexample
1071 @item -fhosted
1072 @opindex fhosted
1073 @cindex hosted environment
1075 Assert that compilation takes place in a hosted environment.  This implies
1076 @option{-fbuiltin}.  A hosted environment is one in which the
1077 entire standard library is available, and in which @code{main} has a return
1078 type of @code{int}.  Examples are nearly everything except a kernel.
1079 This is equivalent to @option{-fno-freestanding}.
1081 @item -ffreestanding
1082 @opindex ffreestanding
1083 @cindex hosted environment
1085 Assert that compilation takes place in a freestanding environment.  This
1086 implies @option{-fno-builtin}.  A freestanding environment
1087 is one in which the standard library may not exist, and program startup may
1088 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1089 This is equivalent to @option{-fno-hosted}.
1091 @xref{Standards,,Language Standards Supported by GCC}, for details of
1092 freestanding and hosted environments.
1094 @item -trigraphs
1095 @opindex trigraphs
1096 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1097 options for strict ISO C conformance) implies @option{-trigraphs}.
1099 @cindex traditional C language
1100 @cindex C language, traditional
1101 @item -traditional
1102 @opindex traditional
1103 Attempt to support some aspects of traditional C compilers.
1104 Specifically:
1106 @itemize @bullet
1107 @item
1108 All @code{extern} declarations take effect globally even if they
1109 are written inside of a function definition.  This includes implicit
1110 declarations of functions.
1112 @item
1113 The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
1114 and @code{volatile} are not recognized.  (You can still use the
1115 alternative keywords such as @code{__typeof__}, @code{__inline__}, and
1116 so on.)
1118 @item
1119 Comparisons between pointers and integers are always allowed.
1121 @item
1122 Integer types @code{unsigned short} and @code{unsigned char} promote
1123 to @code{unsigned int}.
1125 @item
1126 Out-of-range floating point literals are not an error.
1128 @item
1129 Certain constructs which ISO regards as a single invalid preprocessing
1130 number, such as @samp{0xe-0xd}, are treated as expressions instead.
1132 @item
1133 String ``constants'' are not necessarily constant; they are stored in
1134 writable space, and identical looking constants are allocated
1135 separately.  (This is the same as the effect of
1136 @option{-fwritable-strings}.)
1138 @cindex @code{longjmp} and automatic variables
1139 @item
1140 All automatic variables not declared @code{register} are preserved by
1141 @code{longjmp}.  Ordinarily, GNU C follows ISO C: automatic variables
1142 not declared @code{volatile} may be clobbered.
1144 @item
1145 @cindex @samp{\x}
1146 @cindex @samp{\a}
1147 @cindex escape sequences, traditional
1148 The character escape sequences @samp{\x} and @samp{\a} evaluate as the
1149 literal characters @samp{x} and @samp{a} respectively.  Without
1150 @w{@option{-traditional}}, @samp{\x} is a prefix for the hexadecimal
1151 representation of a character, and @samp{\a} produces a bell.
1152 @end itemize
1154 This option is deprecated and may be removed.
1156 You may wish to use @option{-fno-builtin} as well as @option{-traditional}
1157 if your program uses names that are normally GNU C built-in functions for
1158 other purposes of its own.
1160 You cannot use @option{-traditional} if you include any header files that
1161 rely on ISO C features.  Some vendors are starting to ship systems with
1162 ISO C header files and you cannot use @option{-traditional} on such
1163 systems to compile files that include any system headers.
1165 The @option{-traditional} option also enables @option{-traditional-cpp}.
1167 @item -traditional-cpp
1168 @opindex traditional-cpp
1169 Attempt to support some aspects of traditional C preprocessors.
1170 See the GNU CPP manual for details.
1172 @item -fcond-mismatch
1173 @opindex fcond-mismatch
1174 Allow conditional expressions with mismatched types in the second and
1175 third arguments.  The value of such an expression is void.  This option
1176 is not supported for C++.
1178 @item -funsigned-char
1179 @opindex funsigned-char
1180 Let the type @code{char} be unsigned, like @code{unsigned char}.
1182 Each kind of machine has a default for what @code{char} should
1183 be.  It is either like @code{unsigned char} by default or like
1184 @code{signed char} by default.
1186 Ideally, a portable program should always use @code{signed char} or
1187 @code{unsigned char} when it depends on the signedness of an object.
1188 But many programs have been written to use plain @code{char} and
1189 expect it to be signed, or expect it to be unsigned, depending on the
1190 machines they were written for.  This option, and its inverse, let you
1191 make such a program work with the opposite default.
1193 The type @code{char} is always a distinct type from each of
1194 @code{signed char} or @code{unsigned char}, even though its behavior
1195 is always just like one of those two.
1197 @item -fsigned-char
1198 @opindex fsigned-char
1199 Let the type @code{char} be signed, like @code{signed char}.
1201 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1202 the negative form of @option{-funsigned-char}.  Likewise, the option
1203 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1205 @item -fsigned-bitfields
1206 @itemx -funsigned-bitfields
1207 @itemx -fno-signed-bitfields
1208 @itemx -fno-unsigned-bitfields
1209 @opindex fsigned-bitfields
1210 @opindex funsigned-bitfields
1211 @opindex fno-signed-bitfields
1212 @opindex fno-unsigned-bitfields
1213 These options control whether a bit-field is signed or unsigned, when the
1214 declaration does not use either @code{signed} or @code{unsigned}.  By
1215 default, such a bit-field is signed, because this is consistent: the
1216 basic integer types such as @code{int} are signed types.
1218 However, when @option{-traditional} is used, bit-fields are all unsigned
1219 no matter what.
1221 @item -fwritable-strings
1222 @opindex fwritable-strings
1223 Store string constants in the writable data segment and don't uniquize
1224 them.  This is for compatibility with old programs which assume they can
1225 write into string constants.  The option @option{-traditional} also has
1226 this effect.
1228 Writing into string constants is a very bad idea; ``constants'' should
1229 be constant.
1231 @item -fallow-single-precision
1232 @opindex fallow-single-precision
1233 Do not promote single precision math operations to double precision,
1234 even when compiling with @option{-traditional}.
1236 Traditional K&R C promotes all floating point operations to double
1237 precision, regardless of the sizes of the operands.   On the
1238 architecture for which you are compiling, single precision may be faster
1239 than double precision.   If you must use @option{-traditional}, but want
1240 to use single precision operations when the operands are single
1241 precision, use this option.   This option has no effect when compiling
1242 with ISO or GNU C conventions (the default).
1244 @item -fshort-wchar
1245 @opindex fshort-wchar
1246 Override the underlying type for @samp{wchar_t} to be @samp{short
1247 unsigned int} instead of the default for the target.  This option is
1248 useful for building programs to run under WINE@.
1249 @end table
1251 @node C++ Dialect Options
1252 @section Options Controlling C++ Dialect
1254 @cindex compiler options, C++
1255 @cindex C++ options, command line
1256 @cindex options, C++
1257 This section describes the command-line options that are only meaningful
1258 for C++ programs; but you can also use most of the GNU compiler options
1259 regardless of what language your program is in.  For example, you
1260 might compile a file @code{firstClass.C} like this:
1262 @example
1263 g++ -g -frepo -O -c firstClass.C
1264 @end example
1266 @noindent
1267 In this example, only @option{-frepo} is an option meant
1268 only for C++ programs; you can use the other options with any
1269 language supported by GCC@.
1271 Here is a list of options that are @emph{only} for compiling C++ programs:
1273 @table @gcctabopt
1274 @item -fno-access-control
1275 @opindex fno-access-control
1276 Turn off all access checking.  This switch is mainly useful for working
1277 around bugs in the access control code.
1279 @item -fcheck-new
1280 @opindex fcheck-new
1281 Check that the pointer returned by @code{operator new} is non-null
1282 before attempting to modify the storage allocated.  The current Working
1283 Paper requires that @code{operator new} never return a null pointer, so
1284 this check is normally unnecessary.
1286 An alternative to using this option is to specify that your
1287 @code{operator new} does not throw any exceptions; if you declare it
1288 @samp{throw()}, G++ will check the return value.  See also @samp{new
1289 (nothrow)}.
1291 @item -fconserve-space
1292 @opindex fconserve-space
1293 Put uninitialized or runtime-initialized global variables into the
1294 common segment, as C does.  This saves space in the executable at the
1295 cost of not diagnosing duplicate definitions.  If you compile with this
1296 flag and your program mysteriously crashes after @code{main()} has
1297 completed, you may have an object that is being destroyed twice because
1298 two definitions were merged.
1300 This option is no longer useful on most targets, now that support has
1301 been added for putting variables into BSS without making them common.
1303 @item -fno-const-strings
1304 @opindex fno-const-strings
1305 Give string constants type @code{char *} instead of type @code{const
1306 char *}.  By default, G++ uses type @code{const char *} as required by
1307 the standard.  Even if you use @option{-fno-const-strings}, you cannot
1308 actually modify the value of a string constant, unless you also use
1309 @option{-fwritable-strings}.
1311 This option might be removed in a future release of G++.  For maximum
1312 portability, you should structure your code so that it works with
1313 string constants that have type @code{const char *}.
1315 @item -fdollars-in-identifiers
1316 @opindex fdollars-in-identifiers
1317 Accept @samp{$} in identifiers.  You can also explicitly prohibit use of
1318 @samp{$} with the option @option{-fno-dollars-in-identifiers}.  (GNU C allows
1319 @samp{$} by default on most target systems, but there are a few exceptions.)
1320 Traditional C allowed the character @samp{$} to form part of
1321 identifiers.  However, ISO C and C++ forbid @samp{$} in identifiers.
1323 @item -fno-elide-constructors
1324 @opindex fno-elide-constructors
1325 The C++ standard allows an implementation to omit creating a temporary
1326 which is only used to initialize another object of the same type.
1327 Specifying this option disables that optimization, and forces G++ to
1328 call the copy constructor in all cases.
1330 @item -fno-enforce-eh-specs
1331 @opindex fno-enforce-eh-specs
1332 Don't check for violation of exception specifications at runtime.  This
1333 option violates the C++ standard, but may be useful for reducing code
1334 size in production builds, much like defining @samp{NDEBUG}.  The compiler
1335 will still optimize based on the exception specifications.
1337 @item -fexternal-templates
1338 @opindex fexternal-templates
1340 Cause @samp{#pragma interface} and @samp{implementation} to apply to
1341 template instantiation; template instances are emitted or not according
1342 to the location of the template definition.  @xref{Template
1343 Instantiation}, for more information.
1345 This option is deprecated.
1347 @item -falt-external-templates
1348 @opindex falt-external-templates
1349 Similar to @option{-fexternal-templates}, but template instances are
1350 emitted or not according to the place where they are first instantiated.
1351 @xref{Template Instantiation}, for more information.
1353 This option is deprecated.
1355 @item -ffor-scope
1356 @itemx -fno-for-scope
1357 @opindex ffor-scope
1358 @opindex fno-for-scope
1359 If @option{-ffor-scope} is specified, the scope of variables declared in
1360 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1361 as specified by the C++ standard.
1362 If @option{-fno-for-scope} is specified, the scope of variables declared in
1363 a @i{for-init-statement} extends to the end of the enclosing scope,
1364 as was the case in old versions of G++, and other (traditional)
1365 implementations of C++.
1367 The default if neither flag is given to follow the standard,
1368 but to allow and give a warning for old-style code that would
1369 otherwise be invalid, or have different behavior.
1371 @item -fno-gnu-keywords
1372 @opindex fno-gnu-keywords
1373 Do not recognize @code{typeof} as a keyword, so that code can use this
1374 word as an identifier.  You can use the keyword @code{__typeof__} instead.
1375 @option{-ansi} implies @option{-fno-gnu-keywords}.
1377 @item -fno-implicit-templates
1378 @opindex fno-implicit-templates
1379 Never emit code for non-inline templates which are instantiated
1380 implicitly (i.e.@: by use); only emit code for explicit instantiations.
1381 @xref{Template Instantiation}, for more information.
1383 @item -fno-implicit-inline-templates
1384 @opindex fno-implicit-inline-templates
1385 Don't emit code for implicit instantiations of inline templates, either.
1386 The default is to handle inlines differently so that compiles with and
1387 without optimization will need the same set of explicit instantiations.
1389 @item -fno-implement-inlines
1390 @opindex fno-implement-inlines
1391 To save space, do not emit out-of-line copies of inline functions
1392 controlled by @samp{#pragma implementation}.  This will cause linker
1393 errors if these functions are not inlined everywhere they are called.
1395 @item -fms-extensions
1396 @opindex fms-extensions
1397 Disable pedantic warnings about constructs used in MFC, such as implicit
1398 int and getting a pointer to member function via non-standard syntax.
1400 @item -fno-nonansi-builtins
1401 @opindex fno-nonansi-builtins
1402 Disable built-in declarations of functions that are not mandated by
1403 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1404 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
1406 @item -fno-operator-names
1407 @opindex fno-operator-names
1408 Do not treat the operator name keywords @code{and}, @code{bitand},
1409 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1410 synonyms as keywords.
1412 @item -fno-optional-diags
1413 @opindex fno-optional-diags
1414 Disable diagnostics that the standard says a compiler does not need to
1415 issue.  Currently, the only such diagnostic issued by G++ is the one for
1416 a name having multiple meanings within a class.
1418 @item -fpermissive
1419 @opindex fpermissive
1420 Downgrade messages about nonconformant code from errors to warnings.  By
1421 default, G++ effectively sets @option{-pedantic-errors} without
1422 @option{-pedantic}; this option reverses that.  This behavior and this
1423 option are superseded by @option{-pedantic}, which works as it does for GNU C@.
1425 @item -frepo
1426 @opindex frepo
1427 Enable automatic template instantiation at link time.  This option also
1428 implies @option{-fno-implicit-templates}.  @xref{Template
1429 Instantiation}, for more information.
1431 @item -fno-rtti
1432 @opindex fno-rtti
1433 Disable generation of information about every class with virtual
1434 functions for use by the C++ runtime type identification features
1435 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1436 of the language, you can save some space by using this flag.  Note that
1437 exception handling uses the same information, but it will generate it as
1438 needed.
1440 @item -fstats
1441 @opindex fstats
1442 Emit statistics about front-end processing at the end of the compilation.
1443 This information is generally only useful to the G++ development team.
1445 @item -ftemplate-depth-@var{n}
1446 @opindex ftemplate-depth
1447 Set the maximum instantiation depth for template classes to @var{n}.
1448 A limit on the template instantiation depth is needed to detect
1449 endless recursions during template class instantiation.  ANSI/ISO C++
1450 conforming programs must not rely on a maximum depth greater than 17.
1452 @item -fuse-cxa-atexit
1453 @opindex fuse-cxa-atexit
1454 Register destructors for objects with static storage duration with the
1455 @code{__cxa_atexit} function rather than the @code{atexit} function.
1456 This option is required for fully standards-compliant handling of static
1457 destructors, but will only work if your C library supports
1458 @code{__cxa_atexit}.
1460 @item -fvtable-gc
1461 @opindex fvtable-gc
1462 Emit special relocations for vtables and virtual function references
1463 so that the linker can identify unused virtual functions and zero out
1464 vtable slots that refer to them.  This is most useful with
1465 @option{-ffunction-sections} and @option{-Wl,--gc-sections}, in order to
1466 also discard the functions themselves.
1468 This optimization requires GNU as and GNU ld.  Not all systems support
1469 this option.  @option{-Wl,--gc-sections} is ignored without @option{-static}.
1471 @item -fno-weak
1472 @opindex fno-weak
1473 Do not use weak symbol support, even if it is provided by the linker.
1474 By default, G++ will use weak symbols if they are available.  This
1475 option exists only for testing, and should not be used by end-users;
1476 it will result in inferior code and has no benefits.  This option may
1477 be removed in a future release of G++.
1479 @item -nostdinc++
1480 @opindex nostdinc++
1481 Do not search for header files in the standard directories specific to
1482 C++, but do still search the other standard directories.  (This option
1483 is used when building the C++ library.)
1484 @end table
1486 In addition, these optimization, warning, and code generation options
1487 have meanings only for C++ programs:
1489 @table @gcctabopt
1490 @item -fno-default-inline
1491 @opindex fno-default-inline
1492 Do not assume @samp{inline} for functions defined inside a class scope.
1493 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
1494 functions will have linkage like inline functions; they just won't be
1495 inlined by default.
1497 @item -Wctor-dtor-privacy @r{(C++ only)}
1498 @opindex Wctor-dtor-privacy
1499 Warn when a class seems unusable, because all the constructors or
1500 destructors in a class are private and the class has no friends or
1501 public static member functions.
1503 @item -Wnon-virtual-dtor @r{(C++ only)}
1504 @opindex Wnon-virtual-dtor
1505 Warn when a class declares a non-virtual destructor that should probably
1506 be virtual, because it looks like the class will be used polymorphically.
1508 @item -Wreorder @r{(C++ only)}
1509 @opindex Wreorder
1510 @cindex reordering, warning
1511 @cindex warning for reordering of member initializers
1512 Warn when the order of member initializers given in the code does not
1513 match the order in which they must be executed.  For instance:
1515 @smallexample
1516 struct A @{
1517   int i;
1518   int j;
1519   A(): j (0), i (1) @{ @}
1521 @end smallexample
1523 Here the compiler will warn that the member initializers for @samp{i}
1524 and @samp{j} will be rearranged to match the declaration order of the
1525 members.
1526 @end table
1528 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
1530 @table @gcctabopt
1531 @item -Weffc++ @r{(C++ only)}
1532 @opindex Weffc++
1533 Warn about violations of various style guidelines from Scott Meyers'
1534 @cite{Effective C++} books.  If you use this option, you should be aware
1535 that the standard library headers do not obey all of these guidelines;
1536 you can use @samp{grep -v} to filter out those warnings.
1538 @item -Wno-deprecated @r{(C++ only)}
1539 @opindex Wno-deprecated
1540 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
1542 @item -Wno-non-template-friend @r{(C++ only)}
1543 @opindex Wno-non-template-friend
1544 Disable warnings when non-templatized friend functions are declared
1545 within a template.  With the advent of explicit template specification
1546 support in G++, if the name of the friend is an unqualified-id (i.e.,
1547 @samp{friend foo(int)}), the C++ language specification demands that the
1548 friend declare or define an ordinary, nontemplate function.  (Section
1549 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
1550 could be interpreted as a particular specialization of a templatized
1551 function.  Because this non-conforming behavior is no longer the default
1552 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
1553 check existing code for potential trouble spots, and is on by default.
1554 This new compiler behavior can be turned off with
1555 @option{-Wno-non-template-friend} which keeps the conformant compiler code
1556 but disables the helpful warning.
1558 @item -Wold-style-cast @r{(C++ only)}
1559 @opindex Wold-style-cast
1560 Warn if an old-style (C-style) cast is used within a C++ program.  The
1561 new-style casts (@samp{static_cast}, @samp{reinterpret_cast}, and
1562 @samp{const_cast}) are less vulnerable to unintended effects, and much
1563 easier to grep for.
1565 @item -Woverloaded-virtual @r{(C++ only)}
1566 @opindex Woverloaded-virtual
1567 @cindex overloaded virtual fn, warning
1568 @cindex warning for overloaded virtual fn
1569 Warn when a function declaration hides virtual functions from a
1570 base class.  For example, in:
1572 @smallexample
1573 struct A @{
1574   virtual void f();
1577 struct B: public A @{
1578   void f(int);
1580 @end smallexample
1582 the @code{A} class version of @code{f} is hidden in @code{B}, and code
1583 like this:
1585 @smallexample
1586 B* b;
1587 b->f();
1588 @end smallexample
1590 will fail to compile.
1592 @item -Wno-pmf-conversions @r{(C++ only)}
1593 @opindex Wno-pmf-conversions
1594 Disable the diagnostic for converting a bound pointer to member function
1595 to a plain pointer.
1597 @item -Wsign-promo @r{(C++ only)}
1598 @opindex Wsign-promo
1599 Warn when overload resolution chooses a promotion from unsigned or
1600 enumeral type to a signed type over a conversion to an unsigned type of
1601 the same size.  Previous versions of G++ would try to preserve
1602 unsignedness, but the standard mandates the current behavior.
1604 @item -Wsynth @r{(C++ only)}
1605 @opindex Wsynth
1606 @cindex warning for synthesized methods
1607 @cindex synthesized methods, warning
1608 Warn when G++'s synthesis behavior does not match that of cfront.  For
1609 instance:
1611 @smallexample
1612 struct A @{
1613   operator int ();
1614   A& operator = (int);
1617 main ()
1619   A a,b;
1620   a = b;
1622 @end smallexample
1624 In this example, G++ will synthesize a default @samp{A& operator =
1625 (const A&);}, while cfront will use the user-defined @samp{operator =}.
1626 @end table
1628 @node Objective-C Dialect Options
1629 @section Options Controlling Objective-C Dialect
1631 @cindex compiler options, Objective-C
1632 @cindex Objective-C options, command line
1633 @cindex options, Objective-C
1634 This section describes the command-line options that are only meaningful
1635 for Objective-C programs; but you can also use most of the GNU compiler
1636 options regardless of what language your program is in.  For example,
1637 you might compile a file @code{some_class.m} like this:
1639 @example
1640 gcc -g -fgnu-runtime -O -c some_class.m
1641 @end example
1643 @noindent
1644 In this example, only @option{-fgnu-runtime} is an option meant only for
1645 Objective-C programs; you can use the other options with any language
1646 supported by GCC@.
1648 Here is a list of options that are @emph{only} for compiling Objective-C
1649 programs:
1651 @table @gcctabopt
1652 @item -fconstant-string-class=@var{class-name}
1653 @opindex fconstant-string-class
1654 Use @var{class-name} as the name of the class to instantiate for each
1655 literal string specified with the syntax @code{@@"@dots{}"}.  The default
1656 class name is @code{NXConstantString}.
1658 @item -fgnu-runtime
1659 @opindex fgnu-runtime
1660 Generate object code compatible with the standard GNU Objective-C
1661 runtime.  This is the default for most types of systems.
1663 @item -fnext-runtime
1664 @opindex fnext-runtime
1665 Generate output compatible with the NeXT runtime.  This is the default
1666 for NeXT-based systems, including Darwin and Mac OS X@.
1668 @item -gen-decls
1669 @opindex gen-decls
1670 Dump interface declarations for all classes seen in the source file to a
1671 file named @file{@var{sourcename}.decl}.
1673 @item -Wno-protocol
1674 @opindex Wno-protocol
1675 Do not warn if methods required by a protocol are not implemented
1676 in the class adopting it.
1678 @item -Wselector
1679 @opindex Wselector
1680 Warn if a selector has multiple methods of different types defined.
1682 @c not documented because only avail via -Wp
1683 @c @item -print-objc-runtime-info
1685 @end table
1687 @node Language Independent Options
1688 @section Options to Control Diagnostic Messages Formatting
1689 @cindex options to control diagnostics formatting
1690 @cindex diagnostic messages
1691 @cindex message formatting
1693 Traditionally, diagnostic messages have been formatted irrespective of
1694 the output device's aspect (e.g.@: its width, @dots{}).  The options described
1695 below can be used to control the diagnostic messages formatting
1696 algorithm, e.g.@: how many characters per line, how often source location
1697 information should be reported.  Right now, only the C++ front end can
1698 honor these options.  However it is expected, in the near future, that
1699 the remaining front ends would be able to digest them correctly.
1701 @table @gcctabopt
1702 @item -fmessage-length=@var{n}
1703 @opindex fmessage-length
1704 Try to format error messages so that they fit on lines of about @var{n}
1705 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
1706 the front ends supported by GCC@.  If @var{n} is zero, then no
1707 line-wrapping will be done; each error message will appear on a single
1708 line.
1710 @opindex fdiagnostics-show-location
1711 @item -fdiagnostics-show-location=once
1712 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
1713 reporter to emit @emph{once} source location information; that is, in
1714 case the message is too long to fit on a single physical line and has to
1715 be wrapped, the source location won't be emitted (as prefix) again,
1716 over and over, in subsequent continuation lines.  This is the default
1717 behavior.
1719 @item -fdiagnostics-show-location=every-line
1720 Only meaningful in line-wrapping mode.  Instructs the diagnostic
1721 messages reporter to emit the same source location information (as
1722 prefix) for physical lines that result from the process of breaking
1723 a message which is too long to fit on a single line.
1725 @end table
1727 @node Warning Options
1728 @section Options to Request or Suppress Warnings
1729 @cindex options to control warnings
1730 @cindex warning messages
1731 @cindex messages, warning
1732 @cindex suppressing warnings
1734 Warnings are diagnostic messages that report constructions which
1735 are not inherently erroneous but which are risky or suggest there
1736 may have been an error.
1738 You can request many specific warnings with options beginning @samp{-W},
1739 for example @option{-Wimplicit} to request warnings on implicit
1740 declarations.  Each of these specific warning options also has a
1741 negative form beginning @samp{-Wno-} to turn off warnings;
1742 for example, @option{-Wno-implicit}.  This manual lists only one of the
1743 two forms, whichever is not the default.
1745 These options control the amount and kinds of warnings produced by GCC:
1747 @table @gcctabopt
1748 @cindex syntax checking
1749 @item -fsyntax-only
1750 @opindex fsyntax-only
1751 Check the code for syntax errors, but don't do anything beyond that.
1753 @item -pedantic
1754 @opindex pedantic
1755 Issue all the warnings demanded by strict ISO C and ISO C++;
1756 reject all programs that use forbidden extensions, and some other
1757 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
1758 version of the ISO C standard specified by any @option{-std} option used.
1760 Valid ISO C and ISO C++ programs should compile properly with or without
1761 this option (though a rare few will require @option{-ansi} or a
1762 @option{-std} option specifying the required version of ISO C)@.  However,
1763 without this option, certain GNU extensions and traditional C and C++
1764 features are supported as well.  With this option, they are rejected.
1766 @option{-pedantic} does not cause warning messages for use of the
1767 alternate keywords whose names begin and end with @samp{__}.  Pedantic
1768 warnings are also disabled in the expression that follows
1769 @code{__extension__}.  However, only system header files should use
1770 these escape routes; application programs should avoid them.
1771 @xref{Alternate Keywords}.
1773 Some users try to use @option{-pedantic} to check programs for strict ISO
1774 C conformance.  They soon find that it does not do quite what they want:
1775 it finds some non-ISO practices, but not all---only those for which
1776 ISO C @emph{requires} a diagnostic, and some others for which
1777 diagnostics have been added.
1779 A feature to report any failure to conform to ISO C might be useful in
1780 some instances, but would require considerable additional work and would
1781 be quite different from @option{-pedantic}.  We don't have plans to
1782 support such a feature in the near future.
1784 Where the standard specified with @option{-std} represents a GNU
1785 extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
1786 corresponding @dfn{base standard}, the version of ISO C on which the GNU
1787 extended dialect is based.  Warnings from @option{-pedantic} are given
1788 where they are required by the base standard.  (It would not make sense
1789 for such warnings to be given only for features not in the specified GNU
1790 C dialect, since by definition the GNU dialects of C include all
1791 features the compiler supports with the given option, and there would be
1792 nothing to warn about.)
1794 @item -pedantic-errors
1795 @opindex pedantic-errors
1796 Like @option{-pedantic}, except that errors are produced rather than
1797 warnings.
1799 @item -w
1800 @opindex w
1801 Inhibit all warning messages.
1803 @item -Wno-import
1804 @opindex Wno-import
1805 Inhibit warning messages about the use of @samp{#import}.
1807 @item -Wchar-subscripts
1808 @opindex Wchar-subscripts
1809 Warn if an array subscript has type @code{char}.  This is a common cause
1810 of error, as programmers often forget that this type is signed on some
1811 machines.
1813 @item -Wcomment
1814 @opindex Wcomment
1815 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
1816 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
1818 @item -Wformat
1819 @opindex Wformat
1820 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
1821 the arguments supplied have types appropriate to the format string
1822 specified, and that the conversions specified in the format string make
1823 sense.  This includes standard functions, and others specified by format
1824 attributes (@pxref{Function Attributes}), in the @code{printf},
1825 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
1826 not in the C standard) families.
1828 The formats are checked against the format features supported by GNU
1829 libc version 2.2.  These include all ISO C89 and C99 features, as well
1830 as features from the Single Unix Specification and some BSD and GNU
1831 extensions.  Other library implementations may not support all these
1832 features; GCC does not support warning about features that go beyond a
1833 particular library's limitations.  However, if @option{-pedantic} is used
1834 with @option{-Wformat}, warnings will be given about format features not
1835 in the selected standard version (but not for @code{strfmon} formats,
1836 since those are not in any version of the C standard).  @xref{C Dialect
1837 Options,,Options Controlling C Dialect}.
1839 @option{-Wformat} is included in @option{-Wall}.  For more control over some
1840 aspects of format checking, the options @option{-Wno-format-y2k},
1841 @option{-Wno-format-extra-args}, @option{-Wformat-nonliteral},
1842 @option{-Wformat-security} and @option{-Wformat=2} are available, but are
1843 not included in @option{-Wall}.
1845 @item -Wno-format-y2k
1846 @opindex Wno-format-y2k
1847 If @option{-Wformat} is specified, do not warn about @code{strftime}
1848 formats which may yield only a two-digit year.
1850 @item -Wno-format-extra-args
1851 @opindex Wno-format-extra-args
1852 If @option{-Wformat} is specified, do not warn about excess arguments to a
1853 @code{printf} or @code{scanf} format function.  The C standard specifies
1854 that such arguments are ignored.
1856 Where the unused arguments lie between used arguments that are
1857 specified with @samp{$} operand number specifications, normally
1858 warnings are still given, since the implementation could not know what
1859 type to pass to @code{va_arg} to skip the unused arguments.  However,
1860 in the case of @code{scanf} formats, this option will suppress the
1861 warning if the unused arguments are all pointers, since the Single
1862 Unix Specification says that such unused arguments are allowed.
1864 @item -Wformat-nonliteral
1865 @opindex Wformat-nonliteral
1866 If @option{-Wformat} is specified, also warn if the format string is not a
1867 string literal and so cannot be checked, unless the format function
1868 takes its format arguments as a @code{va_list}.
1870 @item -Wformat-security
1871 @opindex Wformat-security
1872 If @option{-Wformat} is specified, also warn about uses of format
1873 functions that represent possible security problems.  At present, this
1874 warns about calls to @code{printf} and @code{scanf} functions where the
1875 format string is not a string literal and there are no format arguments,
1876 as in @code{printf (foo);}.  This may be a security hole if the format
1877 string came from untrusted input and contains @samp{%n}.  (This is
1878 currently a subset of what @option{-Wformat-nonliteral} warns about, but
1879 in future warnings may be added to @option{-Wformat-security} that are not
1880 included in @option{-Wformat-nonliteral}.)
1882 @item -Wformat=2
1883 @opindex Wformat=2
1884 Enable @option{-Wformat} plus format checks not included in
1885 @option{-Wformat}.  Currently equivalent to @samp{-Wformat
1886 -Wformat-nonliteral -Wformat-security}.
1888 @item -Wimplicit-int
1889 @opindex Wimplicit-int
1890 Warn when a declaration does not specify a type.
1892 @item -Wimplicit-function-declaration
1893 @itemx -Werror-implicit-function-declaration
1894 @opindex Wimplicit-function-declaration
1895 @opindex Werror-implicit-function-declaration
1896 Give a warning (or error) whenever a function is used before being
1897 declared.
1899 @item -Wimplicit
1900 @opindex Wimplicit
1901 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
1903 @item -Wmain
1904 @opindex Wmain
1905 Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
1906 function with external linkage, returning int, taking either zero
1907 arguments, two, or three arguments of appropriate types.
1909 @item -Wmissing-braces
1910 @opindex Wmissing-braces
1911 Warn if an aggregate or union initializer is not fully bracketed.  In
1912 the following example, the initializer for @samp{a} is not fully
1913 bracketed, but that for @samp{b} is fully bracketed.
1915 @smallexample
1916 int a[2][2] = @{ 0, 1, 2, 3 @};
1917 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
1918 @end smallexample
1920 @item -Wparentheses
1921 @opindex Wparentheses
1922 Warn if parentheses are omitted in certain contexts, such
1923 as when there is an assignment in a context where a truth value
1924 is expected, or when operators are nested whose precedence people
1925 often get confused about.
1927 Also warn about constructions where there may be confusion to which
1928 @code{if} statement an @code{else} branch belongs.  Here is an example of
1929 such a case:
1931 @smallexample
1932 @group
1934   if (a)
1935     if (b)
1936       foo ();
1937   else
1938     bar ();
1940 @end group
1941 @end smallexample
1943 In C, every @code{else} branch belongs to the innermost possible @code{if}
1944 statement, which in this example is @code{if (b)}.  This is often not
1945 what the programmer expected, as illustrated in the above example by
1946 indentation the programmer chose.  When there is the potential for this
1947 confusion, GCC will issue a warning when this flag is specified.
1948 To eliminate the warning, add explicit braces around the innermost
1949 @code{if} statement so there is no way the @code{else} could belong to
1950 the enclosing @code{if}.  The resulting code would look like this:
1952 @smallexample
1953 @group
1955   if (a)
1956     @{
1957       if (b)
1958         foo ();
1959       else
1960         bar ();
1961     @}
1963 @end group
1964 @end smallexample
1966 @item -Wsequence-point
1967 @opindex Wsequence-point
1968 Warn about code that may have undefined semantics because of violations
1969 of sequence point rules in the C standard.
1971 The C standard defines the order in which expressions in a C program are
1972 evaluated in terms of @dfn{sequence points}, which represent a partial
1973 ordering between the execution of parts of the program: those executed
1974 before the sequence point, and those executed after it.  These occur
1975 after the evaluation of a full expression (one which is not part of a
1976 larger expression), after the evaluation of the first operand of a
1977 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
1978 function is called (but after the evaluation of its arguments and the
1979 expression denoting the called function), and in certain other places.
1980 Other than as expressed by the sequence point rules, the order of
1981 evaluation of subexpressions of an expression is not specified.  All
1982 these rules describe only a partial order rather than a total order,
1983 since, for example, if two functions are called within one expression
1984 with no sequence point between them, the order in which the functions
1985 are called is not specified.  However, the standards committee have
1986 ruled that function calls do not overlap.
1988 It is not specified when between sequence points modifications to the
1989 values of objects take effect.  Programs whose behavior depends on this
1990 have undefined behavior; the C standard specifies that ``Between the
1991 previous and next sequence point an object shall have its stored value
1992 modified at most once by the evaluation of an expression.  Furthermore,
1993 the prior value shall be read only to determine the value to be
1994 stored.''.  If a program breaks these rules, the results on any
1995 particular implementation are entirely unpredictable.
1997 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
1998 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
1999 diagnosed by this option, and it may give an occasional false positive
2000 result, but in general it has been found fairly effective at detecting
2001 this sort of problem in programs.
2003 The present implementation of this option only works for C programs.  A
2004 future implementation may also work for C++ programs.
2006 The C standard is worded confusingly, therefore there is some debate
2007 over the precise meaning of the sequence point rules in subtle cases.
2008 Links to discussions of the problem, including proposed formal
2009 definitions, may be found on our readings page, at
2010 @w{@uref{http://gcc.gnu.org/readings.html}}.
2012 @item -Wreturn-type
2013 @opindex Wreturn-type
2014 Warn whenever a function is defined with a return-type that defaults to
2015 @code{int}.  Also warn about any @code{return} statement with no
2016 return-value in a function whose return-type is not @code{void}.
2018 For C++, a function without return type always produces a diagnostic
2019 message, even when @option{-Wno-return-type} is specified.  The only
2020 exceptions are @samp{main} and functions defined in system headers.
2022 @item -Wswitch
2023 @opindex Wswitch
2024 Warn whenever a @code{switch} statement has an index of enumeral type
2025 and lacks a @code{case} for one or more of the named codes of that
2026 enumeration.  (The presence of a @code{default} label prevents this
2027 warning.)  @code{case} labels outside the enumeration range also
2028 provoke warnings when this option is used.
2030 @item -Wtrigraphs
2031 @opindex Wtrigraphs
2032 Warn if any trigraphs are encountered that might change the meaning of
2033 the program (trigraphs within comments are not warned about).
2035 @item -Wunused-function
2036 @opindex Wunused-function
2037 Warn whenever a static function is declared but not defined or a
2038 non\-inline static function is unused.
2040 @item -Wunused-label
2041 @opindex Wunused-label
2042 Warn whenever a label is declared but not used.
2044 To suppress this warning use the @samp{unused} attribute
2045 (@pxref{Variable Attributes}).
2047 @item -Wunused-parameter
2048 @opindex Wunused-parameter
2049 Warn whenever a function parameter is unused aside from its declaration.
2051 To suppress this warning use the @samp{unused} attribute
2052 (@pxref{Variable Attributes}).
2054 @item -Wunused-variable
2055 @opindex Wunused-variable
2056 Warn whenever a local variable or non-constant static variable is unused
2057 aside from its declaration
2059 To suppress this warning use the @samp{unused} attribute
2060 (@pxref{Variable Attributes}).
2062 @item -Wunused-value
2063 @opindex Wunused-value
2064 Warn whenever a statement computes a result that is explicitly not used.
2066 To suppress this warning cast the expression to @samp{void}.
2068 @item -Wunused
2069 @opindex Wunused
2070 All all the above @option{-Wunused} options combined.
2072 In order to get a warning about an unused function parameter, you must
2073 either specify @samp{-W -Wunused} or separately specify
2074 @option{-Wunused-parameter}.
2076 @item -Wuninitialized
2077 @opindex Wuninitialized
2078 Warn if an automatic variable is used without first being initialized or
2079 if a variable may be clobbered by a @code{setjmp} call.
2081 These warnings are possible only in optimizing compilation,
2082 because they require data flow information that is computed only
2083 when optimizing.  If you don't specify @option{-O}, you simply won't
2084 get these warnings.
2086 These warnings occur only for variables that are candidates for
2087 register allocation.  Therefore, they do not occur for a variable that
2088 is declared @code{volatile}, or whose address is taken, or whose size
2089 is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
2090 structures, unions or arrays, even when they are in registers.
2092 Note that there may be no warning about a variable that is used only
2093 to compute a value that itself is never used, because such
2094 computations may be deleted by data flow analysis before the warnings
2095 are printed.
2097 These warnings are made optional because GCC is not smart
2098 enough to see all the reasons why the code might be correct
2099 despite appearing to have an error.  Here is one example of how
2100 this can happen:
2102 @smallexample
2103 @group
2105   int x;
2106   switch (y)
2107     @{
2108     case 1: x = 1;
2109       break;
2110     case 2: x = 4;
2111       break;
2112     case 3: x = 5;
2113     @}
2114   foo (x);
2116 @end group
2117 @end smallexample
2119 @noindent
2120 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
2121 always initialized, but GCC doesn't know this.  Here is
2122 another common case:
2124 @smallexample
2126   int save_y;
2127   if (change_y) save_y = y, y = new_y;
2128   @dots{}
2129   if (change_y) y = save_y;
2131 @end smallexample
2133 @noindent
2134 This has no bug because @code{save_y} is used only if it is set.
2136 @cindex @code{longjmp} warnings
2137 This option also warns when a non-volatile automatic variable might be
2138 changed by a call to @code{longjmp}.  These warnings as well are possible
2139 only in optimizing compilation.
2141 The compiler sees only the calls to @code{setjmp}.  It cannot know
2142 where @code{longjmp} will be called; in fact, a signal handler could
2143 call it at any point in the code.  As a result, you may get a warning
2144 even when there is in fact no problem because @code{longjmp} cannot
2145 in fact be called at the place which would cause a problem.
2147 Some spurious warnings can be avoided if you declare all the functions
2148 you use that never return as @code{noreturn}.  @xref{Function
2149 Attributes}.
2151 @item -Wreorder @r{(C++ only)}
2152 @opindex Wreorder
2153 @cindex reordering, warning
2154 @cindex warning for reordering of member initializers
2155 Warn when the order of member initializers given in the code does not
2156 match the order in which they must be executed.  For instance:
2158 @item -Wunknown-pragmas
2159 @opindex Wunknown-pragmas
2160 @cindex warning for unknown pragmas
2161 @cindex unknown pragmas, warning
2162 @cindex pragmas, warning of unknown
2163 Warn when a #pragma directive is encountered which is not understood by
2164 GCC@.  If this command line option is used, warnings will even be issued
2165 for unknown pragmas in system header files.  This is not the case if
2166 the warnings were only enabled by the @option{-Wall} command line option.
2168 @item -Wall
2169 @opindex Wall
2170 All of the above @samp{-W} options combined.  This enables all the
2171 warnings about constructions that some users consider questionable, and
2172 that are easy to avoid (or modify to prevent the warning), even in
2173 conjunction with macros.
2175 @item -Wdiv-by-zero
2176 @opindex Wno-div-by-zero
2177 @opindex Wdiv-by-zero
2178 Warn about compile-time integer division by zero.  This is default.  To
2179 inhibit the warning messages, use @option{-Wno-div-by-zero}.  Floating
2180 point division by zero is not warned about, as it can be a legitimate
2181 way of obtaining infinities and NaNs.
2183 @item -Wmultichar
2184 @opindex Wno-multichar
2185 @opindex Wmultichar
2186 Warn if a multicharacter constant (@samp{'FOOF'}) is used.  This is
2187 default.  To inhibit the warning messages, use @option{-Wno-multichar}.
2188 Usually they indicate a typo in the user's code, as they have
2189 implementation-defined values, and should not be used in portable code.
2191 @item -Wsystem-headers
2192 @opindex Wsystem-headers
2193 @cindex warnings from system headers
2194 @cindex system headers, warnings from
2195 Print warning messages for constructs found in system header files.
2196 Warnings from system headers are normally suppressed, on the assumption
2197 that they usually do not indicate real problems and would only make the
2198 compiler output harder to read.  Using this command line option tells
2199 GCC to emit warnings from system headers as if they occurred in user
2200 code.  However, note that using @option{-Wall} in conjunction with this
2201 option will @emph{not} warn about unknown pragmas in system
2202 headers---for that, @option{-Wunknown-pragmas} must also be used.
2203 @end table
2205 The following @option{-W@dots{}} options are not implied by @option{-Wall}.
2206 Some of them warn about constructions that users generally do not
2207 consider questionable, but which occasionally you might wish to check
2208 for; others warn about constructions that are necessary or hard to avoid
2209 in some cases, and there is no simple way to modify the code to suppress
2210 the warning.
2212 @table @gcctabopt
2213 @item -W
2214 @opindex W
2215 Print extra warning messages for these events:
2217 @itemize @bullet
2218 @item
2219 A function can return either with or without a value.  (Falling
2220 off the end of the function body is considered returning without
2221 a value.)  For example, this function would evoke such a
2222 warning:
2224 @smallexample
2225 @group
2226 foo (a)
2228   if (a > 0)
2229     return a;
2231 @end group
2232 @end smallexample
2234 @item
2235 An expression-statement or the left-hand side of a comma expression
2236 contains no side effects.
2237 To suppress the warning, cast the unused expression to void.
2238 For example, an expression such as @samp{x[i,j]} will cause a warning,
2239 but @samp{x[(void)i,j]} will not.
2241 @item
2242 An unsigned value is compared against zero with @samp{<} or @samp{<=}.
2244 @item
2245 A comparison like @samp{x<=y<=z} appears; this is equivalent to
2246 @samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
2247 that of ordinary mathematical notation.
2249 @item
2250 Storage-class specifiers like @code{static} are not the first things in
2251 a declaration.  According to the C Standard, this usage is obsolescent.
2253 @item
2254 The return type of a function has a type qualifier such as @code{const}.
2255 Such a type qualifier has no effect, since the value returned by a
2256 function is not an lvalue.  (But don't warn about the GNU extension of
2257 @code{volatile void} return types.  That extension will be warned about
2258 if @option{-pedantic} is specified.)
2260 @item
2261 If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
2262 arguments.
2264 @item
2265 A comparison between signed and unsigned values could produce an
2266 incorrect result when the signed value is converted to unsigned.
2267 (But don't warn if @option{-Wno-sign-compare} is also specified.)
2269 @item
2270 An aggregate has a partly bracketed initializer.
2271 For example, the following code would evoke such a warning,
2272 because braces are missing around the initializer for @code{x.h}:
2274 @smallexample
2275 struct s @{ int f, g; @};
2276 struct t @{ struct s h; int i; @};
2277 struct t x = @{ 1, 2, 3 @};
2278 @end smallexample
2280 @item
2281 An aggregate has an initializer which does not initialize all members.
2282 For example, the following code would cause such a warning, because
2283 @code{x.h} would be implicitly initialized to zero:
2285 @smallexample
2286 struct s @{ int f, g, h; @};
2287 struct s x = @{ 3, 4 @};
2288 @end smallexample
2289 @end itemize
2291 @item -Wfloat-equal
2292 @opindex Wfloat-equal
2293 Warn if floating point values are used in equality comparisons.
2295 The idea behind this is that sometimes it is convenient (for the
2296 programmer) to consider floating-point values as approximations to
2297 infinitely precise real numbers.  If you are doing this, then you need
2298 to compute (by analysing the code, or in some other way) the maximum or
2299 likely maximum error that the computation introduces, and allow for it
2300 when performing comparisons (and when producing output, but that's a
2301 different problem).  In particular, instead of testing for equality, you
2302 would check to see whether the two values have ranges that overlap; and
2303 this is done with the relational operators, so equality comparisons are
2304 probably mistaken.
2306 @item -Wtraditional @r{(C only)}
2307 @opindex Wtraditional
2308 Warn about certain constructs that behave differently in traditional and
2309 ISO C@.  Also warn about ISO C constructs that have no traditional C
2310 equivalent, and/or problematic constructs which should be avoided.
2312 @itemize @bullet
2313 @item
2314 Macro parameters that appear within string literals in the macro body.
2315 In traditional C macro replacement takes place within string literals,
2316 but does not in ISO C@.
2318 @item
2319 In traditional C, some preprocessor directives did not exist.
2320 Traditional preprocessors would only consider a line to be a directive
2321 if the @samp{#} appeared in column 1 on the line.  Therefore
2322 @option{-Wtraditional} warns about directives that traditional C
2323 understands but would ignore because the @samp{#} does not appear as the
2324 first character on the line.  It also suggests you hide directives like
2325 @samp{#pragma} not understood by traditional C by indenting them.  Some
2326 traditional implementations would not recognize @samp{#elif}, so it
2327 suggests avoiding it altogether.
2329 @item
2330 A function-like macro that appears without arguments.
2332 @item
2333 The unary plus operator.
2335 @item
2336 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
2337 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
2338 constants.)  Note, these suffixes appear in macros defined in the system
2339 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
2340 Use of these macros in user code might normally lead to spurious
2341 warnings, however gcc's integrated preprocessor has enough context to
2342 avoid warning in these cases.
2344 @item
2345 A function declared external in one block and then used after the end of
2346 the block.
2348 @item
2349 A @code{switch} statement has an operand of type @code{long}.
2351 @item
2352 A non-@code{static} function declaration follows a @code{static} one.
2353 This construct is not accepted by some traditional C compilers.
2355 @item
2356 The ISO type of an integer constant has a different width or
2357 signedness from its traditional type.  This warning is only issued if
2358 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
2359 typically represent bit patterns, are not warned about.
2361 @item
2362 Usage of ISO string concatenation is detected.
2364 @item
2365 Initialization of automatic aggregates.
2367 @item
2368 Identifier conflicts with labels.  Traditional C lacks a separate
2369 namespace for labels.
2371 @item
2372 Initialization of unions.  If the initializer is zero, the warning is
2373 omitted.  This is done under the assumption that the zero initializer in
2374 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
2375 initializer warnings and relies on default initialization to zero in the
2376 traditional C case.
2378 @item
2379 Conversions by prototypes between fixed/floating point values and vice
2380 versa.  The absence of these prototypes when compiling with traditional
2381 C would cause serious problems.  This is a subset of the possible
2382 conversion warnings, for the full set use @option{-Wconversion}.
2383 @end itemize
2385 @item -Wundef
2386 @opindex Wundef
2387 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
2389 @item -Wshadow
2390 @opindex Wshadow
2391 Warn whenever a local variable shadows another local variable, parameter or
2392 global variable or whenever a built-in function is shadowed.
2394 @item -Wlarger-than-@var{len}
2395 @opindex Wlarger-than
2396 Warn whenever an object of larger than @var{len} bytes is defined.
2398 @item -Wpointer-arith
2399 @opindex Wpointer-arith
2400 Warn about anything that depends on the ``size of'' a function type or
2401 of @code{void}.  GNU C assigns these types a size of 1, for
2402 convenience in calculations with @code{void *} pointers and pointers
2403 to functions.
2405 @item -Wbad-function-cast @r{(C only)}
2406 @opindex Wbad-function-cast
2407 Warn whenever a function call is cast to a non-matching type.
2408 For example, warn if @code{int malloc()} is cast to @code{anything *}.
2410 @item -Wcast-qual
2411 @opindex Wcast-qual
2412 Warn whenever a pointer is cast so as to remove a type qualifier from
2413 the target type.  For example, warn if a @code{const char *} is cast
2414 to an ordinary @code{char *}.
2416 @item -Wcast-align
2417 @opindex Wcast-align
2418 Warn whenever a pointer is cast such that the required alignment of the
2419 target is increased.  For example, warn if a @code{char *} is cast to
2420 an @code{int *} on machines where integers can only be accessed at
2421 two- or four-byte boundaries.
2423 @item -Wwrite-strings
2424 @opindex Wwrite-strings
2425 When compiling C, give string constants the type @code{const
2426 char[@var{length}]} so that
2427 copying the address of one into a non-@code{const} @code{char *}
2428 pointer will get a warning; when compiling C++, warn about the
2429 deprecated conversion from string constants to @code{char *}.
2430 These warnings will help you find at
2431 compile time code that can try to write into a string constant, but
2432 only if you have been very careful about using @code{const} in
2433 declarations and prototypes.  Otherwise, it will just be a nuisance;
2434 this is why we did not make @option{-Wall} request these warnings.
2436 @item -Wconversion
2437 @opindex Wconversion
2438 Warn if a prototype causes a type conversion that is different from what
2439 would happen to the same argument in the absence of a prototype.  This
2440 includes conversions of fixed point to floating and vice versa, and
2441 conversions changing the width or signedness of a fixed point argument
2442 except when the same as the default promotion.
2444 Also, warn if a negative integer constant expression is implicitly
2445 converted to an unsigned type.  For example, warn about the assignment
2446 @code{x = -1} if @code{x} is unsigned.  But do not warn about explicit
2447 casts like @code{(unsigned) -1}.
2449 @item -Wsign-compare
2450 @opindex Wsign-compare
2451 @cindex warning for comparison of signed and unsigned values
2452 @cindex comparison of signed and unsigned values, warning
2453 @cindex signed and unsigned values, comparison warning
2454 Warn when a comparison between signed and unsigned values could produce
2455 an incorrect result when the signed value is converted to unsigned.
2456 This warning is also enabled by @option{-W}; to get the other warnings
2457 of @option{-W} without this warning, use @samp{-W -Wno-sign-compare}.
2459 @item -Waggregate-return
2460 @opindex Waggregate-return
2461 Warn if any functions that return structures or unions are defined or
2462 called.  (In languages where you can return an array, this also elicits
2463 a warning.)
2465 @item -Wstrict-prototypes @r{(C only)}
2466 @opindex Wstrict-prototypes
2467 Warn if a function is declared or defined without specifying the
2468 argument types.  (An old-style function definition is permitted without
2469 a warning if preceded by a declaration which specifies the argument
2470 types.)
2472 @item -Wmissing-prototypes @r{(C only)}
2473 @opindex Wmissing-prototypes
2474 Warn if a global function is defined without a previous prototype
2475 declaration.  This warning is issued even if the definition itself
2476 provides a prototype.  The aim is to detect global functions that fail
2477 to be declared in header files.
2479 @item -Wmissing-declarations
2480 @opindex Wmissing-declarations
2481 Warn if a global function is defined without a previous declaration.
2482 Do so even if the definition itself provides a prototype.
2483 Use this option to detect global functions that are not declared in
2484 header files.
2486 @item -Wmissing-noreturn
2487 @opindex Wmissing-noreturn
2488 Warn about functions which might be candidates for attribute @code{noreturn}.
2489 Note these are only possible candidates, not absolute ones.  Care should
2490 be taken to manually verify functions actually do not ever return before
2491 adding the @code{noreturn} attribute, otherwise subtle code generation
2492 bugs could be introduced.  You will not get a warning for @code{main} in
2493 hosted C environments.
2495 @item -Wmissing-format-attribute
2496 @opindex Wmissing-format-attribute
2497 @opindex Wformat
2498 If @option{-Wformat} is enabled, also warn about functions which might be
2499 candidates for @code{format} attributes.  Note these are only possible
2500 candidates, not absolute ones.  GCC will guess that @code{format}
2501 attributes might be appropriate for any function that calls a function
2502 like @code{vprintf} or @code{vscanf}, but this might not always be the
2503 case, and some functions for which @code{format} attributes are
2504 appropriate may not be detected.  This option has no effect unless
2505 @option{-Wformat} is enabled (possibly by @option{-Wall}).
2507 @item -Wpacked
2508 @opindex Wpacked
2509 Warn if a structure is given the packed attribute, but the packed
2510 attribute has no effect on the layout or size of the structure.
2511 Such structures may be mis-aligned for little benefit.  For
2512 instance, in this code, the variable @code{f.x} in @code{struct bar}
2513 will be misaligned even though @code{struct bar} does not itself
2514 have the packed attribute:
2516 @smallexample
2517 @group
2518 struct foo @{
2519   int x;
2520   char a, b, c, d;
2521 @} __attribute__((packed));
2522 struct bar @{
2523   char z;
2524   struct foo f;
2526 @end group
2527 @end smallexample
2529 @item -Wpadded
2530 @opindex Wpadded
2531 Warn if padding is included in a structure, either to align an element
2532 of the structure or to align the whole structure.  Sometimes when this
2533 happens it is possible to rearrange the fields of the structure to
2534 reduce the padding and so make the structure smaller.
2536 @item -Wredundant-decls
2537 @opindex Wredundant-decls
2538 Warn if anything is declared more than once in the same scope, even in
2539 cases where multiple declaration is valid and changes nothing.
2541 @item -Wnested-externs @r{(C only)}
2542 @opindex Wnested-externs
2543 Warn if an @code{extern} declaration is encountered within a function.
2545 @item -Wunreachable-code
2546 @opindex Wunreachable-code
2547 Warn if the compiler detects that code will never be executed.
2549 This option is intended to warn when the compiler detects that at
2550 least a whole line of source code will never be executed, because
2551 some condition is never satisfied or because it is after a
2552 procedure that never returns.
2554 It is possible for this option to produce a warning even though there
2555 are circumstances under which part of the affected line can be executed,
2556 so care should be taken when removing apparently-unreachable code.
2558 For instance, when a function is inlined, a warning may mean that the
2559 line is unreachable in only one inlined copy of the function.
2561 This option is not made part of @option{-Wall} because in a debugging
2562 version of a program there is often substantial code which checks
2563 correct functioning of the program and is, hopefully, unreachable
2564 because the program does work.  Another common use of unreachable
2565 code is to provide behavior which is selectable at compile-time.
2567 @item -Winline
2568 @opindex Winline
2569 Warn if a function can not be inlined and it was declared as inline.
2571 @item -Wlong-long
2572 @opindex Wlong-long
2573 @opindex Wno-long-long
2574 Warn if @samp{long long} type is used.  This is default.  To inhibit
2575 the warning messages, use @option{-Wno-long-long}.  Flags
2576 @option{-Wlong-long} and @option{-Wno-long-long} are taken into account
2577 only when @option{-pedantic} flag is used.
2579 @item -Wdisabled-optimization
2580 @opindex Wdisabled-optimization
2581 Warn if a requested optimization pass is disabled.  This warning does
2582 not generally indicate that there is anything wrong with your code; it
2583 merely indicates that GCC's optimizers were unable to handle the code
2584 effectively.  Often, the problem is that your code is too big or too
2585 complex; GCC will refuse to optimize programs when the optimization
2586 itself is likely to take inordinate amounts of time.
2588 @item -Werror
2589 @opindex Werror
2590 Make all warnings into errors.
2591 @end table
2593 @node Debugging Options
2594 @section Options for Debugging Your Program or GCC
2595 @cindex options, debugging
2596 @cindex debugging information options
2598 GCC has various special options that are used for debugging
2599 either your program or GCC:
2601 @table @gcctabopt
2602 @item -g
2603 @opindex g
2604 Produce debugging information in the operating system's native format
2605 (stabs, COFF, XCOFF, or DWARF)@.  GDB can work with this debugging
2606 information.
2608 On most systems that use stabs format, @option{-g} enables use of extra
2609 debugging information that only GDB can use; this extra information
2610 makes debugging work better in GDB but will probably make other debuggers
2611 crash or
2612 refuse to read the program.  If you want to control for certain whether
2613 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
2614 @option{-gxcoff+}, @option{-gxcoff}, @option{-gdwarf-1+}, @option{-gdwarf-1},
2615 or @option{-gvms} (see below).
2617 Unlike most other C compilers, GCC allows you to use @option{-g} with
2618 @option{-O}.  The shortcuts taken by optimized code may occasionally
2619 produce surprising results: some variables you declared may not exist
2620 at all; flow of control may briefly move where you did not expect it;
2621 some statements may not be executed because they compute constant
2622 results or their values were already at hand; some statements may
2623 execute in different places because they were moved out of loops.
2625 Nevertheless it proves possible to debug optimized output.  This makes
2626 it reasonable to use the optimizer for programs that might have bugs.
2628 The following options are useful when GCC is generated with the
2629 capability for more than one debugging format.
2631 @item -ggdb
2632 @opindex ggdb
2633 Produce debugging information for use by GDB@.  This means to use the
2634 most expressive format available (DWARF 2, stabs, or the native format
2635 if neither of those are supported), including GDB extensions if at all
2636 possible.
2638 @item -gstabs
2639 @opindex gstabs
2640 Produce debugging information in stabs format (if that is supported),
2641 without GDB extensions.  This is the format used by DBX on most BSD
2642 systems.  On MIPS, Alpha and System V Release 4 systems this option
2643 produces stabs debugging output which is not understood by DBX or SDB@.
2644 On System V Release 4 systems this option requires the GNU assembler.
2646 @item -gstabs+
2647 @opindex gstabs+
2648 Produce debugging information in stabs format (if that is supported),
2649 using GNU extensions understood only by the GNU debugger (GDB)@.  The
2650 use of these extensions is likely to make other debuggers crash or
2651 refuse to read the program.
2653 @item -gcoff
2654 @opindex gcoff
2655 Produce debugging information in COFF format (if that is supported).
2656 This is the format used by SDB on most System V systems prior to
2657 System V Release 4.
2659 @item -gxcoff
2660 @opindex gxcoff
2661 Produce debugging information in XCOFF format (if that is supported).
2662 This is the format used by the DBX debugger on IBM RS/6000 systems.
2664 @item -gxcoff+
2665 @opindex gxcoff+
2666 Produce debugging information in XCOFF format (if that is supported),
2667 using GNU extensions understood only by the GNU debugger (GDB)@.  The
2668 use of these extensions is likely to make other debuggers crash or
2669 refuse to read the program, and may cause assemblers other than the GNU
2670 assembler (GAS) to fail with an error.
2672 @item -gdwarf
2673 @opindex gdwarf
2674 Produce debugging information in DWARF version 1 format (if that is
2675 supported).  This is the format used by SDB on most System V Release 4
2676 systems.
2678 @item -gdwarf+
2679 @opindex gdwarf+
2680 Produce debugging information in DWARF version 1 format (if that is
2681 supported), using GNU extensions understood only by the GNU debugger
2682 (GDB)@.  The use of these extensions is likely to make other debuggers
2683 crash or refuse to read the program.
2685 @item -gdwarf-2
2686 @opindex gdwarf-2
2687 Produce debugging information in DWARF version 2 format (if that is
2688 supported).  This is the format used by DBX on IRIX 6.
2690 @item -gvms
2691 @opindex gvms
2692 Produce debugging information in VMS debug format (if that is
2693 supported).  This is the format used by DEBUG on VMS systems.
2695 @item -g@var{level}
2696 @itemx -ggdb@var{level}
2697 @itemx -gstabs@var{level}
2698 @itemx -gcoff@var{level}
2699 @itemx -gxcoff@var{level}
2700 @itemx -gdwarf@var{level}
2701 @itemx -gdwarf-2@var{level}
2702 @itemx -gvms@var{level}
2703 Request debugging information and also use @var{level} to specify how
2704 much information.  The default level is 2.
2706 Level 1 produces minimal information, enough for making backtraces in
2707 parts of the program that you don't plan to debug.  This includes
2708 descriptions of functions and external variables, but no information
2709 about local variables and no line numbers.
2711 Level 3 includes extra information, such as all the macro definitions
2712 present in the program.  Some debuggers support macro expansion when
2713 you use @option{-g3}.
2715 @cindex @code{prof}
2716 @item -p
2717 @opindex p
2718 Generate extra code to write profile information suitable for the
2719 analysis program @code{prof}.  You must use this option when compiling
2720 the source files you want data about, and you must also use it when
2721 linking.
2723 @cindex @code{gprof}
2724 @item -pg
2725 @opindex pg
2726 Generate extra code to write profile information suitable for the
2727 analysis program @code{gprof}.  You must use this option when compiling
2728 the source files you want data about, and you must also use it when
2729 linking.
2731 @cindex @code{tcov}
2732 @item -a
2733 @opindex a
2734 Generate extra code to write profile information for basic blocks, which will
2735 record the number of times each basic block is executed, the basic block start
2736 address, and the function name containing the basic block.  If @option{-g} is
2737 used, the line number and filename of the start of the basic block will also be
2738 recorded.  If not overridden by the machine description, the default action is
2739 to append to the text file @file{bb.out}.
2741 This data could be analyzed by a program like @code{tcov}.  Note,
2742 however, that the format of the data is not what @code{tcov} expects.
2743 Eventually GNU @code{gprof} should be extended to process this data.
2745 @item -Q
2746 @opindex Q
2747 Makes the compiler print out each function name as it is compiled, and
2748 print some statistics about each pass when it finishes.
2750 @item -ftime-report
2751 @opindex ftime-report
2752 Makes the compiler print some statistics about the time consumed by each
2753 pass when it finishes.
2755 @item -fmem-report
2756 @opindex fmem-report
2757 Makes the compiler print some statistics about permanent memory
2758 allocation when it finishes.
2760 @item -fprofile-arcs
2761 @opindex fprofile-arcs
2762 Instrument @dfn{arcs} during compilation to generate coverage data
2763 or for profile-directed block ordering.  During execution the program
2764 records how many times each branch is executed and how many times it is
2765 taken.  When the compiled program exits it saves this data to a file
2766 called @file{@var{sourcename}.da} for each source file.
2768 For profile-directed block ordering, compile the program with
2769 @option{-fprofile-arcs} plus optimization and code generation options,
2770 generate the arc profile information by running the program on a
2771 selected workload, and then compile the program again with the same
2772 optimization and code generation options plus
2773 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
2774 Control Optimization}).
2776 The other use of @option{-fprofile-arcs} is for use with @code{gcov},
2777 when it is used with the @option{-ftest-coverage} option.  GCC
2778 supports two methods of determining code coverage: the options that
2779 support @code{gcov}, and options @option{-a} and @option{-ax}, which
2780 write information to text files.  The options that support @code{gcov}
2781 do not need to instrument every arc in the program, so a program compiled
2782 with them runs faster than a program compiled with @option{-a}, which
2783 adds instrumentation code to every basic block in the program.  The
2784 tradeoff: since @code{gcov} does not have execution counts for all
2785 branches, it must start with the execution counts for the instrumented
2786 branches, and then iterate over the program flow graph until the entire
2787 graph has been solved.  Hence, @code{gcov} runs a little more slowly than
2788 a program which uses information from @option{-a} and @option{-ax}.
2790 With @option{-fprofile-arcs}, for each function of your program GCC
2791 creates a program flow graph, then finds a spanning tree for the graph.
2792 Only arcs that are not on the spanning tree have to be instrumented: the
2793 compiler adds code to count the number of times that these arcs are
2794 executed.  When an arc is the only exit or only entrance to a block, the
2795 instrumentation code can be added to the block; otherwise, a new basic
2796 block must be created to hold the instrumentation code.
2798 This option makes it possible to estimate branch probabilities and to
2799 calculate basic block execution counts.  In general, basic block
2800 execution counts as provided by @option{-a} do not give enough
2801 information to estimate all branch probabilities.
2803 @need 2000
2804 @item -ftest-coverage
2805 @opindex ftest-coverage
2806 Create data files for the @code{gcov} code-coverage utility
2807 (@pxref{Gcov,, @code{gcov}: a GCC Test Coverage Program}).
2808 The data file names begin with the name of your source file:
2810 @table @gcctabopt
2811 @item @var{sourcename}.bb
2812 A mapping from basic blocks to line numbers, which @code{gcov} uses to
2813 associate basic block execution counts with line numbers.
2815 @item @var{sourcename}.bbg
2816 A list of all arcs in the program flow graph.  This allows @code{gcov}
2817 to reconstruct the program flow graph, so that it can compute all basic
2818 block and arc execution counts from the information in the
2819 @code{@var{sourcename}.da} file.
2820 @end table
2822 Use @option{-ftest-coverage} with @option{-fprofile-arcs}; the latter
2823 option adds instrumentation to the program, which then writes
2824 execution counts to another data file:
2826 @table @gcctabopt
2827 @item @var{sourcename}.da
2828 Runtime arc execution counts, used in conjunction with the arc
2829 information in the file @code{@var{sourcename}.bbg}.
2830 @end table
2832 Coverage data will map better to the source files if
2833 @option{-ftest-coverage} is used without optimization.
2835 @item -d@var{letters}
2836 @opindex d
2837 Says to make debugging dumps during compilation at times specified by
2838 @var{letters}.  This is used for debugging the compiler.  The file names
2839 for most of the dumps are made by appending a pass number and a word to
2840 the source file name (e.g.  @file{foo.c.00.rtl} or @file{foo.c.01.sibling}).
2841 Here are the possible letters for use in @var{letters}, and their meanings:
2843 @table @samp
2844 @item A
2845 @opindex dA
2846 Annotate the assembler output with miscellaneous debugging information.
2847 @item b
2848 @opindex db
2849 Dump after computing branch probabilities, to @file{@var{file}.14.bp}.
2850 @item B
2851 @opindex dB
2852 Dump after block reordering, to @file{@var{file}.28.bbro}.
2853 @item c
2854 @opindex dc
2855 Dump after instruction combination, to the file @file{@var{file}.16.combine}.
2856 @item C
2857 @opindex dC
2858 Dump after the first if conversion, to the file @file{@var{file}.17.ce}.
2859 @item d
2860 @opindex dd
2861 Dump after delayed branch scheduling, to @file{@var{file}.31.dbr}.
2862 @item D
2863 @opindex dD
2864 Dump all macro definitions, at the end of preprocessing, in addition to
2865 normal output.
2866 @item e
2867 @opindex de
2868 Dump after SSA optimizations, to @file{@var{file}.04.ssa} and
2869 @file{@var{file}.07.ussa}.
2870 @item E
2871 @opindex dE
2872 Dump after the second if conversion, to @file{@var{file}.26.ce2}.
2873 @item f
2874 @opindex df
2875 Dump after life analysis, to @file{@var{file}.15.life}.
2876 @item F
2877 @opindex dF
2878 Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.09.addressof}.
2879 @item g
2880 @opindex dg
2881 Dump after global register allocation, to @file{@var{file}.21.greg}.
2882 @item h
2883 @opindex dh
2884 Dump after finalization of EH handling code, to @file{@var{file}.02.eh}.
2885 @item o
2886 @opindex do
2887 Dump after post-reload optimizations, to @file{@var{file}.22.postreload}.
2888 @item G
2889 @opindex dG
2890 Dump after GCSE, to @file{@var{file}.10.gcse}.
2891 @item i
2892 @opindex di
2893 Dump after sibling call optimizations, to @file{@var{file}.01.sibling}.
2894 @item j
2895 @opindex dj
2896 Dump after the first jump optimization, to @file{@var{file}.03.jump}.
2897 @item k
2898 @opindex dk
2899 Dump after conversion from registers to stack, to @file{@var{file}.32.stack}.
2900 @item l
2901 @opindex dl
2902 Dump after local register allocation, to @file{@var{file}.20.lreg}.
2903 @item L
2904 @opindex dL
2905 Dump after loop optimization, to @file{@var{file}.11.loop}.
2906 @item M
2907 @opindex dM
2908 Dump after performing the machine dependent reorganisation pass, to
2909 @file{@var{file}.30.mach}.
2910 @item n
2911 @opindex dn
2912 Dump after register renumbering, to @file{@var{file}.25.rnreg}.
2913 @item N
2914 @opindex dN
2915 Dump after the register move pass, to @file{@var{file}.18.regmove}.
2916 @item r
2917 @opindex dr
2918 Dump after RTL generation, to @file{@var{file}.00.rtl}.
2919 @item R
2920 @opindex dR
2921 Dump after the second scheduling pass, to @file{@var{file}.27.sched2}.
2922 @item s
2923 @opindex ds
2924 Dump after CSE (including the jump optimization that sometimes follows
2925 CSE), to @file{@var{file}.08.cse}.
2926 @item S
2927 @opindex dS
2928 Dump after the first scheduling pass, to @file{@var{file}.19.sched}.
2929 @item t
2930 @opindex dt
2931 Dump after the second CSE pass (including the jump optimization that
2932 sometimes follows CSE), to @file{@var{file}.12.cse2}.
2933 @item w
2934 @opindex dw
2935 Dump after the second flow pass, to @file{@var{file}.23.flow2}.
2936 @item X
2937 @opindex dX
2938 Dump after SSA dead code elimination, to @file{@var{file}.06.ssadce}.
2939 @item z
2940 @opindex dz
2941 Dump after the peephole pass, to @file{@var{file}.24.peephole2}.
2942 @item a
2943 @opindex da
2944 Produce all the dumps listed above.
2945 @item m
2946 @opindex dm
2947 Print statistics on memory usage, at the end of the run, to
2948 standard error.
2949 @item p
2950 @opindex dp
2951 Annotate the assembler output with a comment indicating which
2952 pattern and alternative was used.  The length of each instruction is
2953 also printed.
2954 @item P
2955 @opindex dP
2956 Dump the RTL in the assembler output as a comment before each instruction.
2957 Also turns on @option{-dp} annotation.
2958 @item v
2959 @opindex dv
2960 For each of the other indicated dump files (except for
2961 @file{@var{file}.00.rtl}), dump a representation of the control flow graph
2962 suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
2963 @item x
2964 @opindex dx
2965 Just generate RTL for a function instead of compiling it.  Usually used
2966 with @samp{r}.
2967 @item y
2968 @opindex dy
2969 Dump debugging information during parsing, to standard error.
2970 @end table
2972 @item -fdump-unnumbered
2973 @opindex fdump-unnumbered
2974 When doing debugging dumps (see @option{-d} option above), suppress instruction
2975 numbers and line number note output.  This makes it more feasible to
2976 use diff on debugging dumps for compiler invocations with different
2977 options, in particular with and without @option{-g}.
2979 @item -fdump-class-hierarchy @r{(C++ only)}
2980 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
2981 @opindex fdump-class-hierarchy
2982 Dump a representation of each class's hierarchy and virtual function
2983 table layout to a file.  The file name is made by appending @file{.class}
2984 to the source file name.  If the @samp{-@var{options}} form is used,
2985 @var{options} controls the details of the dump as described for the
2986 @option{-fdump-tree} options.
2988 @item -fdump-tree-@var{switch} @r{(C++ only)}
2989 @itemx -fdump-tree-@var{switch}-@var{options} @r{(C++ only)}
2990 @opindex fdump-tree
2991 Control the dumping at various stages of processing the intermediate
2992 language tree to a file.  The file name is generated by appending a switch
2993 specific suffix to the source file name.  If the @samp{-@var{options}}
2994 form is used, @var{options} is a list of @samp{-} separated options that
2995 control the details of the dump. Not all options are applicable to all
2996 dumps, those which are not meaningful will be ignored. The following
2997 options are available
2999 @table @samp
3000 @item address
3001 Print the address of each node.  Usually this is not meaningful as it
3002 changes according to the environment and source file. Its primary use
3003 is for tying up a dump file with a debug environment.
3004 @item slim
3005 Inhibit dumping of members of a scope or body of a function merely
3006 because that scope has been reached. Only dump such items when they
3007 are directly reachable by some other path.
3008 @item all
3009 Turn on all options.
3010 @end table
3012 The following tree dumps are possible:
3013 @table @samp
3014 @item original
3015 Dump before any tree based optimization, to @file{@var{file}.original}.
3016 @item optimized
3017 Dump after all tree based optimization, to @file{@var{file}.optimized}.
3018 @item inlined
3019 Dump after function inlining, to @file{@var{file}.inlined}.
3020 @end table
3022 @item -fpretend-float
3023 @opindex fpretend-float
3024 When running a cross-compiler, pretend that the target machine uses the
3025 same floating point format as the host machine.  This causes incorrect
3026 output of the actual floating constants, but the actual instruction
3027 sequence will probably be the same as GCC would make when running on
3028 the target machine.
3030 @item -save-temps
3031 @opindex save-temps
3032 Store the usual ``temporary'' intermediate files permanently; place them
3033 in the current directory and name them based on the source file.  Thus,
3034 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
3035 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
3036 preprocessed @file{foo.i} output file even though the compiler now
3037 normally uses an integrated preprocessor.
3039 @item -time
3040 @opindex time
3041 Report the CPU time taken by each subprocess in the compilation
3042 sequence.  For C source files, this is the compiler proper and assembler
3043 (plus the linker if linking is done).  The output looks like this:
3045 @smallexample
3046 # cc1 0.12 0.01
3047 # as 0.00 0.01
3048 @end smallexample
3050 The first number on each line is the ``user time,'' that is time spent
3051 executing the program itself.  The second number is ``system time,''
3052 time spent executing operating system routines on behalf of the program.
3053 Both numbers are in seconds.
3055 @item -print-file-name=@var{library}
3056 @opindex print-file-name
3057 Print the full absolute name of the library file @var{library} that
3058 would be used when linking---and don't do anything else.  With this
3059 option, GCC does not compile or link anything; it just prints the
3060 file name.
3062 @item -print-multi-directory
3063 @opindex print-multi-directory
3064 Print the directory name corresponding to the multilib selected by any
3065 other switches present in the command line.  This directory is supposed
3066 to exist in @env{GCC_EXEC_PREFIX}.
3068 @item -print-multi-lib
3069 @opindex print-multi-lib
3070 Print the mapping from multilib directory names to compiler switches
3071 that enable them.  The directory name is separated from the switches by
3072 @samp{;}, and each switch starts with an @samp{@@} instead of the
3073 @samp{-}, without spaces between multiple switches.  This is supposed to
3074 ease shell-processing.
3076 @item -print-prog-name=@var{program}
3077 @opindex print-prog-name
3078 Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
3080 @item -print-libgcc-file-name
3081 @opindex print-libgcc-file-name
3082 Same as @option{-print-file-name=libgcc.a}.
3084 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
3085 but you do want to link with @file{libgcc.a}.  You can do
3087 @example
3088 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
3089 @end example
3091 @item -print-search-dirs
3092 @opindex print-search-dirs
3093 Print the name of the configured installation directory and a list of
3094 program and library directories gcc will search---and don't do anything else.
3096 This is useful when gcc prints the error message
3097 @samp{installation problem, cannot exec cpp0: No such file or directory}.
3098 To resolve this you either need to put @file{cpp0} and the other compiler
3099 components where gcc expects to find them, or you can set the environment
3100 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
3101 Don't forget the trailing '/'.
3102 @xref{Environment Variables}.
3104 @item -dumpmachine
3105 @opindex dumpmachine
3106 Print the compiler's target machine (for example,
3107 @samp{i686-pc-linux-gnu})---and don't do anything else.
3109 @item -dumpversion
3110 @opindex dumpversion
3111 Print the compiler version (for example, @samp{3.0})---and don't do
3112 anything else.
3114 @item -dumpspecs
3115 @opindex dumpspecs
3116 Print the compiler's built-in specs---and don't do anything else.  (This
3117 is used when GCC itself is being built.)  @xref{Spec Files}.
3118 @end table
3120 @node Optimize Options
3121 @section Options That Control Optimization
3122 @cindex optimize options
3123 @cindex options, optimization
3125 These options control various sorts of optimizations:
3127 @table @gcctabopt
3128 @item -O
3129 @itemx -O1
3130 @opindex O
3131 @opindex O1
3132 Optimize.  Optimizing compilation takes somewhat more time, and a lot
3133 more memory for a large function.
3135 Without @option{-O}, the compiler's goal is to reduce the cost of
3136 compilation and to make debugging produce the expected results.
3137 Statements are independent: if you stop the program with a breakpoint
3138 between statements, you can then assign a new value to any variable or
3139 change the program counter to any other statement in the function and
3140 get exactly the results you would expect from the source code.
3142 With @option{-O}, the compiler tries to reduce code size and execution
3143 time, without performing any optimizations that take a great deal of
3144 compilation time.
3146 @item -O2
3147 @opindex O2
3148 Optimize even more.  GCC performs nearly all supported optimizations
3149 that do not involve a space-speed tradeoff.  The compiler does not
3150 perform loop unrolling or function inlining when you specify @option{-O2}.
3151 As compared to @option{-O}, this option increases both compilation time
3152 and the performance of the generated code.
3154 @option{-O2} turns on all optional optimizations except for loop unrolling,
3155 function inlining, and register renaming.  It also turns on the
3156 @option{-fforce-mem} option on all machines and frame pointer elimination
3157 on machines where doing so does not interfere with debugging.
3159 Please note the warning under @option{-fgcse} about
3160 invoking @option{-O2} on programs that use computed gotos.
3162 @item -O3
3163 @opindex O3
3164 Optimize yet more.  @option{-O3} turns on all optimizations specified by
3165 @option{-O2} and also turns on the @option{-finline-functions} and
3166 @option{-frename-registers} options.
3168 @item -O0
3169 @opindex O0
3170 Do not optimize.
3172 @item -Os
3173 @opindex Os
3174 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
3175 do not typically increase code size.  It also performs further
3176 optimizations designed to reduce code size.
3178 If you use multiple @option{-O} options, with or without level numbers,
3179 the last such option is the one that is effective.
3180 @end table
3182 Options of the form @option{-f@var{flag}} specify machine-independent
3183 flags.  Most flags have both positive and negative forms; the negative
3184 form of @option{-ffoo} would be @option{-fno-foo}.  In the table below,
3185 only one of the forms is listed---the one which is not the default.
3186 You can figure out the other form by either removing @samp{no-} or
3187 adding it.
3189 @table @gcctabopt
3190 @item -ffloat-store
3191 @opindex ffloat-store
3192 Do not store floating point variables in registers, and inhibit other
3193 options that might change whether a floating point value is taken from a
3194 register or memory.
3196 @cindex floating point precision
3197 This option prevents undesirable excess precision on machines such as
3198 the 68000 where the floating registers (of the 68881) keep more
3199 precision than a @code{double} is supposed to have.  Similarly for the
3200 x86 architecture.  For most programs, the excess precision does only
3201 good, but a few programs rely on the precise definition of IEEE floating
3202 point.  Use @option{-ffloat-store} for such programs, after modifying
3203 them to store all pertinent intermediate computations into variables.
3205 @item -fno-default-inline
3206 @opindex fno-default-inline
3207 Do not make member functions inline by default merely because they are
3208 defined inside the class scope (C++ only).  Otherwise, when you specify
3209 @w{@option{-O}}, member functions defined inside class scope are compiled
3210 inline by default; i.e., you don't need to add @samp{inline} in front of
3211 the member function name.
3213 @item -fno-defer-pop
3214 @opindex fno-defer-pop
3215 Always pop the arguments to each function call as soon as that function
3216 returns.  For machines which must pop arguments after a function call,
3217 the compiler normally lets arguments accumulate on the stack for several
3218 function calls and pops them all at once.
3220 @item -fforce-mem
3221 @opindex fforce-mem
3222 Force memory operands to be copied into registers before doing
3223 arithmetic on them.  This produces better code by making all memory
3224 references potential common subexpressions.  When they are not common
3225 subexpressions, instruction combination should eliminate the separate
3226 register-load.  The @option{-O2} option turns on this option.
3228 @item -fforce-addr
3229 @opindex fforce-addr
3230 Force memory address constants to be copied into registers before
3231 doing arithmetic on them.  This may produce better code just as
3232 @option{-fforce-mem} may.
3234 @item -fomit-frame-pointer
3235 @opindex fomit-frame-pointer
3236 Don't keep the frame pointer in a register for functions that
3237 don't need one.  This avoids the instructions to save, set up and
3238 restore frame pointers; it also makes an extra register available
3239 in many functions.  @strong{It also makes debugging impossible on
3240 some machines.}
3242 @ifset INTERNALS
3243 On some machines, such as the VAX, this flag has no effect, because
3244 the standard calling sequence automatically handles the frame pointer
3245 and nothing is saved by pretending it doesn't exist.  The
3246 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
3247 whether a target machine supports this flag.  @xref{Registers}.
3248 @end ifset
3249 @ifclear INTERNALS
3250 On some machines, such as the VAX, this flag has no effect, because
3251 the standard calling sequence automatically handles the frame pointer
3252 and nothing is saved by pretending it doesn't exist.  The
3253 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
3254 whether a target machine supports this flag.  @xref{Registers,,Register
3255 Usage, gcc.info, Using and Porting GCC}.
3256 @end ifclear
3258 @item -foptimize-sibling-calls
3259 @opindex foptimize-sibling-calls
3260 Optimize sibling and tail recursive calls.
3262 @item -ftrapv
3263 @opindex ftrapv
3264 This option generates traps for signed overflow on addition, subtraction,
3265 multiplication operations.
3267 @item -fno-inline
3268 @opindex fno-inline
3269 Don't pay attention to the @code{inline} keyword.  Normally this option
3270 is used to keep the compiler from expanding any functions inline.
3271 Note that if you are not optimizing, no functions can be expanded inline.
3273 @item -finline-functions
3274 @opindex finline-functions
3275 Integrate all simple functions into their callers.  The compiler
3276 heuristically decides which functions are simple enough to be worth
3277 integrating in this way.
3279 If all calls to a given function are integrated, and the function is
3280 declared @code{static}, then the function is normally not output as
3281 assembler code in its own right.
3283 @item -finline-limit=@var{n}
3284 @opindex finline-limit
3285 By default, gcc limits the size of functions that can be inlined.  This flag
3286 allows the control of this limit for functions that are explicitly marked as
3287 inline (ie marked with the inline keyword or defined within the class
3288 definition in c++).  @var{n} is the size of functions that can be inlined in
3289 number of pseudo instructions (not counting parameter handling).  The default
3290 value of @var{n} is 600.
3291 Increasing this value can result in more inlined code at
3292 the cost of compilation time and memory consumption.  Decreasing usually makes
3293 the compilation faster and less code will be inlined (which presumably
3294 means slower programs).  This option is particularly useful for programs that
3295 use inlining heavily such as those based on recursive templates with C++.
3297 @emph{Note:} pseudo instruction represents, in this particular context, an
3298 abstract measurement of function's size.  In no way, it represents a count
3299 of assembly instructions and as such its exact meaning might change from one
3300 release to an another.
3302 @item -fkeep-inline-functions
3303 @opindex fkeep-inline-functions
3304 Even if all calls to a given function are integrated, and the function
3305 is declared @code{static}, nevertheless output a separate run-time
3306 callable version of the function.  This switch does not affect
3307 @code{extern inline} functions.
3309 @item -fkeep-static-consts
3310 @opindex fkeep-static-consts
3311 Emit variables declared @code{static const} when optimization isn't turned
3312 on, even if the variables aren't referenced.
3314 GCC enables this option by default.  If you want to force the compiler to
3315 check if the variable was referenced, regardless of whether or not
3316 optimization is turned on, use the @option{-fno-keep-static-consts} option.
3318 @item -fmerge-constants
3319 Attempt to merge identical constants (string constants and floating point
3320 constants) accross compilation units.
3322 This option is default for optimized compilation if assembler and linker
3323 support it.  Use @option{-fno-merge-constants} to inhibit this behavior.
3325 @item -fmerge-all-constants
3326 Attempt to merge identical constants and identical variables.
3328 This option implies @option{-fmerge-constants}.  In addition to
3329 @option{-fmerge-constants} this considers e.g. even constant initialized
3330 arrays or initialized constant variables with integral or floating point
3331 types.  Languages like C or C++ require each non-automatic variable to
3332 have distinct location, so using this option will result in non-conforming
3333 behavior.
3335 @item -fno-function-cse
3336 @opindex fno-function-cse
3337 Do not put function addresses in registers; make each instruction that
3338 calls a constant function contain the function's address explicitly.
3340 This option results in less efficient code, but some strange hacks
3341 that alter the assembler output may be confused by the optimizations
3342 performed when this option is not used.
3344 @item -ffast-math
3345 @opindex ffast-math
3346 Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, and @*
3347 @option{-fno-trapping-math}.
3349 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
3351 This option should never be turned on by any @option{-O} option since
3352 it can result in incorrect output for programs which depend on
3353 an exact implementation of IEEE or ISO rules/specifications for
3354 math functions.
3356 @item -fno-math-errno
3357 @opindex fno-math-errno
3358 Do not set ERRNO after calling math functions that are executed
3359 with a single instruction, e.g., sqrt.  A program that relies on
3360 IEEE exceptions for math error handling may want to use this flag
3361 for speed while maintaining IEEE arithmetic compatibility.
3363 This option should never be turned on by any @option{-O} option since
3364 it can result in incorrect output for programs which depend on
3365 an exact implementation of IEEE or ISO rules/specifications for
3366 math functions.
3368 The default is @option{-fmath-errno}.
3370 @item -funsafe-math-optimizations
3371 @opindex funsafe-math-optimizations
3372 Allow optimizations for floating-point arithmetic that (a) assume
3373 that arguments and results are valid and (b) may violate IEEE or
3374 ANSI standards.  When used at link-time, it may include libraries
3375 or startup files that change the default FPU control word or other
3376 similar optimizations.
3378 This option should never be turned on by any @option{-O} option since
3379 it can result in incorrect output for programs which depend on
3380 an exact implementation of IEEE or ISO rules/specifications for
3381 math functions.
3383 The default is @option{-fno-unsafe-math-optimizations}.
3385 @item -fno-trapping-math
3386 @opindex fno-trapping-math
3387 Compile code assuming that floating-point operations cannot generate
3388 user-visible traps.  Setting this option may allow faster code
3389 if one relies on ``non-stop'' IEEE arithmetic, for example.
3391 This option should never be turned on by any @option{-O} option since
3392 it can result in incorrect output for programs which depend on
3393 an exact implementation of IEEE or ISO rules/specifications for
3394 math functions.
3396 The default is @option{-ftrapping-math}.
3397 @end table
3399 The following options control specific optimizations.  The @option{-O2}
3400 option turns on all of these optimizations except @option{-funroll-loops}
3401 and @option{-funroll-all-loops}.  On most machines, the @option{-O} option
3402 turns on the @option{-fthread-jumps} and @option{-fdelayed-branch} options,
3403 but specific machines may handle it differently.
3405 You can use the following flags in the rare cases when ``fine-tuning''
3406 of optimizations to be performed is desired.
3408 Not all of the optimizations performed by GCC have @option{-f} options
3409 to control them.
3411 @table @gcctabopt
3412 @item -fstrength-reduce
3413 @opindex fstrength-reduce
3414 Perform the optimizations of loop strength reduction and
3415 elimination of iteration variables.
3417 @item -fthread-jumps
3418 @opindex fthread-jumps
3419 Perform optimizations where we check to see if a jump branches to a
3420 location where another comparison subsumed by the first is found.  If
3421 so, the first branch is redirected to either the destination of the
3422 second branch or a point immediately following it, depending on whether
3423 the condition is known to be true or false.
3425 @item -fcse-follow-jumps
3426 @opindex fcse-follow-jumps
3427 In common subexpression elimination, scan through jump instructions
3428 when the target of the jump is not reached by any other path.  For
3429 example, when CSE encounters an @code{if} statement with an
3430 @code{else} clause, CSE will follow the jump when the condition
3431 tested is false.
3433 @item -fcse-skip-blocks
3434 @opindex fcse-skip-blocks
3435 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
3436 follow jumps which conditionally skip over blocks.  When CSE
3437 encounters a simple @code{if} statement with no else clause,
3438 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
3439 body of the @code{if}.
3441 @item -frerun-cse-after-loop
3442 @opindex frerun-cse-after-loop
3443 Re-run common subexpression elimination after loop optimizations has been
3444 performed.
3446 @item -frerun-loop-opt
3447 @opindex frerun-loop-opt
3448 Run the loop optimizer twice.
3450 @item -fgcse
3451 @opindex fgcse
3452 Perform a global common subexpression elimination pass.
3453 This pass also performs global constant and copy propagation.
3455 @emph{Note:} When compiling a program using computed gotos, a GCC
3456 extension, you may get better runtime performance if you disable
3457 the global common subexpression elmination pass by adding
3458 @option{-fno-gcse} to the command line.
3460 @item -fgcse-lm
3461 @opindex fgcse-lm
3462 When @option{-fgcse-lm} is enabled, global common subexpression elimination will
3463 attempt to move loads which are only killed by stores into themselves.  This
3464 allows a loop containing a load/store sequence to be changed to a load outside
3465 the loop, and a copy/store within the loop.
3467 @item -fgcse-sm
3468 @opindex fgcse-sm
3469 When @option{-fgcse-sm} is enabled, A store motion pass is run after global common
3470 subexpression elimination.  This pass will attempt to move stores out of loops.
3471 When used in conjunction with @option{-fgcse-lm}, loops containing a load/store sequence
3472 can be changed to a load before the loop and a store after the loop.
3474 @item -fdelete-null-pointer-checks
3475 @opindex fdelete-null-pointer-checks
3476 Use global dataflow analysis to identify and eliminate useless checks
3477 for null pointers.  The compiler assumes that dereferencing a null
3478 pointer would have halted the program.  If a pointer is checked after
3479 it has already been dereferenced, it cannot be null.
3481 In some environments, this assumption is not true, and programs can
3482 safely dereference null pointers.  Use
3483 @option{-fno-delete-null-pointer-checks} to disable this optimization
3484 for programs which depend on that behavior.
3486 @item -fexpensive-optimizations
3487 @opindex fexpensive-optimizations
3488 Perform a number of minor optimizations that are relatively expensive.
3490 @item -foptimize-register-move
3491 @itemx -fregmove
3492 @opindex foptimize-register-move
3493 @opindex fregmove
3494 Attempt to reassign register numbers in move instructions and as
3495 operands of other simple instructions in order to maximize the amount of
3496 register tying.  This is especially helpful on machines with two-operand
3497 instructions.  GCC enables this optimization by default with @option{-O2}
3498 or higher.
3500 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
3501 optimization.
3503 @item -fdelayed-branch
3504 @opindex fdelayed-branch
3505 If supported for the target machine, attempt to reorder instructions
3506 to exploit instruction slots available after delayed branch
3507 instructions.
3509 @item -fschedule-insns
3510 @opindex fschedule-insns
3511 If supported for the target machine, attempt to reorder instructions to
3512 eliminate execution stalls due to required data being unavailable.  This
3513 helps machines that have slow floating point or memory load instructions
3514 by allowing other instructions to be issued until the result of the load
3515 or floating point instruction is required.
3517 @item -fschedule-insns2
3518 @opindex fschedule-insns2
3519 Similar to @option{-fschedule-insns}, but requests an additional pass of
3520 instruction scheduling after register allocation has been done.  This is
3521 especially useful on machines with a relatively small number of
3522 registers and where memory load instructions take more than one cycle.
3524 @item -ffunction-sections
3525 @itemx -fdata-sections
3526 @opindex ffunction-sections
3527 @opindex fdata-sections
3528 Place each function or data item into its own section in the output
3529 file if the target supports arbitrary sections.  The name of the
3530 function or the name of the data item determines the section's name
3531 in the output file.
3533 Use these options on systems where the linker can perform optimizations
3534 to improve locality of reference in the instruction space.  HPPA
3535 processors running HP-UX and Sparc processors running Solaris 2 have
3536 linkers with such optimizations.  Other systems using the ELF object format
3537 as well as AIX may have these optimizations in the future.
3539 Only use these options when there are significant benefits from doing
3540 so.  When you specify these options, the assembler and linker will
3541 create larger object and executable files and will also be slower.
3542 You will not be able to use @code{gprof} on all systems if you
3543 specify this option and you may have problems with debugging if
3544 you specify both this option and @option{-g}.
3546 @item -fcaller-saves
3547 @opindex fcaller-saves
3548 Enable values to be allocated in registers that will be clobbered by
3549 function calls, by emitting extra instructions to save and restore the
3550 registers around such calls.  Such allocation is done only when it
3551 seems to result in better code than would otherwise be produced.
3553 This option is always enabled by default on certain machines, usually
3554 those which have no call-preserved registers to use instead.
3556 For all machines, optimization level 2 and higher enables this flag by
3557 default.
3559 @item -funroll-loops
3560 @opindex funroll-loops
3561 Unroll loops whose number of iterations can be determined at compile
3562 time or upon entry to the loop.  @option{-funroll-loops} implies both
3563 @option{-fstrength-reduce} and @option{-frerun-cse-after-loop}.  This
3564 option makes code larger, and may or may not make it run faster.
3566 @item -funroll-all-loops
3567 @opindex funroll-all-loops
3568 Unroll all loops, even if their number of iterations is uncertain when
3569 the loop is entered.  This usually makes programs run more slowly.
3570 @option{-funroll-all-loops} implies the same options as
3571 @option{-funroll-loops},
3574 @item -fmove-all-movables
3575 @opindex fmove-all-movables
3576 Forces all invariant computations in loops to be moved
3577 outside the loop.
3579 @item -freduce-all-givs
3580 @opindex freduce-all-givs
3581 Forces all general-induction variables in loops to be
3582 strength-reduced.
3584 @emph{Note:} When compiling programs written in Fortran,
3585 @option{-fmove-all-movables} and @option{-freduce-all-givs} are enabled
3586 by default when you use the optimizer.
3588 These options may generate better or worse code; results are highly
3589 dependent on the structure of loops within the source code.
3591 These two options are intended to be removed someday, once
3592 they have helped determine the efficacy of various
3593 approaches to improving loop optimizations.
3595 Please let us (@w{@email{gcc@@gcc.gnu.org}} and @w{@email{fortran@@gnu.org}})
3596 know how use of these options affects
3597 the performance of your production code.
3598 We're very interested in code that runs @emph{slower}
3599 when these options are @emph{enabled}.
3601 @item -fno-peephole
3602 @itemx -fno-peephole2
3603 @opindex fno-peephole
3604 @opindex fno-peephole2
3605 Disable any machine-specific peephole optimizations.  The difference
3606 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
3607 are implemented in the compiler; some targets use one, some use the
3608 other, a few use both.
3610 @item -fbranch-probabilities
3611 @opindex fbranch-probabilities
3612 After running a program compiled with @option{-fprofile-arcs}
3613 (@pxref{Debugging Options,, Options for Debugging Your Program or
3614 @command{gcc}}), you can compile it a second time using
3615 @option{-fbranch-probabilities}, to improve optimizations based on
3616 the number of times each branch was taken.  When the program
3617 compiled with @option{-fprofile-arcs} exits it saves arc execution
3618 counts to a file called @file{@var{sourcename}.da} for each source
3619 file  The information in this data file is very dependent on the
3620 structure of the generated code, so you must use the same source code
3621 and the same optimization options for both compilations.
3623 @ifset INTERNALS
3624 With @option{-fbranch-probabilities}, GCC puts a @samp{REG_EXEC_COUNT}
3625 note on the first instruction of each basic block, and a
3626 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
3627 These can be used to improve optimization.  Currently, they are only
3628 used in one place: in @file{reorg.c}, instead of guessing which path a
3629 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
3630 exactly determine which path is taken more often.
3631 @end ifset
3633 @item -fno-guess-branch-probability
3634 @opindex fno-guess-branch-probability
3635 Do not guess branch probabilities using a randomized model.
3637 Sometimes gcc will opt to use a randomized model to guess branch
3638 probabilities, when none are available from either profiling feedback
3639 (@option{-fprofile-arcs}) or @samp{__builtin_expect}.  This means that
3640 different runs of the compiler on the same program may produce different
3641 object code.
3643 In a hard real-time system, people don't want different runs of the
3644 compiler to produce code that has different behavior; minimizing
3645 non-determinism is of paramount import.  This switch allows users to
3646 reduce non-determinism, possibly at the expense of inferior
3647 optimization.
3649 @item -fstrict-aliasing
3650 @opindex fstrict-aliasing
3651 Allows the compiler to assume the strictest aliasing rules applicable to
3652 the language being compiled.  For C (and C++), this activates
3653 optimizations based on the type of expressions.  In particular, an
3654 object of one type is assumed never to reside at the same address as an
3655 object of a different type, unless the types are almost the same.  For
3656 example, an @code{unsigned int} can alias an @code{int}, but not a
3657 @code{void*} or a @code{double}.  A character type may alias any other
3658 type.
3660 Pay special attention to code like this:
3661 @example
3662 union a_union @{
3663   int i;
3664   double d;
3667 int f() @{
3668   a_union t;
3669   t.d = 3.0;
3670   return t.i;
3672 @end example
3673 The practice of reading from a different union member than the one most
3674 recently written to (called ``type-punning'') is common.  Even with
3675 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
3676 is accessed through the union type.  So, the code above will work as
3677 expected.  However, this code might not:
3678 @example
3679 int f() @{
3680   a_union t;
3681   int* ip;
3682   t.d = 3.0;
3683   ip = &t.i;
3684   return *ip;
3686 @end example
3688 @ifset INTERNALS
3689 Every language that wishes to perform language-specific alias analysis
3690 should define a function that computes, given an @code{tree}
3691 node, an alias set for the node.  Nodes in different alias sets are not
3692 allowed to alias.  For an example, see the C front-end function
3693 @code{c_get_alias_set}.
3694 @end ifset
3696 @item -falign-functions
3697 @itemx -falign-functions=@var{n}
3698 @opindex falign-functions
3699 Align the start of functions to the next power-of-two greater than
3700 @var{n}, skipping up to @var{n} bytes.  For instance,
3701 @option{-falign-functions=32} aligns functions to the next 32-byte
3702 boundary, but @option{-falign-functions=24} would align to the next
3703 32-byte boundary only if this can be done by skipping 23 bytes or less.
3705 @option{-fno-align-functions} and @option{-falign-functions=1} are
3706 equivalent and mean that functions will not be aligned.
3708 Some assemblers only support this flag when @var{n} is a power of two;
3709 in that case, it is rounded up.
3711 If @var{n} is not specified, use a machine-dependent default.
3713 @item -falign-labels
3714 @itemx -falign-labels=@var{n}
3715 @opindex falign-labels
3716 Align all branch targets to a power-of-two boundary, skipping up to
3717 @var{n} bytes like @option{-falign-functions}.  This option can easily
3718 make code slower, because it must insert dummy operations for when the
3719 branch target is reached in the usual flow of the code.
3721 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
3722 are greater than this value, then their values are used instead.
3724 If @var{n} is not specified, use a machine-dependent default which is
3725 very likely to be @samp{1}, meaning no alignment.
3727 @item -falign-loops
3728 @itemx -falign-loops=@var{n}
3729 @opindex falign-loops
3730 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
3731 like @option{-falign-functions}.  The hope is that the loop will be
3732 executed many times, which will make up for any execution of the dummy
3733 operations.
3735 If @var{n} is not specified, use a machine-dependent default.
3737 @item -falign-jumps
3738 @itemx -falign-jumps=@var{n}
3739 @opindex falign-jumps
3740 Align branch targets to a power-of-two boundary, for branch targets
3741 where the targets can only be reached by jumping, skipping up to @var{n}
3742 bytes like @option{-falign-functions}.  In this case, no dummy operations
3743 need be executed.
3745 If @var{n} is not specified, use a machine-dependent default.
3747 @item -fssa
3748 @opindex fssa
3749 Perform optimizations in static single assignment form.  Each function's
3750 flow graph is translated into SSA form, optimizations are performed, and
3751 the flow graph is translated back from SSA form.  Users should not
3752 specify this option, since it is not yet ready for production use.
3754 @item -fssa-ccp
3755 @opindex fssa-ccp
3756 Perform Sparse Conditional Constant Propagation in SSA form.  Requires
3757 @option{-fssa}.  Like @option{-fssa}, this is an experimental feature.
3759 @item -fssa-dce
3760 @opindex fssa-dce
3761 Perform aggressive dead-code elimination in SSA form.  Requires @option{-fssa}.
3762 Like @option{-fssa}, this is an experimental feature.
3764 @item -fsingle-precision-constant
3765 @opindex fsingle-precision-constant
3766 Treat floating point constant as single precision constant instead of
3767 implicitly converting it to double precision constant.
3769 @item -frename-registers
3770 @opindex frename-registers
3771 Attempt to avoid false dependencies in scheduled code by making use
3772 of registers left over after register allocation.  This optimization
3773 will most benefit processors with lots of registers.  It can, however,
3774 make debugging impossible, since variables will no longer stay in
3775 a ``home register''.
3777 @item -fno-cprop-registers
3778 @opindex fno-cprop-registers
3779 After register allocation and post-register allocation instruction splitting,
3780 we perform a copy-propagation pass to try to reduce scheduling dependencies
3781 and occasionally eliminate the copy.
3783 @item --param @var{name}=@var{value}
3784 @opindex param
3785 In some places, GCC uses various constants to control the amount of
3786 optimization that is done.  For example, GCC will not inline functions
3787 that contain more that a certain number of instructions.  You can
3788 control some of these constants on the command-line using the
3789 @option{--param} option.
3791 In each case, the @var{value} is an integer.  The allowable choices for
3792 @var{name} are given in the following table:
3794 @table @gcctabopt
3795 @item max-delay-slot-insn-search
3796 The maximum number of instructions to consider when looking for an
3797 instruction to fill a delay slot.  If more than this arbitrary number of
3798 instructions is searched, the time savings from filling the delay slot
3799 will be minimal so stop searching.  Increasing values mean more
3800 aggressive optimization, making the compile time increase with probably
3801 small improvement in executable run time.
3803 @item max-delay-slot-live-search
3804 When trying to fill delay slots, the maximum number of instructions to
3805 consider when searching for a block with valid live register
3806 information.  Increasing this arbitrarily chosen value means more
3807 aggressive optimization, increasing the compile time.  This parameter
3808 should be removed when the delay slot code is rewritten to maintain the
3809 control-flow graph.
3811 @item max-gcse-memory
3812 The approximate maximum amount of memory that will be allocated in
3813 order to perform the global common subexpression elimination
3814 optimization.  If more memory than specified is required, the
3815 optimization will not be done.
3817 @item max-gcse-passes
3818 The maximum number of passes of GCSE to run.
3820 @item max-pending-list-length
3821 The maximum number of pending dependencies scheduling will allow
3822 before flushing the current state and starting over.  Large functions
3823 with few branches or calls can create excessively large lists which
3824 needlessly consume memory and resources.
3826 @item max-inline-insns
3827 If an function contains more than this many instructions, it
3828 will not be inlined.  This option is precisely equivalent to
3829 @option{-finline-limit}.
3831 @end table
3832 @end table
3834 @node Preprocessor Options
3835 @section Options Controlling the Preprocessor
3836 @cindex preprocessor options
3837 @cindex options, preprocessor
3839 These options control the C preprocessor, which is run on each C source
3840 file before actual compilation.
3842 If you use the @option{-E} option, nothing is done except preprocessing.
3843 Some of these options make sense only together with @option{-E} because
3844 they cause the preprocessor output to be unsuitable for actual
3845 compilation.
3847 @table @gcctabopt
3848 @item -include @var{file}
3849 @opindex include
3850 Process @var{file} as input before processing the regular input file.
3851 In effect, the contents of @var{file} are compiled first.  Any @option{-D}
3852 and @option{-U} options on the command line are always processed before
3853 @option{-include @var{file}}, regardless of the order in which they are
3854 written.  All the @option{-include} and @option{-imacros} options are
3855 processed in the order in which they are written.
3857 @item -imacros @var{file}
3858 @opindex imacros
3859 Process @var{file} as input, discarding the resulting output, before
3860 processing the regular input file.  Because the output generated from
3861 @var{file} is discarded, the only effect of @option{-imacros @var{file}}
3862 is to make the macros defined in @var{file} available for use in the
3863 main input.  All the @option{-include} and @option{-imacros} options are
3864 processed in the order in which they are written.
3866 @item -idirafter @var{dir}
3867 @opindex idirafter
3868 @cindex second include path
3869 Add the directory @var{dir} to the second include path.  The directories
3870 on the second include path are searched when a header file is not found
3871 in any of the directories in the main include path (the one that
3872 @option{-I} adds to).
3874 @item -iprefix @var{prefix}
3875 @opindex iprefix
3876 Specify @var{prefix} as the prefix for subsequent @option{-iwithprefix}
3877 options.
3879 @item -iwithprefix @var{dir}
3880 @opindex iwithprefix
3881 Add a directory to the second include path.  The directory's name is
3882 made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was
3883 specified previously with @option{-iprefix}.  If you have not specified a
3884 prefix yet, the directory containing the installed passes of the
3885 compiler is used as the default.
3887 @item -iwithprefixbefore @var{dir}
3888 @opindex iwithprefixbefore
3889 Add a directory to the main include path.  The directory's name is made
3890 by concatenating @var{prefix} and @var{dir}, as in the case of
3891 @option{-iwithprefix}.
3893 @item -isystem @var{dir}
3894 @opindex isystem
3895 Add a directory to the beginning of the second include path, marking it
3896 as a system directory, so that it gets the same special treatment as
3897 is applied to the standard system directories.
3899 @item -nostdinc
3900 @opindex nostdinc
3901 Do not search the standard system directories for header files.  Only
3902 the directories you have specified with @option{-I} options (and the
3903 current directory, if appropriate) are searched.  @xref{Directory
3904 Options}, for information on @option{-I}.
3906 By using both @option{-nostdinc} and @option{-I-}, you can limit the include-file
3907 search path to only those directories you specify explicitly.
3909 @item -remap
3910 @opindex remap
3911 When searching for a header file in a directory, remap file names if a
3912 file named @file{header.gcc} exists in that directory.  This can be used
3913 to work around limitations of file systems with file name restrictions.
3914 The @file{header.gcc} file should contain a series of lines with two
3915 tokens on each line: the first token is the name to map, and the second
3916 token is the actual name to use.
3918 @item -undef
3919 @opindex undef
3920 Do not predefine any nonstandard macros.  (Including architecture flags).
3922 @item -E
3923 @opindex E
3924 Run only the C preprocessor.  Preprocess all the C source files
3925 specified and output the results to standard output or to the
3926 specified output file.
3928 @item -C
3929 @opindex C
3930 Tell the preprocessor not to discard comments.  Used with the
3931 @option{-E} option.
3933 @item -P
3934 @opindex P
3935 Tell the preprocessor not to generate @samp{#line} directives.
3936 Used with the @option{-E} option.
3938 @cindex make
3939 @cindex dependencies, make
3940 @item -M
3941 @opindex M
3942 Instead of outputting the result of preprocessing, output a rule
3943 suitable for @code{make} describing the dependencies of the main source
3944 file.  The preprocessor outputs one @code{make} rule containing the
3945 object file name for that source file, a colon, and the names of all the
3946 included files.  Unless overridden explicitly, the object file name
3947 consists of the basename of the source file with any suffix replaced with
3948 object file suffix.  If there are many included files then the
3949 rule is split into several lines using @samp{\}-newline.
3951 @option{-M} implies @option{-E}.
3953 @item -MM
3954 @opindex MM
3955 Like @option{-M}, but mention only the files included with @samp{#include
3956 "@var{file}"}.  System header files included with @samp{#include
3957 <@var{file}>} are omitted.
3959 @item -MD
3960 @opindex MD
3961 Like @option{-M} but the dependency information is written to a file
3962 rather than stdout.  @code{gcc} will use the same file name and
3963 directory as the object file, but with the suffix @file{.d} instead.
3965 This is in addition to compiling the main file as specified---@option{-MD}
3966 does not inhibit ordinary compilation the way @option{-M} does,
3967 unless you also specify @option{-MG}.
3969 With Mach, you can use the utility @code{md} to merge multiple
3970 dependency files into a single dependency file suitable for using with
3971 the @samp{make} command.
3973 @item -MMD
3974 @opindex MMD
3975 Like @option{-MD} except mention only user header files, not system
3976 -header files.
3978 @item -MF @var{file}
3979 @opindex MF
3980 When used with @option{-M} or @option{-MM}, specifies a file to write the
3981 dependencies to.  This allows the preprocessor to write the preprocessed
3982 file to stdout normally.  If no @option{-MF} switch is given, CPP sends
3983 the rules to stdout and suppresses normal preprocessed output.
3985 Another way to specify output of a @code{make} rule is by setting
3986 the environment variable @env{DEPENDENCIES_OUTPUT} (@pxref{Environment
3987 Variables}).
3989 @item -MG
3990 @opindex MG
3991 When used with @option{-M} or @option{-MM}, @option{-MG} says to treat missing
3992 header files as generated files and assume they live in the same
3993 directory as the source file.  It suppresses preprocessed output, as a
3994 missing header file is ordinarily an error.
3996 This feature is used in automatic updating of makefiles.
3998 @item -MP
3999 @opindex MP
4000 This option instructs CPP to add a phony target for each dependency
4001 other than the main file, causing each to depend on nothing.  These
4002 dummy rules work around errors @code{make} gives if you remove header
4003 files without updating the @code{Makefile} to match.
4005 This is typical output:-
4007 @smallexample
4008 /tmp/test.o: /tmp/test.c /tmp/test.h
4010 /tmp/test.h:
4011 @end smallexample
4013 @item -MQ @var{target}
4014 @item -MT @var{target}
4015 @opindex MQ
4016 @opindex MT
4017 By default CPP uses the main file name, including any path, and appends
4018 the object suffix, normally ``.o'', to it to obtain the name of the
4019 target for dependency generation.  With @option{-MT} you can specify a
4020 target yourself, overriding the default one.
4022 If you want multiple targets, you can specify them as a single argument
4023 to @option{-MT}, or use multiple @option{-MT} options.
4025 The targets you specify are output in the order they appear on the
4026 command line.  @option{-MQ} is identical to @option{-MT}, except that the
4027 target name is quoted for Make, but with @option{-MT} it isn't.  For
4028 example, @option{-MT '$(objpfx)foo.o'} gives
4030 @smallexample
4031 $(objpfx)foo.o: /tmp/foo.c
4032 @end smallexample
4034 but @option{-MQ '$(objpfx)foo.o'} gives
4036 @smallexample
4037 $$(objpfx)foo.o: /tmp/foo.c
4038 @end smallexample
4040 The default target is automatically quoted, as if it were given with
4041 @option{-MQ}.
4043 @item -H
4044 @opindex H
4045 Print the name of each header file used, in addition to other normal
4046 activities.
4048 @item -A@var{question}(@var{answer})
4049 @opindex A
4050 Assert the answer @var{answer} for @var{question}, in case it is tested
4051 with a preprocessing conditional such as @samp{#if
4052 #@var{question}(@var{answer})}.  @option{-A-} disables the standard
4053 assertions that normally describe the target machine.
4055 @item -D@var{macro}
4056 @opindex D
4057 Define macro @var{macro} with the string @samp{1} as its definition.
4059 @item -D@var{macro}=@var{defn}
4060 Define macro @var{macro} as @var{defn}.  All instances of @option{-D} on
4061 the command line are processed before any @option{-U} options.
4063 Any @option{-D} and @option{-U} options on the command line are processed in
4064 order, and always before @option{-imacros @var{file}}, regardless of the
4065 order in which they are written.
4067 @item -U@var{macro}
4068 @opindex U
4069 Undefine macro @var{macro}.  @option{-U} options are evaluated after all
4070 @option{-D} options, but before any @option{-include} and @option{-imacros}
4071 options.
4073 Any @option{-D} and @option{-U} options on the command line are processed in
4074 order, and always before @option{-imacros @var{file}}, regardless of the
4075 order in which they are written.
4077 @item -dM
4078 @opindex dM
4079 Tell the preprocessor to output only a list of the macro definitions
4080 that are in effect at the end of preprocessing.  Used with the @option{-E}
4081 option.
4083 @item -dD
4084 @opindex dD
4085 Tell the preprocessing to pass all macro definitions into the output, in
4086 their proper sequence in the rest of the output.
4088 @item -dN
4089 @opindex dN
4090 Like @option{-dD} except that the macro arguments and contents are omitted.
4091 Only @samp{#define @var{name}} is included in the output.
4093 @item -dI
4094 @opindex dI
4095 Output @samp{#include} directives in addition to the result of
4096 preprocessing.
4098 @item -fpreprocessed
4099 @opindex fpreprocessed
4100 Indicate to the preprocessor that the input file has already been
4101 preprocessed.  This suppresses things like macro expansion, trigraph
4102 conversion, escaped newline splicing, and processing of most directives.
4103 The preprocessor still recognizes and removes comments, so that you can
4104 pass a file preprocessed with @option{-C} to the compiler without
4105 problems.  In this mode the integrated preprocessor is little more than
4106 a tokenizer for the front ends.
4108 @option{-fpreprocessed} is implicit if the input file has one of the
4109 extensions @samp{i}, @samp{ii} or @samp{mi}.  These are the extensions
4110 that GCC uses for preprocessed files created by @option{-save-temps}.
4112 @item -trigraphs
4113 @opindex trigraphs
4114 Process ISO standard trigraph sequences.  These are three-character
4115 sequences, all starting with @samp{??}, that are defined by ISO C to
4116 stand for single characters.  For example, @samp{??/} stands for
4117 @samp{\}, so @samp{'??/n'} is a character constant for a newline.  By
4118 default, GCC ignores trigraphs, but in standard-conforming modes it
4119 converts them.  See the @option{-std} and @option{-ansi} options.
4121 The nine trigraph sequences are
4122 @table @samp
4123 @item ??(
4124 @expansion{} @samp{[}
4126 @item ??)
4127 @expansion{} @samp{]}
4129 @item ??<
4130 @expansion{} @samp{@{}
4132 @item ??>
4133 @expansion{} @samp{@}}
4135 @item ??=
4136 @expansion{} @samp{#}
4138 @item ??/
4139 @expansion{} @samp{\}
4141 @item ??'
4142 @expansion{} @samp{^}
4144 @item ??!
4145 @expansion{} @samp{|}
4147 @item ??-
4148 @expansion{} @samp{~}
4150 @end table
4152 Trigraph support is not popular, so many compilers do not implement it
4153 properly.  Portable code should not rely on trigraphs being either
4154 converted or ignored.
4156 @item -Wp,@var{option}
4157 @opindex Wp
4158 Pass @var{option} as an option to the preprocessor.  If @var{option}
4159 contains commas, it is split into multiple options at the commas.
4160 @end table
4162 @node Assembler Options
4163 @section Passing Options to the Assembler
4165 @c prevent bad page break with this line
4166 You can pass options to the assembler.
4168 @table @gcctabopt
4169 @item -Wa,@var{option}
4170 @opindex Wa
4171 Pass @var{option} as an option to the assembler.  If @var{option}
4172 contains commas, it is split into multiple options at the commas.
4173 @end table
4175 @node Link Options
4176 @section Options for Linking
4177 @cindex link options
4178 @cindex options, linking
4180 These options come into play when the compiler links object files into
4181 an executable output file.  They are meaningless if the compiler is
4182 not doing a link step.
4184 @table @gcctabopt
4185 @cindex file names
4186 @item @var{object-file-name}
4187 A file name that does not end in a special recognized suffix is
4188 considered to name an object file or library.  (Object files are
4189 distinguished from libraries by the linker according to the file
4190 contents.)  If linking is done, these object files are used as input
4191 to the linker.
4193 @item -c
4194 @itemx -S
4195 @itemx -E
4196 @opindex c
4197 @opindex S
4198 @opindex E
4199 If any of these options is used, then the linker is not run, and
4200 object file names should not be used as arguments.  @xref{Overall
4201 Options}.
4203 @cindex Libraries
4204 @item -l@var{library}
4205 @itemx -l @var{library}
4206 @opindex l
4207 Search the library named @var{library} when linking.  (The second
4208 alternative with the library as a separate argument is only for
4209 POSIX compliance and is not recommended.)
4211 It makes a difference where in the command you write this option; the
4212 linker searches and processes libraries and object files in the order they
4213 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
4214 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
4215 to functions in @samp{z}, those functions may not be loaded.
4217 The linker searches a standard list of directories for the library,
4218 which is actually a file named @file{lib@var{library}.a}.  The linker
4219 then uses this file as if it had been specified precisely by name.
4221 The directories searched include several standard system directories
4222 plus any that you specify with @option{-L}.
4224 Normally the files found this way are library files---archive files
4225 whose members are object files.  The linker handles an archive file by
4226 scanning through it for members which define symbols that have so far
4227 been referenced but not defined.  But if the file that is found is an
4228 ordinary object file, it is linked in the usual fashion.  The only
4229 difference between using an @option{-l} option and specifying a file name
4230 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
4231 and searches several directories.
4233 @item -lobjc
4234 @opindex lobjc
4235 You need this special case of the @option{-l} option in order to
4236 link an Objective-C program.
4238 @item -nostartfiles
4239 @opindex nostartfiles
4240 Do not use the standard system startup files when linking.
4241 The standard system libraries are used normally, unless @option{-nostdlib}
4242 or @option{-nodefaultlibs} is used.
4244 @item -nodefaultlibs
4245 @opindex nodefaultlibs
4246 Do not use the standard system libraries when linking.
4247 Only the libraries you specify will be passed to the linker.
4248 The standard startup files are used normally, unless @option{-nostartfiles}
4249 is used.  The compiler may generate calls to memcmp, memset, and memcpy
4250 for System V (and ISO C) environments or to bcopy and bzero for
4251 BSD environments.  These entries are usually resolved by entries in
4252 libc.  These entry points should be supplied through some other
4253 mechanism when this option is specified.
4255 @item -nostdlib
4256 @opindex nostdlib
4257 Do not use the standard system startup files or libraries when linking.
4258 No startup files and only the libraries you specify will be passed to
4259 the linker.  The compiler may generate calls to memcmp, memset, and memcpy
4260 for System V (and ISO C) environments or to bcopy and bzero for
4261 BSD environments.  These entries are usually resolved by entries in
4262 libc.  These entry points should be supplied through some other
4263 mechanism when this option is specified.
4265 @cindex @option{-lgcc}, use with @option{-nostdlib}
4266 @cindex @option{-nostdlib} and unresolved references
4267 @cindex unresolved references and @option{-nostdlib}
4268 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
4269 @cindex @option{-nodefaultlibs} and unresolved references
4270 @cindex unresolved references and @option{-nodefaultlibs}
4271 One of the standard libraries bypassed by @option{-nostdlib} and
4272 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
4273 that GCC uses to overcome shortcomings of particular machines, or special
4274 needs for some languages.
4275 @ifset INTERNALS
4276 (@xref{Interface,,Interfacing to GCC Output}, for more discussion of
4277 @file{libgcc.a}.)
4278 @end ifset
4279 @ifclear INTERNALS
4280 (@xref{Interface,,Interfacing to GCC Output,gcc.info,Porting GCC},
4281 for more discussion of @file{libgcc.a}.)
4282 @end ifclear
4283 In most cases, you need @file{libgcc.a} even when you want to avoid
4284 other standard libraries.  In other words, when you specify @option{-nostdlib}
4285 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
4286 This ensures that you have no unresolved references to internal GCC
4287 library subroutines.  (For example, @samp{__main}, used to ensure C++
4288 constructors will be called; @pxref{Collect2,,@command{collect2}}.)
4290 @item -s
4291 @opindex s
4292 Remove all symbol table and relocation information from the executable.
4294 @item -static
4295 @opindex static
4296 On systems that support dynamic linking, this prevents linking with the shared
4297 libraries.  On other systems, this option has no effect.
4299 @item -shared
4300 @opindex shared
4301 Produce a shared object which can then be linked with other objects to
4302 form an executable.  Not all systems support this option.  For predictable
4303 results, you must also specify the same set of options that were used to
4304 generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
4305 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
4306 needs to build supplementary stub code for constructors to work.  On
4307 multi-libbed systems, @samp{gcc -shared} must select the correct support
4308 libraries to link against.  Failing to supply the correct flags may lead
4309 to subtle defects.  Supplying them in cases where they are not necessary
4310 is innocuous.}
4312 @item -shared-libgcc
4313 @itemx -static-libgcc
4314 @opindex shared-libgcc
4315 @opindex static-libgcc
4316 On systems that provide @file{libgcc} as a shared library, these options
4317 force the use of either the shared or static version respectively.
4318 If no shared version of @file{libgcc} was built when the compiler was
4319 configured, these options have no effect.
4321 There are several situations in which an application should use the
4322 shared @file{libgcc} instead of the static version.  The most common
4323 of these is when the application wishes to throw and catch exceptions
4324 across different shared libraries.  In that case, each of the libraries
4325 as well as the application itself should use the shared @file{libgcc}.
4327 Therefore, whenever you specify the @option{-shared} option, the GCC
4328 driver automatically adds @option{-shared-libgcc}, unless you explicitly
4329 specify @option{-static-libgcc}.  The G++ driver automatically adds
4330 @option{-shared-libgcc} when you build a main executable as well because
4331 for C++ programs that is typically the right thing to do.
4332 (Exception-handling will not work reliably otherwise.)
4334 However, when linking a main executable written in C, you must
4335 explicitly say @option{-shared-libgcc} if you want to use the shared
4336 @file{libgcc}.
4338 @item -symbolic
4339 @opindex symbolic
4340 Bind references to global symbols when building a shared object.  Warn
4341 about any unresolved references (unless overridden by the link editor
4342 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
4343 this option.
4345 @item -Xlinker @var{option}
4346 @opindex Xlinker
4347 Pass @var{option} as an option to the linker.  You can use this to
4348 supply system-specific linker options which GCC does not know how to
4349 recognize.
4351 If you want to pass an option that takes an argument, you must use
4352 @option{-Xlinker} twice, once for the option and once for the argument.
4353 For example, to pass @option{-assert definitions}, you must write
4354 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
4355 @option{-Xlinker "-assert definitions"}, because this passes the entire
4356 string as a single argument, which is not what the linker expects.
4358 @item -Wl,@var{option}
4359 @opindex Wl
4360 Pass @var{option} as an option to the linker.  If @var{option} contains
4361 commas, it is split into multiple options at the commas.
4363 @item -u @var{symbol}
4364 @opindex u
4365 Pretend the symbol @var{symbol} is undefined, to force linking of
4366 library modules to define it.  You can use @option{-u} multiple times with
4367 different symbols to force loading of additional library modules.
4368 @end table
4370 @node Directory Options
4371 @section Options for Directory Search
4372 @cindex directory options
4373 @cindex options, directory search
4374 @cindex search path
4376 These options specify directories to search for header files, for
4377 libraries and for parts of the compiler:
4379 @table @gcctabopt
4380 @item -I@var{dir}
4381 @opindex I
4382 Add the directory @var{dir} to the head of the list of directories to be
4383 searched for header files.  This can be used to override a system header
4384 file, substituting your own version, since these directories are
4385 searched before the system header file directories.  However, you should
4386 not use this option to add directories that contain vendor-supplied
4387 system header files (use @option{-isystem} for that).  If you use more than
4388 one @option{-I} option, the directories are scanned in left-to-right
4389 order; the standard system directories come after.
4391 If a standard system include directory, or a directory specified with
4392 @option{-isystem}, is also specified with @option{-I}, it will be
4393 searched only in the position requested by @option{-I}.  Also, it will
4394 not be considered a system include directory.  If that directory really
4395 does contain system headers, there is a good chance that they will
4396 break.  For instance, if GCC's installation procedure edited the headers
4397 in @file{/usr/include} to fix bugs, @samp{-I/usr/include} will cause the
4398 original, buggy headers to be found instead of the corrected ones.  GCC
4399 will issue a warning when a system include directory is hidden in this
4400 way.
4402 @item -I-
4403 @opindex I-
4404 Any directories you specify with @option{-I} options before the @option{-I-}
4405 option are searched only for the case of @samp{#include "@var{file}"};
4406 they are not searched for @samp{#include <@var{file}>}.
4408 If additional directories are specified with @option{-I} options after
4409 the @option{-I-}, these directories are searched for all @samp{#include}
4410 directives.  (Ordinarily @emph{all} @option{-I} directories are used
4411 this way.)
4413 In addition, the @option{-I-} option inhibits the use of the current
4414 directory (where the current input file came from) as the first search
4415 directory for @samp{#include "@var{file}"}.  There is no way to
4416 override this effect of @option{-I-}.  With @option{-I.} you can specify
4417 searching the directory which was current when the compiler was
4418 invoked.  That is not exactly the same as what the preprocessor does
4419 by default, but it is often satisfactory.
4421 @option{-I-} does not inhibit the use of the standard system directories
4422 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
4423 independent.
4425 @item -L@var{dir}
4426 @opindex L
4427 Add directory @var{dir} to the list of directories to be searched
4428 for @option{-l}.
4430 @item -B@var{prefix}
4431 @opindex B
4432 This option specifies where to find the executables, libraries,
4433 include files, and data files of the compiler itself.
4435 The compiler driver program runs one or more of the subprograms
4436 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
4437 @var{prefix} as a prefix for each program it tries to run, both with and
4438 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
4440 For each subprogram to be run, the compiler driver first tries the
4441 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
4442 was not specified, the driver tries two standard prefixes, which are
4443 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}.  If neither of
4444 those results in a file name that is found, the unmodified program
4445 name is searched for using the directories specified in your
4446 @env{PATH} environment variable.
4448 The compiler will check to see if the path provided by the @option{-B}
4449 refers to a directory, and if necessary it will add a directory
4450 separator character at the end of the path.
4452 @option{-B} prefixes that effectively specify directory names also apply
4453 to libraries in the linker, because the compiler translates these
4454 options into @option{-L} options for the linker.  They also apply to
4455 includes files in the preprocessor, because the compiler translates these
4456 options into @option{-isystem} options for the preprocessor.  In this case,
4457 the compiler appends @samp{include} to the prefix.
4459 The run-time support file @file{libgcc.a} can also be searched for using
4460 the @option{-B} prefix, if needed.  If it is not found there, the two
4461 standard prefixes above are tried, and that is all.  The file is left
4462 out of the link if it is not found by those means.
4464 Another way to specify a prefix much like the @option{-B} prefix is to use
4465 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
4466 Variables}.
4468 As a special kludge, if the path provided by @option{-B} is
4469 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
4470 9, then it will be replaced by @file{[dir/]include}.  This is to help
4471 with boot-strapping the compiler.
4473 @item -specs=@var{file}
4474 @opindex specs
4475 Process @var{file} after the compiler reads in the standard @file{specs}
4476 file, in order to override the defaults that the @file{gcc} driver
4477 program uses when determining what switches to pass to @file{cc1},
4478 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
4479 @option{-specs=@var{file}} can be specified on the command line, and they
4480 are processed in order, from left to right.
4481 @end table
4483 @c man end
4485 @node Spec Files
4486 @section Specifying subprocesses and the switches to pass to them
4487 @cindex Spec Files
4488 @command{gcc} is a driver program.  It performs its job by invoking a
4489 sequence of other programs to do the work of compiling, assembling and
4490 linking.  GCC interprets its command-line parameters and uses these to
4491 deduce which programs it should invoke, and which command-line options
4492 it ought to place on their command lines.  This behavior is controlled
4493 by @dfn{spec strings}.  In most cases there is one spec string for each
4494 program that GCC can invoke, but a few programs have multiple spec
4495 strings to control their behavior.  The spec strings built into GCC can
4496 be overridden by using the @option{-specs=} command-line switch to specify
4497 a spec file.
4499 @dfn{Spec files} are plaintext files that are used to construct spec
4500 strings.  They consist of a sequence of directives separated by blank
4501 lines.  The type of directive is determined by the first non-whitespace
4502 character on the line and it can be one of the following:
4504 @table @code
4505 @item %@var{command}
4506 Issues a @var{command} to the spec file processor.  The commands that can
4507 appear here are:
4509 @table @code
4510 @item %include <@var{file}>
4511 @cindex %include
4512 Search for @var{file} and insert its text at the current point in the
4513 specs file.
4515 @item %include_noerr <@var{file}>
4516 @cindex %include_noerr
4517 Just like @samp{%include}, but do not generate an error message if the include
4518 file cannot be found.
4520 @item %rename @var{old_name} @var{new_name}
4521 @cindex %rename
4522 Rename the spec string @var{old_name} to @var{new_name}.
4524 @end table
4526 @item *[@var{spec_name}]:
4527 This tells the compiler to create, override or delete the named spec
4528 string.  All lines after this directive up to the next directive or
4529 blank line are considered to be the text for the spec string.  If this
4530 results in an empty string then the spec will be deleted.  (Or, if the
4531 spec did not exist, then nothing will happened.)  Otherwise, if the spec
4532 does not currently exist a new spec will be created.  If the spec does
4533 exist then its contents will be overridden by the text of this
4534 directive, unless the first character of that text is the @samp{+}
4535 character, in which case the text will be appended to the spec.
4537 @item [@var{suffix}]:
4538 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
4539 and up to the next directive or blank line are considered to make up the
4540 spec string for the indicated suffix.  When the compiler encounters an
4541 input file with the named suffix, it will processes the spec string in
4542 order to work out how to compile that file.  For example:
4544 @smallexample
4545 .ZZ:
4546 z-compile -input %i
4547 @end smallexample
4549 This says that any input file whose name ends in @samp{.ZZ} should be
4550 passed to the program @samp{z-compile}, which should be invoked with the
4551 command-line switch @option{-input} and with the result of performing the
4552 @samp{%i} substitution.  (See below.)
4554 As an alternative to providing a spec string, the text that follows a
4555 suffix directive can be one of the following:
4557 @table @code
4558 @item @@@var{language}
4559 This says that the suffix is an alias for a known @var{language}.  This is
4560 similar to using the @option{-x} command-line switch to GCC to specify a
4561 language explicitly.  For example:
4563 @smallexample
4564 .ZZ:
4565 @@c++
4566 @end smallexample
4568 Says that .ZZ files are, in fact, C++ source files.
4570 @item #@var{name}
4571 This causes an error messages saying:
4573 @smallexample
4574 @var{name} compiler not installed on this system.
4575 @end smallexample
4576 @end table
4578 GCC already has an extensive list of suffixes built into it.
4579 This directive will add an entry to the end of the list of suffixes, but
4580 since the list is searched from the end backwards, it is effectively
4581 possible to override earlier entries using this technique.
4583 @end table
4585 GCC has the following spec strings built into it.  Spec files can
4586 override these strings or create their own.  Note that individual
4587 targets can also add their own spec strings to this list.
4589 @smallexample
4590 asm          Options to pass to the assembler
4591 asm_final    Options to pass to the assembler post-processor
4592 cpp          Options to pass to the C preprocessor
4593 cc1          Options to pass to the C compiler
4594 cc1plus      Options to pass to the C++ compiler
4595 endfile      Object files to include at the end of the link
4596 link         Options to pass to the linker
4597 lib          Libraries to include on the command line to the linker
4598 libgcc       Decides which GCC support library to pass to the linker
4599 linker       Sets the name of the linker
4600 predefines   Defines to be passed to the C preprocessor
4601 signed_char  Defines to pass to CPP to say whether @code{char} is signed
4602              by default
4603 startfile    Object files to include at the start of the link
4604 @end smallexample
4606 Here is a small example of a spec file:
4608 @smallexample
4609 %rename lib                 old_lib
4611 *lib:
4612 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
4613 @end smallexample
4615 This example renames the spec called @samp{lib} to @samp{old_lib} and
4616 then overrides the previous definition of @samp{lib} with a new one.
4617 The new definition adds in some extra command-line options before
4618 including the text of the old definition.
4620 @dfn{Spec strings} are a list of command-line options to be passed to their
4621 corresponding program.  In addition, the spec strings can contain
4622 @samp{%}-prefixed sequences to substitute variable text or to
4623 conditionally insert text into the command line.  Using these constructs
4624 it is possible to generate quite complex command lines.
4626 Here is a table of all defined @samp{%}-sequences for spec
4627 strings.  Note that spaces are not generated automatically around the
4628 results of expanding these sequences.  Therefore you can concatenate them
4629 together or combine them with constant text in a single argument.
4631 @table @code
4632 @item %%
4633 Substitute one @samp{%} into the program name or argument.
4635 @item %i
4636 Substitute the name of the input file being processed.
4638 @item %b
4639 Substitute the basename of the input file being processed.
4640 This is the substring up to (and not including) the last period
4641 and not including the directory.
4643 @item %B
4644 This is the same as @samp{%b}, but include the file suffix (text after
4645 the last period).
4647 @item %d
4648 Marks the argument containing or following the @samp{%d} as a
4649 temporary file name, so that that file will be deleted if GCC exits
4650 successfully.  Unlike @samp{%g}, this contributes no text to the
4651 argument.
4653 @item %g@var{suffix}
4654 Substitute a file name that has suffix @var{suffix} and is chosen
4655 once per compilation, and mark the argument in the same way as
4656 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
4657 name is now chosen in a way that is hard to predict even when previously
4658 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
4659 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
4660 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
4661 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
4662 was simply substituted with a file name chosen once per compilation,
4663 without regard to any appended suffix (which was therefore treated
4664 just like ordinary text), making such attacks more likely to succeed.
4666 @item %u@var{suffix}
4667 Like @samp{%g}, but generates a new temporary file name even if
4668 @samp{%u@var{suffix}} was already seen.
4670 @item %U@var{suffix}
4671 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
4672 new one if there is no such last file name.  In the absence of any
4673 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
4674 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
4675 would involve the generation of two distinct file names, one
4676 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
4677 simply substituted with a file name chosen for the previous @samp{%u},
4678 without regard to any appended suffix.
4680 @item %j@var{SUFFIX}
4681 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
4682 writable, and if save-temps is off; otherwise, substitute the name
4683 of a temporary file, just like @samp{%u}.  This temporary file is not
4684 meant for communication between processes, but rather as a junk
4685 disposal mechanism.
4687 @item %.@var{SUFFIX}
4688 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
4689 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
4690 terminated by the next space or %.
4692 @item %w
4693 Marks the argument containing or following the @samp{%w} as the
4694 designated output file of this compilation.  This puts the argument
4695 into the sequence of arguments that @samp{%o} will substitute later.
4697 @item %o
4698 Substitutes the names of all the output files, with spaces
4699 automatically placed around them.  You should write spaces
4700 around the @samp{%o} as well or the results are undefined.
4701 @samp{%o} is for use in the specs for running the linker.
4702 Input files whose names have no recognized suffix are not compiled
4703 at all, but they are included among the output files, so they will
4704 be linked.
4706 @item %O
4707 Substitutes the suffix for object files.  Note that this is
4708 handled specially when it immediately follows @samp{%g, %u, or %U},
4709 because of the need for those to form complete file names.  The
4710 handling is such that @samp{%O} is treated exactly as if it had already
4711 been substituted, except that @samp{%g, %u, and %U} do not currently
4712 support additional @var{suffix} characters following @samp{%O} as they would
4713 following, for example, @samp{.o}.
4715 @item %p
4716 Substitutes the standard macro predefinitions for the
4717 current target machine.  Use this when running @code{cpp}.
4719 @item %P
4720 Like @samp{%p}, but puts @samp{__} before and after the name of each
4721 predefined macro, except for macros that start with @samp{__} or with
4722 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
4725 @item %I
4726 Substitute a @option{-iprefix} option made from @env{GCC_EXEC_PREFIX}.
4728 @item %s
4729 Current argument is the name of a library or startup file of some sort.
4730 Search for that file in a standard list of directories and substitute
4731 the full name found.
4733 @item %e@var{str}
4734 Print @var{str} as an error message.  @var{str} is terminated by a newline.
4735 Use this when inconsistent options are detected.
4737 @item %|
4738 Output @samp{-} if the input for the current command is coming from a pipe.
4740 @item %(@var{name})
4741 Substitute the contents of spec string @var{name} at this point.
4743 @item %[@var{name}]
4744 Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
4746 @item %x@{@var{option}@}
4747 Accumulate an option for @samp{%X}.
4749 @item %X
4750 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
4751 spec string.
4753 @item %Y
4754 Output the accumulated assembler options specified by @option{-Wa}.
4756 @item %Z
4757 Output the accumulated preprocessor options specified by @option{-Wp}.
4759 @item %v1
4760 Substitute the major version number of GCC@.
4761 (For version 2.9.5, this is 2.)
4763 @item %v2
4764 Substitute the minor version number of GCC@.
4765 (For version 2.9.5, this is 9.)
4767 @item %v3
4768 Substitute the patch level number of GCC@.
4769 (For version 2.9.5, this is 5.)
4771 @item %a
4772 Process the @code{asm} spec.  This is used to compute the
4773 switches to be passed to the assembler.
4775 @item %A
4776 Process the @code{asm_final} spec.  This is a spec string for
4777 passing switches to an assembler post-processor, if such a program is
4778 needed.
4780 @item %l
4781 Process the @code{link} spec.  This is the spec for computing the
4782 command line passed to the linker.  Typically it will make use of the
4783 @samp{%L %G %S %D and %E} sequences.
4785 @item %D
4786 Dump out a @option{-L} option for each directory that GCC believes might
4787 contain startup files.  If the target supports multilibs then the
4788 current multilib directory will be prepended to each of these paths.
4790 @item %M
4791 Output the multilib directory with directory separators replaced with
4792 @samp{_}.  If multilib directories are not set, or the multilib directory is
4793 @file{.} then this option emits nothing.
4795 @item %L
4796 Process the @code{lib} spec.  This is a spec string for deciding which
4797 libraries should be included on the command line to the linker.
4799 @item %G
4800 Process the @code{libgcc} spec.  This is a spec string for deciding
4801 which GCC support library should be included on the command line to the linker.
4803 @item %S
4804 Process the @code{startfile} spec.  This is a spec for deciding which
4805 object files should be the first ones passed to the linker.  Typically
4806 this might be a file named @file{crt0.o}.
4808 @item %E
4809 Process the @code{endfile} spec.  This is a spec string that specifies
4810 the last object files that will be passed to the linker.
4812 @item %C
4813 Process the @code{cpp} spec.  This is used to construct the arguments
4814 to be passed to the C preprocessor.
4816 @item %c
4817 Process the @code{signed_char} spec.  This is intended to be used
4818 to tell cpp whether a char is signed.  It typically has the definition:
4819 @smallexample
4820 %@{funsigned-char:-D__CHAR_UNSIGNED__@}
4821 @end smallexample
4823 @item %1
4824 Process the @code{cc1} spec.  This is used to construct the options to be
4825 passed to the actual C compiler (@samp{cc1}).
4827 @item %2
4828 Process the @code{cc1plus} spec.  This is used to construct the options to be
4829 passed to the actual C++ compiler (@samp{cc1plus}).
4831 @item %*
4832 Substitute the variable part of a matched option.  See below.
4833 Note that each comma in the substituted string is replaced by
4834 a single space.
4836 @item %@{@code{S}@}
4837 Substitutes the @code{-S} switch, if that switch was given to GCC@.
4838 If that switch was not specified, this substitutes nothing.  Note that
4839 the leading dash is omitted when specifying this option, and it is
4840 automatically inserted if the substitution is performed.  Thus the spec
4841 string @samp{%@{foo@}} would match the command-line option @option{-foo}
4842 and would output the command line option @option{-foo}.
4844 @item %W@{@code{S}@}
4845 Like %@{@code{S}@} but mark last argument supplied within as a file to be
4846 deleted on failure.
4848 @item %@{@code{S}*@}
4849 Substitutes all the switches specified to GCC whose names start
4850 with @code{-S}, but which also take an argument.  This is used for
4851 switches like @option{-o}, @option{-D}, @option{-I}, etc.
4852 GCC considers @option{-o foo} as being
4853 one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
4854 text, including the space.  Thus two arguments would be generated.
4856 @item %@{^@code{S}*@}
4857 Like %@{@code{S}*@}, but don't put a blank between a switch and its
4858 argument.  Thus %@{^o*@} would only generate one argument, not two.
4860 @item %@{@code{S}*&@code{T}*@}
4861 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
4862 (the order of @code{S} and @code{T} in the spec is not significant).
4863 There can be any number of ampersand-separated variables; for each the
4864 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
4866 @item %@{<@code{S}@}
4867 Remove all occurrences of @code{-S} from the command line.  Note---this
4868 command is position dependent.  @samp{%} commands in the spec string
4869 before this option will see @code{-S}, @samp{%} commands in the spec
4870 string after this option will not.
4872 @item %@{@code{S}*:@code{X}@}
4873 Substitutes @code{X} if one or more switches whose names start with
4874 @code{-S} are specified to GCC@.  Note that the tail part of the
4875 @code{-S} option (i.e.@: the part matched by the @samp{*}) will be substituted
4876 for each occurrence of @samp{%*} within @code{X}.
4878 @item %@{@code{S}:@code{X}@}
4879 Substitutes @code{X}, but only if the @samp{-S} switch was given to GCC@.
4881 @item %@{!@code{S}:@code{X}@}
4882 Substitutes @code{X}, but only if the @samp{-S} switch was @emph{not} given to GCC@.
4884 @item %@{|@code{S}:@code{X}@}
4885 Like %@{@code{S}:@code{X}@}, but if no @code{S} switch, substitute @samp{-}.
4887 @item %@{|!@code{S}:@code{X}@}
4888 Like %@{!@code{S}:@code{X}@}, but if there is an @code{S} switch, substitute @samp{-}.
4890 @item %@{.@code{S}:@code{X}@}
4891 Substitutes @code{X}, but only if processing a file with suffix @code{S}.
4893 @item %@{!.@code{S}:@code{X}@}
4894 Substitutes @code{X}, but only if @emph{not} processing a file with suffix @code{S}.
4896 @item %@{@code{S}|@code{P}:@code{X}@}
4897 Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC@.  This may be
4898 combined with @samp{!} and @samp{.} sequences as well, although they
4899 have a stronger binding than the @samp{|}.  For example a spec string
4900 like this:
4902 @smallexample
4903 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
4904 @end smallexample
4906 will output the following command-line options from the following input
4907 command-line options:
4909 @smallexample
4910 fred.c        -foo -baz
4911 jim.d         -bar -boggle
4912 -d fred.c     -foo -baz -boggle
4913 -d jim.d      -bar -baz -boggle
4914 @end smallexample
4916 @end table
4918 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or
4919 %@{!@code{S}:@code{X}@} construct may contain other nested @samp{%} constructs
4920 or spaces, or even newlines.  They are processed as usual, as described
4921 above.
4923 The @option{-O}, @option{-f}, @option{-m}, and @option{-W}
4924 switches are handled specifically in these
4925 constructs.  If another value of @option{-O} or the negated form of a @option{-f}, @option{-m}, or
4926 @option{-W} switch is found later in the command line, the earlier switch
4927 value is ignored, except with @{@code{S}*@} where @code{S} is just one
4928 letter, which passes all matching options.
4930 The character @samp{|} at the beginning of the predicate text is used to indicate
4931 that a command should be piped to the following command, but only if @option{-pipe}
4932 is specified.
4934 It is built into GCC which switches take arguments and which do not.
4935 (You might think it would be useful to generalize this to allow each
4936 compiler's spec to say which switches take arguments.  But this cannot
4937 be done in a consistent fashion.  GCC cannot even decide which input
4938 files have been specified without knowing which switches take arguments,
4939 and it must know which input files to compile in order to tell which
4940 compilers to run).
4942 GCC also knows implicitly that arguments starting in @option{-l} are to be
4943 treated as compiler output files, and passed to the linker in their
4944 proper position among the other output files.
4946 @c man begin OPTIONS
4948 @node Target Options
4949 @section Specifying Target Machine and Compiler Version
4950 @cindex target options
4951 @cindex cross compiling
4952 @cindex specifying machine version
4953 @cindex specifying compiler version and target machine
4954 @cindex compiler version, specifying
4955 @cindex target machine, specifying
4957 By default, GCC compiles code for the same type of machine that you
4958 are using.  However, it can also be installed as a cross-compiler, to
4959 compile for some other type of machine.  In fact, several different
4960 configurations of GCC, for different target machines, can be
4961 installed side by side.  Then you specify which one to use with the
4962 @option{-b} option.
4964 In addition, older and newer versions of GCC can be installed side
4965 by side.  One of them (probably the newest) will be the default, but
4966 you may sometimes wish to use another.
4968 @table @gcctabopt
4969 @item -b @var{machine}
4970 @opindex b
4971 The argument @var{machine} specifies the target machine for compilation.
4972 This is useful when you have installed GCC as a cross-compiler.
4974 The value to use for @var{machine} is the same as was specified as the
4975 machine type when configuring GCC as a cross-compiler.  For
4976 example, if a cross-compiler was configured with @samp{configure
4977 i386v}, meaning to compile for an 80386 running System V, then you
4978 would specify @option{-b i386v} to run that cross compiler.
4980 When you do not specify @option{-b}, it normally means to compile for
4981 the same type of machine that you are using.
4983 @item -V @var{version}
4984 @opindex V
4985 The argument @var{version} specifies which version of GCC to run.
4986 This is useful when multiple versions are installed.  For example,
4987 @var{version} might be @samp{2.0}, meaning to run GCC version 2.0.
4989 The default version, when you do not specify @option{-V}, is the last
4990 version of GCC that you installed.
4991 @end table
4993 The @option{-b} and @option{-V} options actually work by controlling part of
4994 the file name used for the executable files and libraries used for
4995 compilation.  A given version of GCC, for a given target machine, is
4996 normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.
4998 Thus, sites can customize the effect of @option{-b} or @option{-V} either by
4999 changing the names of these directories or adding alternate names (or
5000 symbolic links).  If in directory @file{/usr/local/lib/gcc-lib/} the
5001 file @file{80386} is a link to the file @file{i386v}, then @option{-b
5002 80386} becomes an alias for @option{-b i386v}.
5004 In one respect, the @option{-b} or @option{-V} do not completely change
5005 to a different compiler: the top-level driver program @command{gcc}
5006 that you originally invoked continues to run and invoke the other
5007 executables (preprocessor, compiler per se, assembler and linker)
5008 that do the real work.  However, since no real work is done in the
5009 driver program, it usually does not matter that the driver program
5010 in use is not the one for the specified target.  It is common for the
5011 interface to the other executables to change incompatibly between
5012 compiler versions, so unless the version specified is very close to that
5013 of the driver (for example, @option{-V 3.0} with a driver program from GCC
5014 version 3.0.1), use of @option{-V} may not work; for example, using
5015 @option{-V 2.95.2} will not work with a driver program from GCC 3.0.
5017 The only way that the driver program depends on the target machine is
5018 in the parsing and handling of special machine-specific options.
5019 However, this is controlled by a file which is found, along with the
5020 other executables, in the directory for the specified version and
5021 target machine.  As a result, a single installed driver program adapts
5022 to any specified target machine, and sufficiently similar compiler
5023 versions.
5025 The driver program executable does control one significant thing,
5026 however: the default version and target machine.  Therefore, you can
5027 install different instances of the driver program, compiled for
5028 different targets or versions, under different names.
5030 For example, if the driver for version 2.0 is installed as @command{ogcc}
5031 and that for version 2.1 is installed as @command{gcc}, then the command
5032 @command{gcc} will use version 2.1 by default, while @command{ogcc} will use
5033 2.0 by default.  However, you can choose either version with either
5034 command with the @option{-V} option.
5036 @node Submodel Options
5037 @section Hardware Models and Configurations
5038 @cindex submodel options
5039 @cindex specifying hardware config
5040 @cindex hardware models and configurations, specifying
5041 @cindex machine dependent options
5043 Earlier we discussed the standard option @option{-b} which chooses among
5044 different installed compilers for completely different target
5045 machines, such as VAX vs.@: 68000 vs.@: 80386.
5047 In addition, each of these target machine types can have its own
5048 special options, starting with @samp{-m}, to choose among various
5049 hardware models or configurations---for example, 68010 vs 68020,
5050 floating coprocessor or none.  A single installed version of the
5051 compiler can compile for any model or configuration, according to the
5052 options specified.
5054 Some configurations of the compiler also support additional special
5055 options, usually for compatibility with other compilers on the same
5056 platform.
5058 @ifset INTERNALS
5059 These options are defined by the macro @code{TARGET_SWITCHES} in the
5060 machine description.  The default for the options is also defined by
5061 that macro, which enables you to change the defaults.
5062 @end ifset
5064 @menu
5065 * M680x0 Options::
5066 * M68hc1x Options::
5067 * VAX Options::
5068 * SPARC Options::
5069 * Convex Options::
5070 * AMD29K Options::
5071 * ARM Options::
5072 * MN10200 Options::
5073 * MN10300 Options::
5074 * M32R/D Options::
5075 * M88K Options::
5076 * RS/6000 and PowerPC Options::
5077 * RT Options::
5078 * MIPS Options::
5079 * i386 and x86-64 Options::
5080 * HPPA Options::
5081 * Intel 960 Options::
5082 * DEC Alpha Options::
5083 * DEC Alpha/VMS Options::
5084 * Clipper Options::
5085 * H8/300 Options::
5086 * SH Options::
5087 * System V Options::
5088 * TMS320C3x/C4x Options::
5089 * V850 Options::
5090 * ARC Options::
5091 * NS32K Options::
5092 * AVR Options::
5093 * MCore Options::
5094 * IA-64 Options::
5095 * D30V Options::
5096 * S/390 and zSeries Options::
5097 * CRIS Options::
5098 * MMIX Options::
5099 @end menu
5101 @node M680x0 Options
5102 @subsection M680x0 Options
5103 @cindex M680x0 options
5105 These are the @samp{-m} options defined for the 68000 series.  The default
5106 values for these options depends on which style of 68000 was selected when
5107 the compiler was configured; the defaults for the most common choices are
5108 given below.
5110 @table @gcctabopt
5111 @item -m68000
5112 @itemx -mc68000
5113 @opindex m68000
5114 @opindex mc68000
5115 Generate output for a 68000.  This is the default
5116 when the compiler is configured for 68000-based systems.
5118 Use this option for microcontrollers with a 68000 or EC000 core,
5119 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
5121 @item -m68020
5122 @itemx -mc68020
5123 @opindex m68020
5124 @opindex mc68020
5125 Generate output for a 68020.  This is the default
5126 when the compiler is configured for 68020-based systems.
5128 @item -m68881
5129 @opindex m68881
5130 Generate output containing 68881 instructions for floating point.
5131 This is the default for most 68020 systems unless @option{--nfp} was
5132 specified when the compiler was configured.
5134 @item -m68030
5135 @opindex m68030
5136 Generate output for a 68030.  This is the default when the compiler is
5137 configured for 68030-based systems.
5139 @item -m68040
5140 @opindex m68040
5141 Generate output for a 68040.  This is the default when the compiler is
5142 configured for 68040-based systems.
5144 This option inhibits the use of 68881/68882 instructions that have to be
5145 emulated by software on the 68040.  Use this option if your 68040 does not
5146 have code to emulate those instructions.
5148 @item -m68060
5149 @opindex m68060
5150 Generate output for a 68060.  This is the default when the compiler is
5151 configured for 68060-based systems.
5153 This option inhibits the use of 68020 and 68881/68882 instructions that
5154 have to be emulated by software on the 68060.  Use this option if your 68060
5155 does not have code to emulate those instructions.
5157 @item -mcpu32
5158 @opindex mcpu32
5159 Generate output for a CPU32.  This is the default
5160 when the compiler is configured for CPU32-based systems.
5162 Use this option for microcontrollers with a
5163 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
5164 68336, 68340, 68341, 68349 and 68360.
5166 @item -m5200
5167 @opindex m5200
5168 Generate output for a 520X ``coldfire'' family cpu.  This is the default
5169 when the compiler is configured for 520X-based systems.
5171 Use this option for microcontroller with a 5200 core, including
5172 the MCF5202, MCF5203, MCF5204 and MCF5202.
5175 @item -m68020-40
5176 @opindex m68020-40
5177 Generate output for a 68040, without using any of the new instructions.
5178 This results in code which can run relatively efficiently on either a
5179 68020/68881 or a 68030 or a 68040.  The generated code does use the
5180 68881 instructions that are emulated on the 68040.
5182 @item -m68020-60
5183 @opindex m68020-60
5184 Generate output for a 68060, without using any of the new instructions.
5185 This results in code which can run relatively efficiently on either a
5186 68020/68881 or a 68030 or a 68040.  The generated code does use the
5187 68881 instructions that are emulated on the 68060.
5189 @item -mfpa
5190 @opindex mfpa
5191 Generate output containing Sun FPA instructions for floating point.
5193 @item -msoft-float
5194 @opindex msoft-float
5195 Generate output containing library calls for floating point.
5196 @strong{Warning:} the requisite libraries are not available for all m68k
5197 targets.  Normally the facilities of the machine's usual C compiler are
5198 used, but this can't be done directly in cross-compilation.  You must
5199 make your own arrangements to provide suitable library functions for
5200 cross-compilation.  The embedded targets @samp{m68k-*-aout} and
5201 @samp{m68k-*-coff} do provide software floating point support.
5203 @item -mshort
5204 @opindex mshort
5205 Consider type @code{int} to be 16 bits wide, like @code{short int}.
5207 @item -mnobitfield
5208 @opindex mnobitfield
5209 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
5210 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
5212 @item -mbitfield
5213 @opindex mbitfield
5214 Do use the bit-field instructions.  The @option{-m68020} option implies
5215 @option{-mbitfield}.  This is the default if you use a configuration
5216 designed for a 68020.
5218 @item -mrtd
5219 @opindex mrtd
5220 Use a different function-calling convention, in which functions
5221 that take a fixed number of arguments return with the @code{rtd}
5222 instruction, which pops their arguments while returning.  This
5223 saves one instruction in the caller since there is no need to pop
5224 the arguments there.
5226 This calling convention is incompatible with the one normally
5227 used on Unix, so you cannot use it if you need to call libraries
5228 compiled with the Unix compiler.
5230 Also, you must provide function prototypes for all functions that
5231 take variable numbers of arguments (including @code{printf});
5232 otherwise incorrect code will be generated for calls to those
5233 functions.
5235 In addition, seriously incorrect code will result if you call a
5236 function with too many arguments.  (Normally, extra arguments are
5237 harmlessly ignored.)
5239 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
5240 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
5242 @item -malign-int
5243 @itemx -mno-align-int
5244 @opindex malign-int
5245 @opindex mno-align-int
5246 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
5247 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
5248 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
5249 Aligning variables on 32-bit boundaries produces code that runs somewhat
5250 faster on processors with 32-bit busses at the expense of more memory.
5252 @strong{Warning:} if you use the @option{-malign-int} switch, GCC will
5253 align structures containing the above types  differently than
5254 most published application binary interface specifications for the m68k.
5256 @item -mpcrel
5257 @opindex mpcrel
5258 Use the pc-relative addressing mode of the 68000 directly, instead of
5259 using a global offset table.  At present, this option implies @option{-fpic},
5260 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
5261 not presently supported with @option{-mpcrel}, though this could be supported for
5262 68020 and higher processors.
5264 @item -mno-strict-align
5265 @itemx -mstrict-align
5266 @opindex mno-strict-align
5267 @opindex mstrict-align
5268 Do not (do) assume that unaligned memory references will be handled by
5269 the system.
5271 @end table
5273 @node M68hc1x Options
5274 @subsection M68hc1x Options
5275 @cindex M68hc1x options
5277 These are the @samp{-m} options defined for the 68hc11 and 68hc12
5278 microcontrollers.  The default values for these options depends on
5279 which style of microcontroller was selected when the compiler was configured;
5280 the defaults for the most common choices are given below.
5282 @table @gcctabopt
5283 @item -m6811
5284 @itemx -m68hc11
5285 @opindex m6811
5286 @opindex m68hc11
5287 Generate output for a 68HC11.  This is the default
5288 when the compiler is configured for 68HC11-based systems.
5290 @item -m6812
5291 @itemx -m68hc12
5292 @opindex m6812
5293 @opindex m68hc12
5294 Generate output for a 68HC12.  This is the default
5295 when the compiler is configured for 68HC12-based systems.
5297 @item -mauto-incdec
5298 @opindex mauto-incdec
5299 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
5300 addressing modes.
5302 @item -mshort
5303 @opindex mshort
5304 Consider type @code{int} to be 16 bits wide, like @code{short int}.
5306 @item -msoft-reg-count=@var{count}
5307 @opindex msoft-reg-count
5308 Specify the number of pseudo-soft registers which are used for the
5309 code generation.  The maximum number is 32.  Using more pseudo-soft
5310 register may or may not result in better code depending on the program.
5311 The default is 4 for 68HC11 and 2 for 68HC12.
5313 @end table
5315 @node VAX Options
5316 @subsection VAX Options
5317 @cindex VAX options
5319 These @samp{-m} options are defined for the VAX:
5321 @table @gcctabopt
5322 @item -munix
5323 @opindex munix
5324 Do not output certain jump instructions (@code{aobleq} and so on)
5325 that the Unix assembler for the VAX cannot handle across long
5326 ranges.
5328 @item -mgnu
5329 @opindex mgnu
5330 Do output those jump instructions, on the assumption that you
5331 will assemble with the GNU assembler.
5333 @item -mg
5334 @opindex mg
5335 Output code for g-format floating point numbers instead of d-format.
5336 @end table
5338 @node SPARC Options
5339 @subsection SPARC Options
5340 @cindex SPARC options
5342 These @samp{-m} switches are supported on the SPARC:
5344 @table @gcctabopt
5345 @item -mno-app-regs
5346 @itemx -mapp-regs
5347 @opindex mno-app-regs
5348 @opindex mapp-regs
5349 Specify @option{-mapp-regs} to generate output using the global registers
5350 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
5351 is the default.
5353 To be fully SVR4 ABI compliant at the cost of some performance loss,
5354 specify @option{-mno-app-regs}.  You should compile libraries and system
5355 software with this option.
5357 @item -mfpu
5358 @itemx -mhard-float
5359 @opindex mfpu
5360 @opindex mhard-float
5361 Generate output containing floating point instructions.  This is the
5362 default.
5364 @item -mno-fpu
5365 @itemx -msoft-float
5366 @opindex mno-fpu
5367 @opindex msoft-float
5368 Generate output containing library calls for floating point.
5369 @strong{Warning:} the requisite libraries are not available for all SPARC
5370 targets.  Normally the facilities of the machine's usual C compiler are
5371 used, but this cannot be done directly in cross-compilation.  You must make
5372 your own arrangements to provide suitable library functions for
5373 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
5374 @samp{sparclite-*-*} do provide software floating point support.
5376 @option{-msoft-float} changes the calling convention in the output file;
5377 therefore, it is only useful if you compile @emph{all} of a program with
5378 this option.  In particular, you need to compile @file{libgcc.a}, the
5379 library that comes with GCC, with @option{-msoft-float} in order for
5380 this to work.
5382 @item -mhard-quad-float
5383 @opindex mhard-quad-float
5384 Generate output containing quad-word (long double) floating point
5385 instructions.
5387 @item -msoft-quad-float
5388 @opindex msoft-quad-float
5389 Generate output containing library calls for quad-word (long double)
5390 floating point instructions.  The functions called are those specified
5391 in the SPARC ABI@.  This is the default.
5393 As of this writing, there are no sparc implementations that have hardware
5394 support for the quad-word floating point instructions.  They all invoke
5395 a trap handler for one of these instructions, and then the trap handler
5396 emulates the effect of the instruction.  Because of the trap handler overhead,
5397 this is much slower than calling the ABI library routines.  Thus the
5398 @option{-msoft-quad-float} option is the default.
5400 @item -mno-epilogue
5401 @itemx -mepilogue
5402 @opindex mno-epilogue
5403 @opindex mepilogue
5404 With @option{-mepilogue} (the default), the compiler always emits code for
5405 function exit at the end of each function.  Any function exit in
5406 the middle of the function (such as a return statement in C) will
5407 generate a jump to the exit code at the end of the function.
5409 With @option{-mno-epilogue}, the compiler tries to emit exit code inline
5410 at every function exit.
5412 @item -mno-flat
5413 @itemx -mflat
5414 @opindex mno-flat
5415 @opindex mflat
5416 With @option{-mflat}, the compiler does not generate save/restore instructions
5417 and will use a ``flat'' or single register window calling convention.
5418 This model uses %i7 as the frame pointer and is compatible with the normal
5419 register window model.  Code from either may be intermixed.
5420 The local registers and the input registers (0--5) are still treated as
5421 ``call saved'' registers and will be saved on the stack as necessary.
5423 With @option{-mno-flat} (the default), the compiler emits save/restore
5424 instructions (except for leaf functions) and is the normal mode of operation.
5426 @item -mno-unaligned-doubles
5427 @itemx -munaligned-doubles
5428 @opindex mno-unaligned-doubles
5429 @opindex munaligned-doubles
5430 Assume that doubles have 8 byte alignment.  This is the default.
5432 With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
5433 alignment only if they are contained in another type, or if they have an
5434 absolute address.  Otherwise, it assumes they have 4 byte alignment.
5435 Specifying this option avoids some rare compatibility problems with code
5436 generated by other compilers.  It is not the default because it results
5437 in a performance loss, especially for floating point code.
5439 @item -mno-faster-structs
5440 @itemx -mfaster-structs
5441 @opindex mno-faster-structs
5442 @opindex mfaster-structs
5443 With @option{-mfaster-structs}, the compiler assumes that structures
5444 should have 8 byte alignment.  This enables the use of pairs of
5445 @code{ldd} and @code{std} instructions for copies in structure
5446 assignment, in place of twice as many @code{ld} and @code{st} pairs.
5447 However, the use of this changed alignment directly violates the Sparc
5448 ABI@.  Thus, it's intended only for use on targets where the developer
5449 acknowledges that their resulting code will not be directly in line with
5450 the rules of the ABI@.
5452 @item -mv8
5453 @itemx -msparclite
5454 @opindex mv8
5455 @opindex msparclite
5456 These two options select variations on the SPARC architecture.
5458 By default (unless specifically configured for the Fujitsu SPARClite),
5459 GCC generates code for the v7 variant of the SPARC architecture.
5461 @option{-mv8} will give you SPARC v8 code.  The only difference from v7
5462 code is that the compiler emits the integer multiply and integer
5463 divide instructions which exist in SPARC v8 but not in SPARC v7.
5465 @option{-msparclite} will give you SPARClite code.  This adds the integer
5466 multiply, integer divide step and scan (@code{ffs}) instructions which
5467 exist in SPARClite but not in SPARC v7.
5469 These options are deprecated and will be deleted in a future GCC release.
5470 They have been replaced with @option{-mcpu=xxx}.
5472 @item -mcypress
5473 @itemx -msupersparc
5474 @opindex mcypress
5475 @opindex msupersparc
5476 These two options select the processor for which the code is optimized.
5478 With @option{-mcypress} (the default), the compiler optimizes code for the
5479 Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series.
5480 This is also appropriate for the older SparcStation 1, 2, IPX etc.
5482 With @option{-msupersparc} the compiler optimizes code for the SuperSparc cpu, as
5483 used in the SparcStation 10, 1000 and 2000 series.  This flag also enables use
5484 of the full SPARC v8 instruction set.
5486 These options are deprecated and will be deleted in a future GCC release.
5487 They have been replaced with @option{-mcpu=xxx}.
5489 @item -mcpu=@var{cpu_type}
5490 @opindex mcpu
5491 Set the instruction set, register set, and instruction scheduling parameters
5492 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
5493 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
5494 @samp{hypersparc}, @samp{sparclite86x}, @samp{f930}, @samp{f934},
5495 @samp{sparclet}, @samp{tsc701}, @samp{v9}, and @samp{ultrasparc}.
5497 Default instruction scheduling parameters are used for values that select
5498 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
5499 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
5501 Here is a list of each supported architecture and their supported
5502 implementations.
5504 @smallexample
5505     v7:             cypress
5506     v8:             supersparc, hypersparc
5507     sparclite:      f930, f934, sparclite86x
5508     sparclet:       tsc701
5509     v9:             ultrasparc
5510 @end smallexample
5512 @item -mtune=@var{cpu_type}
5513 @opindex mtune
5514 Set the instruction scheduling parameters for machine type
5515 @var{cpu_type}, but do not set the instruction set or register set that the
5516 option @option{-mcpu=@var{cpu_type}} would.
5518 The same values for @option{-mcpu=@var{cpu_type}} can be used for
5519 @option{-mtune=@var{cpu_type}}, but the only useful values are those
5520 that select a particular cpu implementation.  Those are @samp{cypress},
5521 @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
5522 @samp{sparclite86x}, @samp{tsc701}, and @samp{ultrasparc}.
5524 @end table
5526 These @samp{-m} switches are supported in addition to the above
5527 on the SPARCLET processor.
5529 @table @gcctabopt
5530 @item -mlittle-endian
5531 @opindex mlittle-endian
5532 Generate code for a processor running in little-endian mode.
5534 @item -mlive-g0
5535 @opindex mlive-g0
5536 Treat register @code{%g0} as a normal register.
5537 GCC will continue to clobber it as necessary but will not assume
5538 it always reads as 0.
5540 @item -mbroken-saverestore
5541 @opindex mbroken-saverestore
5542 Generate code that does not use non-trivial forms of the @code{save} and
5543 @code{restore} instructions.  Early versions of the SPARCLET processor do
5544 not correctly handle @code{save} and @code{restore} instructions used with
5545 arguments.  They correctly handle them used without arguments.  A @code{save}
5546 instruction used without arguments increments the current window pointer
5547 but does not allocate a new stack frame.  It is assumed that the window
5548 overflow trap handler will properly handle this case as will interrupt
5549 handlers.
5550 @end table
5552 These @samp{-m} switches are supported in addition to the above
5553 on SPARC V9 processors in 64-bit environments.
5555 @table @gcctabopt
5556 @item -mlittle-endian
5557 @opindex mlittle-endian
5558 Generate code for a processor running in little-endian mode.
5560 @item -m32
5561 @itemx -m64
5562 @opindex m32
5563 @opindex m64
5564 Generate code for a 32-bit or 64-bit environment.
5565 The 32-bit environment sets int, long and pointer to 32 bits.
5566 The 64-bit environment sets int to 32 bits and long and pointer
5567 to 64 bits.
5569 @item -mcmodel=medlow
5570 @opindex mcmodel=medlow
5571 Generate code for the Medium/Low code model: the program must be linked
5572 in the low 32 bits of the address space.  Pointers are 64 bits.
5573 Programs can be statically or dynamically linked.
5575 @item -mcmodel=medmid
5576 @opindex mcmodel=medmid
5577 Generate code for the Medium/Middle code model: the program must be linked
5578 in the low 44 bits of the address space, the text segment must be less than
5579 2G bytes, and data segment must be within 2G of the text segment.
5580 Pointers are 64 bits.
5582 @item -mcmodel=medany
5583 @opindex mcmodel=medany
5584 Generate code for the Medium/Anywhere code model: the program may be linked
5585 anywhere in the address space, the text segment must be less than
5586 2G bytes, and data segment must be within 2G of the text segment.
5587 Pointers are 64 bits.
5589 @item -mcmodel=embmedany
5590 @opindex mcmodel=embmedany
5591 Generate code for the Medium/Anywhere code model for embedded systems:
5592 assume a 32-bit text and a 32-bit data segment, both starting anywhere
5593 (determined at link time).  Register %g4 points to the base of the
5594 data segment.  Pointers are still 64 bits.
5595 Programs are statically linked, PIC is not supported.
5597 @item -mstack-bias
5598 @itemx -mno-stack-bias
5599 @opindex mstack-bias
5600 @opindex mno-stack-bias
5601 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
5602 frame pointer if present, are offset by @minus{}2047 which must be added back
5603 when making stack frame references.
5604 Otherwise, assume no such offset is present.
5605 @end table
5607 @node Convex Options
5608 @subsection Convex Options
5609 @cindex Convex options
5611 These @samp{-m} options are defined for Convex:
5613 @table @gcctabopt
5614 @item -mc1
5615 @opindex mc1
5616 Generate output for C1.  The code will run on any Convex machine.
5617 The preprocessor symbol @code{__convex__c1__} is defined.
5619 @item -mc2
5620 @opindex mc2
5621 Generate output for C2.  Uses instructions not available on C1.
5622 Scheduling and other optimizations are chosen for max performance on C2.
5623 The preprocessor symbol @code{__convex_c2__} is defined.
5625 @item -mc32
5626 @opindex mc32
5627 Generate output for C32xx.  Uses instructions not available on C1.
5628 Scheduling and other optimizations are chosen for max performance on C32.
5629 The preprocessor symbol @code{__convex_c32__} is defined.
5631 @item -mc34
5632 @opindex mc34
5633 Generate output for C34xx.  Uses instructions not available on C1.
5634 Scheduling and other optimizations are chosen for max performance on C34.
5635 The preprocessor symbol @code{__convex_c34__} is defined.
5637 @item -mc38
5638 @opindex mc38
5639 Generate output for C38xx.  Uses instructions not available on C1.
5640 Scheduling and other optimizations are chosen for max performance on C38.
5641 The preprocessor symbol @code{__convex_c38__} is defined.
5643 @item -margcount
5644 @opindex margcount
5645 Generate code which puts an argument count in the word preceding each
5646 argument list.  This is compatible with regular CC, and a few programs
5647 may need the argument count word.  GDB and other source-level debuggers
5648 do not need it; this info is in the symbol table.
5650 @item -mnoargcount
5651 @opindex mnoargcount
5652 Omit the argument count word.  This is the default.
5654 @item -mvolatile-cache
5655 @opindex mvolatile-cache
5656 Allow volatile references to be cached.  This is the default.
5658 @item -mvolatile-nocache
5659 @opindex mvolatile-nocache
5660 Volatile references bypass the data cache, going all the way to memory.
5661 This is only needed for multi-processor code that does not use standard
5662 synchronization instructions.  Making non-volatile references to volatile
5663 locations will not necessarily work.
5665 @item -mlong32
5666 @opindex mlong32
5667 Type long is 32 bits, the same as type int.  This is the default.
5669 @item -mlong64
5670 @opindex mlong64
5671 Type long is 64 bits, the same as type long long.  This option is useless,
5672 because no library support exists for it.
5673 @end table
5675 @node AMD29K Options
5676 @subsection AMD29K Options
5677 @cindex AMD29K options
5679 These @samp{-m} options are defined for the AMD Am29000:
5681 @table @gcctabopt
5682 @item -mdw
5683 @opindex mdw
5684 @cindex DW bit (29k)
5685 Generate code that assumes the @code{DW} bit is set, i.e., that byte and
5686 halfword operations are directly supported by the hardware.  This is the
5687 default.
5689 @item -mndw
5690 @opindex mndw
5691 Generate code that assumes the @code{DW} bit is not set.
5693 @item -mbw
5694 @opindex mbw
5695 @cindex byte writes (29k)
5696 Generate code that assumes the system supports byte and halfword write
5697 operations.  This is the default.
5699 @item -mnbw
5700 @opindex mnbw
5701 Generate code that assumes the systems does not support byte and
5702 halfword write operations.  @option{-mnbw} implies @option{-mndw}.
5704 @item -msmall
5705 @opindex msmall
5706 @cindex memory model (29k)
5707 Use a small memory model that assumes that all function addresses are
5708 either within a single 256 KB segment or at an absolute address of less
5709 than 256k.  This allows the @code{call} instruction to be used instead
5710 of a @code{const}, @code{consth}, @code{calli} sequence.
5712 @item -mnormal
5713 @opindex mnormal
5714 Use the normal memory model: Generate @code{call} instructions only when
5715 calling functions in the same file and @code{calli} instructions
5716 otherwise.  This works if each file occupies less than 256 KB but allows
5717 the entire executable to be larger than 256 KB@.  This is the default.
5719 @item -mlarge
5720 @opindex mlarge
5721 Always use @code{calli} instructions.  Specify this option if you expect
5722 a single file to compile into more than 256 KB of code.
5724 @item -m29050
5725 @opindex m29050
5726 @cindex processor selection (29k)
5727 Generate code for the Am29050.
5729 @item -m29000
5730 @opindex m29000
5731 Generate code for the Am29000.  This is the default.
5733 @item -mkernel-registers
5734 @opindex mkernel-registers
5735 @cindex kernel and user registers (29k)
5736 Generate references to registers @code{gr64-gr95} instead of to
5737 registers @code{gr96-gr127}.  This option can be used when compiling
5738 kernel code that wants a set of global registers disjoint from that used
5739 by user-mode code.
5741 Note that when this option is used, register names in @samp{-f} flags
5742 must use the normal, user-mode, names.
5744 @item -muser-registers
5745 @opindex muser-registers
5746 Use the normal set of global registers, @code{gr96-gr127}.  This is the
5747 default.
5749 @item -mstack-check
5750 @itemx -mno-stack-check
5751 @opindex mstack-check
5752 @opindex mno-stack-check
5753 @cindex stack checks (29k)
5754 Insert (or do not insert) a call to @code{__msp_check} after each stack
5755 adjustment.  This is often used for kernel code.
5757 @item -mstorem-bug
5758 @itemx -mno-storem-bug
5759 @opindex mstorem-bug
5760 @opindex mno-storem-bug
5761 @cindex storem bug (29k)
5762 @option{-mstorem-bug} handles 29k processors which cannot handle the
5763 separation of a mtsrim insn and a storem instruction (most 29000 chips
5764 to date, but not the 29050).
5766 @item -mno-reuse-arg-regs
5767 @itemx -mreuse-arg-regs
5768 @opindex mno-reuse-arg-regs
5769 @opindex mreuse-arg-regs
5770 @option{-mno-reuse-arg-regs} tells the compiler to only use incoming argument
5771 registers for copying out arguments.  This helps detect calling a function
5772 with fewer arguments than it was declared with.
5774 @item -mno-impure-text
5775 @itemx -mimpure-text
5776 @opindex mno-impure-text
5777 @opindex mimpure-text
5778 @option{-mimpure-text}, used in addition to @option{-shared}, tells the compiler to
5779 not pass @option{-assert pure-text} to the linker when linking a shared object.
5781 @item -msoft-float
5782 @opindex msoft-float
5783 Generate output containing library calls for floating point.
5784 @strong{Warning:} the requisite libraries are not part of GCC@.
5785 Normally the facilities of the machine's usual C compiler are used, but
5786 this can't be done directly in cross-compilation.  You must make your
5787 own arrangements to provide suitable library functions for
5788 cross-compilation.
5790 @item -mno-multm
5791 @opindex mno-multm
5792 Do not generate multm or multmu instructions.  This is useful for some embedded
5793 systems which do not have trap handlers for these instructions.
5794 @end table
5796 @node ARM Options
5797 @subsection ARM Options
5798 @cindex ARM options
5800 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
5801 architectures:
5803 @table @gcctabopt
5804 @item -mapcs-frame
5805 @opindex mapcs-frame
5806 Generate a stack frame that is compliant with the ARM Procedure Call
5807 Standard for all functions, even if this is not strictly necessary for
5808 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
5809 with this option will cause the stack frames not to be generated for
5810 leaf functions.  The default is @option{-mno-apcs-frame}.
5812 @item -mapcs
5813 @opindex mapcs
5814 This is a synonym for @option{-mapcs-frame}.
5816 @item -mapcs-26
5817 @opindex mapcs-26
5818 Generate code for a processor running with a 26-bit program counter,
5819 and conforming to the function calling standards for the APCS 26-bit
5820 option.  This option replaces the @option{-m2} and @option{-m3} options
5821 of previous releases of the compiler.
5823 @item -mapcs-32
5824 @opindex mapcs-32
5825 Generate code for a processor running with a 32-bit program counter,
5826 and conforming to the function calling standards for the APCS 32-bit
5827 option.  This option replaces the @option{-m6} option of previous releases
5828 of the compiler.
5830 @ignore
5831 @c not currently implemented
5832 @item -mapcs-stack-check
5833 @opindex mapcs-stack-check
5834 Generate code to check the amount of stack space available upon entry to
5835 every function (that actually uses some stack space).  If there is
5836 insufficient space available then either the function
5837 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
5838 called, depending upon the amount of stack space required.  The run time
5839 system is required to provide these functions.  The default is
5840 @option{-mno-apcs-stack-check}, since this produces smaller code.
5842 @c not currently implemented
5843 @item -mapcs-float
5844 @opindex mapcs-float
5845 Pass floating point arguments using the float point registers.  This is
5846 one of the variants of the APCS@.  This option is recommended if the
5847 target hardware has a floating point unit or if a lot of floating point
5848 arithmetic is going to be performed by the code.  The default is
5849 @option{-mno-apcs-float}, since integer only code is slightly increased in
5850 size if @option{-mapcs-float} is used.
5852 @c not currently implemented
5853 @item -mapcs-reentrant
5854 @opindex mapcs-reentrant
5855 Generate reentrant, position independent code.  The default is
5856 @option{-mno-apcs-reentrant}.
5857 @end ignore
5859 @item -mthumb-interwork
5860 @opindex mthumb-interwork
5861 Generate code which supports calling between the ARM and Thumb
5862 instruction sets.  Without this option the two instruction sets cannot
5863 be reliably used inside one program.  The default is
5864 @option{-mno-thumb-interwork}, since slightly larger code is generated
5865 when @option{-mthumb-interwork} is specified.
5867 @item -mno-sched-prolog
5868 @opindex mno-sched-prolog
5869 Prevent the reordering of instructions in the function prolog, or the
5870 merging of those instruction with the instructions in the function's
5871 body.  This means that all functions will start with a recognizable set
5872 of instructions (or in fact one of a choice from a small set of
5873 different function prologues), and this information can be used to
5874 locate the start if functions inside an executable piece of code.  The
5875 default is @option{-msched-prolog}.
5877 @item -mhard-float
5878 @opindex mhard-float
5879 Generate output containing floating point instructions.  This is the
5880 default.
5882 @item -msoft-float
5883 @opindex msoft-float
5884 Generate output containing library calls for floating point.
5885 @strong{Warning:} the requisite libraries are not available for all ARM
5886 targets.  Normally the facilities of the machine's usual C compiler are
5887 used, but this cannot be done directly in cross-compilation.  You must make
5888 your own arrangements to provide suitable library functions for
5889 cross-compilation.
5891 @option{-msoft-float} changes the calling convention in the output file;
5892 therefore, it is only useful if you compile @emph{all} of a program with
5893 this option.  In particular, you need to compile @file{libgcc.a}, the
5894 library that comes with GCC, with @option{-msoft-float} in order for
5895 this to work.
5897 @item -mlittle-endian
5898 @opindex mlittle-endian
5899 Generate code for a processor running in little-endian mode.  This is
5900 the default for all standard configurations.
5902 @item -mbig-endian
5903 @opindex mbig-endian
5904 Generate code for a processor running in big-endian mode; the default is
5905 to compile code for a little-endian processor.
5907 @item -mwords-little-endian
5908 @opindex mwords-little-endian
5909 This option only applies when generating code for big-endian processors.
5910 Generate code for a little-endian word order but a big-endian byte
5911 order.  That is, a byte order of the form @samp{32107654}.  Note: this
5912 option should only be used if you require compatibility with code for
5913 big-endian ARM processors generated by versions of the compiler prior to
5914 2.8.
5916 @item -malignment-traps
5917 @opindex malignment-traps
5918 Generate code that will not trap if the MMU has alignment traps enabled.
5919 On ARM architectures prior to ARMv4, there were no instructions to
5920 access half-word objects stored in memory.  However, when reading from
5921 memory a feature of the ARM architecture allows a word load to be used,
5922 even if the address is unaligned, and the processor core will rotate the
5923 data as it is being loaded.  This option tells the compiler that such
5924 misaligned accesses will cause a MMU trap and that it should instead
5925 synthesise the access as a series of byte accesses.  The compiler can
5926 still use word accesses to load half-word data if it knows that the
5927 address is aligned to a word boundary.
5929 This option is ignored when compiling for ARM architecture 4 or later,
5930 since these processors have instructions to directly access half-word
5931 objects in memory.
5933 @item -mno-alignment-traps
5934 @opindex mno-alignment-traps
5935 Generate code that assumes that the MMU will not trap unaligned
5936 accesses.  This produces better code when the target instruction set
5937 does not have half-word memory operations (i.e.@: implementations prior to
5938 ARMv4).
5940 Note that you cannot use this option to access unaligned word objects,
5941 since the processor will only fetch one 32-bit aligned object from
5942 memory.
5944 The default setting for most targets is @option{-mno-alignment-traps}, since
5945 this produces better code when there are no half-word memory
5946 instructions available.
5948 @item -mshort-load-bytes
5949 @itemx -mno-short-load-words
5950 @opindex mshort-load-bytes
5951 @opindex mno-short-load-words
5952 These are deprecated aliases for @option{-malignment-traps}.
5954 @item -mno-short-load-bytes
5955 @itemx -mshort-load-words
5956 @opindex mno-short-load-bytes
5957 @opindex mshort-load-words
5958 This are deprecated aliases for @option{-mno-alignment-traps}.
5960 @item -mbsd
5961 @opindex mbsd
5962 This option only applies to RISC iX@.  Emulate the native BSD-mode
5963 compiler.  This is the default if @option{-ansi} is not specified.
5965 @item -mxopen
5966 @opindex mxopen
5967 This option only applies to RISC iX@.  Emulate the native X/Open-mode
5968 compiler.
5970 @item -mno-symrename
5971 @opindex mno-symrename
5972 This option only applies to RISC iX@.  Do not run the assembler
5973 post-processor, @samp{symrename}, after code has been assembled.
5974 Normally it is necessary to modify some of the standard symbols in
5975 preparation for linking with the RISC iX C library; this option
5976 suppresses this pass.  The post-processor is never run when the
5977 compiler is built for cross-compilation.
5979 @item -mcpu=@var{name}
5980 @opindex mcpu
5981 This specifies the name of the target ARM processor.  GCC uses this name
5982 to determine what kind of instructions it can emit when generating
5983 assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
5984 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
5985 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
5986 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
5987 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
5988 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm8},
5989 @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
5990 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
5991 @samp{arm920t}, @samp{arm940t}, @samp{arm9tdmi}, @samp{arm10tdmi},
5992 @samp{arm1020t}, @samp{xscale}.
5994 @itemx -mtune=@var{name}
5995 @opindex mtune
5996 This option is very similar to the @option{-mcpu=} option, except that
5997 instead of specifying the actual target processor type, and hence
5998 restricting which instructions can be used, it specifies that GCC should
5999 tune the performance of the code as if the target were of the type
6000 specified in this option, but still choosing the instructions that it
6001 will generate based on the cpu specified by a @option{-mcpu=} option.
6002 For some ARM implementations better performance can be obtained by using
6003 this option.
6005 @item -march=@var{name}
6006 @opindex march
6007 This specifies the name of the target ARM architecture.  GCC uses this
6008 name to determine what kind of instructions it can emit when generating
6009 assembly code.  This option can be used in conjunction with or instead
6010 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
6011 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
6012 @samp{armv5}, @samp{armv5t}, @samp{armv5te}.
6014 @item -mfpe=@var{number}
6015 @itemx -mfp=@var{number}
6016 @opindex mfpe
6017 @opindex mfp
6018 This specifies the version of the floating point emulation available on
6019 the target.  Permissible values are 2 and 3.  @option{-mfp=} is a synonym
6020 for @option{-mfpe=}, for compatibility with older versions of GCC@.
6022 @item -mstructure-size-boundary=@var{n}
6023 @opindex mstructure-size-boundary
6024 The size of all structures and unions will be rounded up to a multiple
6025 of the number of bits set by this option.  Permissible values are 8 and
6026 32.  The default value varies for different toolchains.  For the COFF
6027 targeted toolchain the default value is 8.  Specifying the larger number
6028 can produce faster, more efficient code, but can also increase the size
6029 of the program.  The two values are potentially incompatible.  Code
6030 compiled with one value cannot necessarily expect to work with code or
6031 libraries compiled with the other value, if they exchange information
6032 using structures or unions.
6034 @item -mabort-on-noreturn
6035 @opindex mabort-on-noreturn
6036 Generate a call to the function @code{abort} at the end of a
6037 @code{noreturn} function.  It will be executed if the function tries to
6038 return.
6040 @item -mlong-calls
6041 @itemx -mno-long-calls
6042 @opindex mlong-calls
6043 @opindex mno-long-calls
6044 Tells the compiler to perform function calls by first loading the
6045 address of the function into a register and then performing a subroutine
6046 call on this register.  This switch is needed if the target function
6047 will lie outside of the 64 megabyte addressing range of the offset based
6048 version of subroutine call instruction.
6050 Even if this switch is enabled, not all function calls will be turned
6051 into long calls.  The heuristic is that static functions, functions
6052 which have the @samp{short-call} attribute, functions that are inside
6053 the scope of a @samp{#pragma no_long_calls} directive and functions whose
6054 definitions have already been compiled within the current compilation
6055 unit, will not be turned into long calls.  The exception to this rule is
6056 that weak function definitions, functions with the @samp{long-call}
6057 attribute or the @samp{section} attribute, and functions that are within
6058 the scope of a @samp{#pragma long_calls} directive, will always be
6059 turned into long calls.
6061 This feature is not enabled by default.  Specifying
6062 @option{-mno-long-calls} will restore the default behavior, as will
6063 placing the function calls within the scope of a @samp{#pragma
6064 long_calls_off} directive.  Note these switches have no effect on how
6065 the compiler generates code to handle function calls via function
6066 pointers.
6068 @item -mnop-fun-dllimport
6069 @opindex mnop-fun-dllimport
6070 Disable support for the @code{dllimport} attribute.
6072 @item -msingle-pic-base
6073 @opindex msingle-pic-base
6074 Treat the register used for PIC addressing as read-only, rather than
6075 loading it in the prologue for each function.  The run-time system is
6076 responsible for initializing this register with an appropriate value
6077 before execution begins.
6079 @item -mpic-register=@var{reg}
6080 @opindex mpic-register
6081 Specify the register to be used for PIC addressing.  The default is R10
6082 unless stack-checking is enabled, when R9 is used.
6084 @item -mpoke-function-name
6085 @opindex mpoke-function-name
6086 Write the name of each function into the text section, directly
6087 preceding the function prologue.  The generated code is similar to this:
6089 @smallexample
6090      t0
6091          .ascii "arm_poke_function_name", 0
6092          .align
6093      t1
6094          .word 0xff000000 + (t1 - t0)
6095      arm_poke_function_name
6096          mov     ip, sp
6097          stmfd   sp!, @{fp, ip, lr, pc@}
6098          sub     fp, ip, #4
6099 @end smallexample
6101 When performing a stack backtrace, code can inspect the value of
6102 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
6103 location @code{pc - 12} and the top 8 bits are set, then we know that
6104 there is a function name embedded immediately preceding this location
6105 and has length @code{((pc[-3]) & 0xff000000)}.
6107 @item -mthumb
6108 @opindex mthumb
6109 Generate code for the 16-bit Thumb instruction set.  The default is to
6110 use the 32-bit ARM instruction set.
6112 @item -mtpcs-frame
6113 @opindex mtpcs-frame
6114 Generate a stack frame that is compliant with the Thumb Procedure Call
6115 Standard for all non-leaf functions.  (A leaf function is one that does
6116 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
6118 @item -mtpcs-leaf-frame
6119 @opindex mtpcs-leaf-frame
6120 Generate a stack frame that is compliant with the Thumb Procedure Call
6121 Standard for all leaf functions.  (A leaf function is one that does
6122 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
6124 @item -mcallee-super-interworking
6125 @opindex mcallee-super-interworking
6126 Gives all externally visible functions in the file being compiled an ARM
6127 instruction set header which switches to Thumb mode before executing the
6128 rest of the function.  This allows these functions to be called from
6129 non-interworking code.
6131 @item -mcaller-super-interworking
6132 @opindex mcaller-super-interworking
6133 Allows calls via function pointers (including virtual functions) to
6134 execute correctly regardless of whether the target code has been
6135 compiled for interworking or not.  There is a small overhead in the cost
6136 of executing a function pointer if this option is enabled.
6138 @end table
6140 @node MN10200 Options
6141 @subsection MN10200 Options
6142 @cindex MN10200 options
6143 These @option{-m} options are defined for Matsushita MN10200 architectures:
6144 @table @gcctabopt
6146 @item -mrelax
6147 @opindex mrelax
6148 Indicate to the linker that it should perform a relaxation optimization pass
6149 to shorten branches, calls and absolute memory addresses.  This option only
6150 has an effect when used on the command line for the final link step.
6152 This option makes symbolic debugging impossible.
6153 @end table
6155 @node MN10300 Options
6156 @subsection MN10300 Options
6157 @cindex MN10300 options
6158 These @option{-m} options are defined for Matsushita MN10300 architectures:
6160 @table @gcctabopt
6161 @item -mmult-bug
6162 @opindex mmult-bug
6163 Generate code to avoid bugs in the multiply instructions for the MN10300
6164 processors.  This is the default.
6166 @item -mno-mult-bug
6167 @opindex mno-mult-bug
6168 Do not generate code to avoid bugs in the multiply instructions for the
6169 MN10300 processors.
6171 @item -mam33
6172 @opindex mam33
6173 Generate code which uses features specific to the AM33 processor.
6175 @item -mno-am33
6176 @opindex mno-am33
6177 Do not generate code which uses features specific to the AM33 processor.  This
6178 is the default.
6180 @item -mno-crt0
6181 @opindex mno-crt0
6182 Do not link in the C run-time initialization object file.
6184 @item -mrelax
6185 @opindex mrelax
6186 Indicate to the linker that it should perform a relaxation optimization pass
6187 to shorten branches, calls and absolute memory addresses.  This option only
6188 has an effect when used on the command line for the final link step.
6190 This option makes symbolic debugging impossible.
6191 @end table
6194 @node M32R/D Options
6195 @subsection M32R/D Options
6196 @cindex M32R/D options
6198 These @option{-m} options are defined for Mitsubishi M32R/D architectures:
6200 @table @gcctabopt
6201 @item -m32rx
6202 @opindex m32rx
6203 Generate code for the M32R/X@.
6205 @item -m32r
6206 @opindex m32r
6207 Generate code for the M32R@.  This is the default.
6209 @item -mcode-model=small
6210 @opindex mcode-model=small
6211 Assume all objects live in the lower 16MB of memory (so that their addresses
6212 can be loaded with the @code{ld24} instruction), and assume all subroutines
6213 are reachable with the @code{bl} instruction.
6214 This is the default.
6216 The addressability of a particular object can be set with the
6217 @code{model} attribute.
6219 @item -mcode-model=medium
6220 @opindex mcode-model=medium
6221 Assume objects may be anywhere in the 32-bit address space (the compiler
6222 will generate @code{seth/add3} instructions to load their addresses), and
6223 assume all subroutines are reachable with the @code{bl} instruction.
6225 @item -mcode-model=large
6226 @opindex mcode-model=large
6227 Assume objects may be anywhere in the 32-bit address space (the compiler
6228 will generate @code{seth/add3} instructions to load their addresses), and
6229 assume subroutines may not be reachable with the @code{bl} instruction
6230 (the compiler will generate the much slower @code{seth/add3/jl}
6231 instruction sequence).
6233 @item -msdata=none
6234 @opindex msdata=none
6235 Disable use of the small data area.  Variables will be put into
6236 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
6237 @code{section} attribute has been specified).
6238 This is the default.
6240 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
6241 Objects may be explicitly put in the small data area with the
6242 @code{section} attribute using one of these sections.
6244 @item -msdata=sdata
6245 @opindex msdata=sdata
6246 Put small global and static data in the small data area, but do not
6247 generate special code to reference them.
6249 @item -msdata=use
6250 @opindex msdata=use
6251 Put small global and static data in the small data area, and generate
6252 special instructions to reference them.
6254 @item -G @var{num}
6255 @opindex G
6256 @cindex smaller data references
6257 Put global and static objects less than or equal to @var{num} bytes
6258 into the small data or bss sections instead of the normal data or bss
6259 sections.  The default value of @var{num} is 8.
6260 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
6261 for this option to have any effect.
6263 All modules should be compiled with the same @option{-G @var{num}} value.
6264 Compiling with different values of @var{num} may or may not work; if it
6265 doesn't the linker will give an error message---incorrect code will not be
6266 generated.
6268 @end table
6270 @node M88K Options
6271 @subsection M88K Options
6272 @cindex M88k options
6274 These @samp{-m} options are defined for Motorola 88k architectures:
6276 @table @gcctabopt
6277 @item -m88000
6278 @opindex m88000
6279 Generate code that works well on both the m88100 and the
6280 m88110.
6282 @item -m88100
6283 @opindex m88100
6284 Generate code that works best for the m88100, but that also
6285 runs on the m88110.
6287 @item -m88110
6288 @opindex m88110
6289 Generate code that works best for the m88110, and may not run
6290 on the m88100.
6292 @item -mbig-pic
6293 @opindex mbig-pic
6294 Obsolete option to be removed from the next revision.
6295 Use @option{-fPIC}.
6297 @item -midentify-revision
6298 @opindex midentify-revision
6299 @cindex identifying source, compiler (88k)
6300 Include an @code{ident} directive in the assembler output recording the
6301 source file name, compiler name and version, timestamp, and compilation
6302 flags used.
6304 @item -mno-underscores
6305 @opindex mno-underscores
6306 @cindex underscores, avoiding (88k)
6307 In assembler output, emit symbol names without adding an underscore
6308 character at the beginning of each name.  The default is to use an
6309 underscore as prefix on each name.
6311 @item -mocs-debug-info
6312 @itemx -mno-ocs-debug-info
6313 @opindex mocs-debug-info
6314 @opindex mno-ocs-debug-info
6315 @cindex OCS (88k)
6316 @cindex debugging, 88k OCS
6317 Include (or omit) additional debugging information (about registers used
6318 in each stack frame) as specified in the 88open Object Compatibility
6319 Standard, ``OCS''@.  This extra information allows debugging of code that
6320 has had the frame pointer eliminated.  The default for DG/UX, SVr4, and
6321 Delta 88 SVr3.2 is to include this information; other 88k configurations
6322 omit this information by default.
6324 @item -mocs-frame-position
6325 @opindex mocs-frame-position
6326 @cindex register positions in frame (88k)
6327 When emitting COFF debugging information for automatic variables and
6328 parameters stored on the stack, use the offset from the canonical frame
6329 address, which is the stack pointer (register 31) on entry to the
6330 function.  The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
6331 @option{-mocs-frame-position}; other 88k configurations have the default
6332 @option{-mno-ocs-frame-position}.
6334 @item -mno-ocs-frame-position
6335 @opindex mno-ocs-frame-position
6336 @cindex register positions in frame (88k)
6337 When emitting COFF debugging information for automatic variables and
6338 parameters stored on the stack, use the offset from the frame pointer
6339 register (register 30).  When this option is in effect, the frame
6340 pointer is not eliminated when debugging information is selected by the
6341 -g switch.
6343 @item -moptimize-arg-area
6344 @opindex moptimize-arg-area
6345 @cindex arguments in frame (88k)
6346 Save space by reorganizing the stack frame.  This option generates code
6347 that does not agree with the 88open specifications, but uses less
6348 memory.
6350 @itemx -mno-optimize-arg-area
6351 @opindex mno-optimize-arg-area
6352 Do not reorganize the stack frame to save space.  This is the default.
6353 The generated conforms to the specification, but uses more memory.
6355 @item -mshort-data-@var{num}
6356 @opindex mshort-data
6357 @cindex smaller data references (88k)
6358 @cindex r0-relative references (88k)
6359 Generate smaller data references by making them relative to @code{r0},
6360 which allows loading a value using a single instruction (rather than the
6361 usual two).  You control which data references are affected by
6362 specifying @var{num} with this option.  For example, if you specify
6363 @option{-mshort-data-512}, then the data references affected are those
6364 involving displacements of less than 512 bytes.
6365 @option{-mshort-data-@var{num}} is not effective for @var{num} greater
6366 than 64k.
6368 @item -mserialize-volatile
6369 @opindex mserialize-volatile
6370 @itemx -mno-serialize-volatile
6371 @opindex mno-serialize-volatile
6372 @cindex sequential consistency on 88k
6373 Do, or don't, generate code to guarantee sequential consistency
6374 of volatile memory references.  By default, consistency is
6375 guaranteed.
6377 The order of memory references made by the MC88110 processor does
6378 not always match the order of the instructions requesting those
6379 references.  In particular, a load instruction may execute before
6380 a preceding store instruction.  Such reordering violates
6381 sequential consistency of volatile memory references, when there
6382 are multiple processors.   When consistency must be guaranteed,
6383 GCC generates special instructions, as needed, to force
6384 execution in the proper order.
6386 The MC88100 processor does not reorder memory references and so
6387 always provides sequential consistency.  However, by default, GCC
6388 generates the special instructions to guarantee consistency
6389 even when you use @option{-m88100}, so that the code may be run on an
6390 MC88110 processor.  If you intend to run your code only on the
6391 MC88100 processor, you may use @option{-mno-serialize-volatile}.
6393 The extra code generated to guarantee consistency may affect the
6394 performance of your application.  If you know that you can safely
6395 forgo this guarantee, you may use @option{-mno-serialize-volatile}.
6397 @item -msvr4
6398 @itemx -msvr3
6399 @opindex msvr4
6400 @opindex msvr3
6401 @cindex assembler syntax, 88k
6402 @cindex SVr4
6403 Turn on (@option{-msvr4}) or off (@option{-msvr3}) compiler extensions
6404 related to System V release 4 (SVr4).  This controls the following:
6406 @enumerate
6407 @item
6408 Which variant of the assembler syntax to emit.
6409 @item
6410 @option{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
6411 that is used on System V release 4.
6412 @item
6413 @option{-msvr4} makes GCC issue additional declaration directives used in
6414 SVr4.
6415 @end enumerate
6417 @option{-msvr4} is the default for the m88k-motorola-sysv4 and
6418 m88k-dg-dgux m88k configurations.  @option{-msvr3} is the default for all
6419 other m88k configurations.
6421 @item -mversion-03.00
6422 @opindex mversion-03.00
6423 This option is obsolete, and is ignored.
6424 @c ??? which asm syntax better for GAS?  option there too?
6426 @item -mno-check-zero-division
6427 @itemx -mcheck-zero-division
6428 @opindex mno-check-zero-division
6429 @opindex mcheck-zero-division
6430 @cindex zero division on 88k
6431 Do, or don't, generate code to guarantee that integer division by
6432 zero will be detected.  By default, detection is guaranteed.
6434 Some models of the MC88100 processor fail to trap upon integer
6435 division by zero under certain conditions.  By default, when
6436 compiling code that might be run on such a processor, GCC
6437 generates code that explicitly checks for zero-valued divisors
6438 and traps with exception number 503 when one is detected.  Use of
6439 @option{-mno-check-zero-division} suppresses such checking for code
6440 generated to run on an MC88100 processor.
6442 GCC assumes that the MC88110 processor correctly detects all instances
6443 of integer division by zero.  When @option{-m88110} is specified, no
6444 explicit checks for zero-valued divisors are generated, and both
6445 @option{-mcheck-zero-division} and @option{-mno-check-zero-division} are
6446 ignored.
6448 @item -muse-div-instruction
6449 @opindex muse-div-instruction
6450 @cindex divide instruction, 88k
6451 Use the div instruction for signed integer division on the
6452 MC88100 processor.  By default, the div instruction is not used.
6454 On the MC88100 processor the signed integer division instruction
6455 div) traps to the operating system on a negative operand.  The
6456 operating system transparently completes the operation, but at a
6457 large cost in execution time.  By default, when compiling code
6458 that might be run on an MC88100 processor, GCC emulates signed
6459 integer division using the unsigned integer division instruction
6460 divu), thereby avoiding the large penalty of a trap to the
6461 operating system.  Such emulation has its own, smaller, execution
6462 cost in both time and space.  To the extent that your code's
6463 important signed integer division operations are performed on two
6464 nonnegative operands, it may be desirable to use the div
6465 instruction directly.
6467 On the MC88110 processor the div instruction (also known as the
6468 divs instruction) processes negative operands without trapping to
6469 the operating system.  When @option{-m88110} is specified,
6470 @option{-muse-div-instruction} is ignored, and the div instruction is used
6471 for signed integer division.
6473 Note that the result of dividing @code{INT_MIN} by @minus{}1 is undefined.  In
6474 particular, the behavior of such a division with and without
6475 @option{-muse-div-instruction} may differ.
6477 @item -mtrap-large-shift
6478 @itemx -mhandle-large-shift
6479 @opindex mtrap-large-shift
6480 @opindex mhandle-large-shift
6481 @cindex bit shift overflow (88k)
6482 @cindex large bit shifts (88k)
6483 Include code to detect bit-shifts of more than 31 bits; respectively,
6484 trap such shifts or emit code to handle them properly.  By default GCC
6485 makes no special provision for large bit shifts.
6487 @item -mwarn-passed-structs
6488 @opindex mwarn-passed-structs
6489 @cindex structure passing (88k)
6490 Warn when a function passes a struct as an argument or result.
6491 Structure-passing conventions have changed during the evolution of the C
6492 language, and are often the source of portability problems.  By default,
6493 GCC issues no such warning.
6494 @end table
6496 @c break page here to avoid unsightly interparagraph stretch.
6497 @c -zw, 2001-8-17
6498 @page
6500 @node RS/6000 and PowerPC Options
6501 @subsection IBM RS/6000 and PowerPC Options
6502 @cindex RS/6000 and PowerPC Options
6503 @cindex IBM RS/6000 and PowerPC Options
6505 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
6506 @table @gcctabopt
6507 @item -mpower
6508 @itemx -mno-power
6509 @itemx -mpower2
6510 @itemx -mno-power2
6511 @itemx -mpowerpc
6512 @itemx -mno-powerpc
6513 @itemx -mpowerpc-gpopt
6514 @itemx -mno-powerpc-gpopt
6515 @itemx -mpowerpc-gfxopt
6516 @itemx -mno-powerpc-gfxopt
6517 @itemx -mpowerpc64
6518 @itemx -mno-powerpc64
6519 @opindex mpower
6520 @opindex mno-power
6521 @opindex mpower2
6522 @opindex mno-power2
6523 @opindex mpowerpc
6524 @opindex mno-powerpc
6525 @opindex mpowerpc-gpopt
6526 @opindex mno-powerpc-gpopt
6527 @opindex mpowerpc-gfxopt
6528 @opindex mno-powerpc-gfxopt
6529 @opindex mpowerpc64
6530 @opindex mno-powerpc64
6531 GCC supports two related instruction set architectures for the
6532 RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
6533 instructions supported by the @samp{rios} chip set used in the original
6534 RS/6000 systems and the @dfn{PowerPC} instruction set is the
6535 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
6536 the IBM 4xx microprocessors.
6538 Neither architecture is a subset of the other.  However there is a
6539 large common subset of instructions supported by both.  An MQ
6540 register is included in processors supporting the POWER architecture.
6542 You use these options to specify which instructions are available on the
6543 processor you are using.  The default value of these options is
6544 determined when configuring GCC@.  Specifying the
6545 @option{-mcpu=@var{cpu_type}} overrides the specification of these
6546 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
6547 rather than the options listed above.
6549 The @option{-mpower} option allows GCC to generate instructions that
6550 are found only in the POWER architecture and to use the MQ register.
6551 Specifying @option{-mpower2} implies @option{-power} and also allows GCC
6552 to generate instructions that are present in the POWER2 architecture but
6553 not the original POWER architecture.
6555 The @option{-mpowerpc} option allows GCC to generate instructions that
6556 are found only in the 32-bit subset of the PowerPC architecture.
6557 Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
6558 GCC to use the optional PowerPC architecture instructions in the
6559 General Purpose group, including floating-point square root.  Specifying
6560 @option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
6561 use the optional PowerPC architecture instructions in the Graphics
6562 group, including floating-point select.
6564 The @option{-mpowerpc64} option allows GCC to generate the additional
6565 64-bit instructions that are found in the full PowerPC64 architecture
6566 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
6567 @option{-mno-powerpc64}.
6569 If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
6570 will use only the instructions in the common subset of both
6571 architectures plus some special AIX common-mode calls, and will not use
6572 the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
6573 permits GCC to use any instruction from either architecture and to
6574 allow use of the MQ register; specify this for the Motorola MPC601.
6576 @item -mnew-mnemonics
6577 @itemx -mold-mnemonics
6578 @opindex mnew-mnemonics
6579 @opindex mold-mnemonics
6580 Select which mnemonics to use in the generated assembler code.  With
6581 @option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
6582 the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
6583 assembler mnemonics defined for the POWER architecture.  Instructions
6584 defined in only one architecture have only one mnemonic; GCC uses that
6585 mnemonic irrespective of which of these options is specified.
6587 GCC defaults to the mnemonics appropriate for the architecture in
6588 use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
6589 value of these option.  Unless you are building a cross-compiler, you
6590 should normally not specify either @option{-mnew-mnemonics} or
6591 @option{-mold-mnemonics}, but should instead accept the default.
6593 @item -mcpu=@var{cpu_type}
6594 @opindex mcpu
6595 Set architecture type, register usage, choice of mnemonics, and
6596 instruction scheduling parameters for machine type @var{cpu_type}.
6597 Supported values for @var{cpu_type} are @samp{rios}, @samp{rios1},
6598 @samp{rsc}, @samp{rios2}, @samp{rs64a}, @samp{601}, @samp{602},
6599 @samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620},
6600 @samp{630}, @samp{740}, @samp{7400}, @samp{7450}, @samp{750},
6601 @samp{power}, @samp{power2}, @samp{powerpc}, @samp{403}, @samp{505},
6602 @samp{801}, @samp{821}, @samp{823}, and @samp{860} and @samp{common}.
6604 @option{-mcpu=common} selects a completely generic processor.  Code
6605 generated under this option will run on any POWER or PowerPC processor.
6606 GCC will use only the instructions in the common subset of both
6607 architectures, and will not use the MQ register.  GCC assumes a generic
6608 processor model for scheduling purposes.
6610 @option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
6611 @option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
6612 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
6613 types, with an appropriate, generic processor model assumed for
6614 scheduling purposes.
6616 The other options specify a specific processor.  Code generated under
6617 those options will run best on that processor, and may not run at all on
6618 others.
6620 The @option{-mcpu} options automatically enable or disable other
6621 @option{-m} options as follows:
6623 @table @samp
6624 @item common
6625 @option{-mno-power}, @option{-mno-powerc}
6627 @item power
6628 @itemx power2
6629 @itemx rios1
6630 @itemx rios2
6631 @itemx rsc
6632 @option{-mpower}, @option{-mno-powerpc}, @option{-mno-new-mnemonics}
6634 @item powerpc
6635 @itemx rs64a
6636 @itemx 602
6637 @itemx 603
6638 @itemx 603e
6639 @itemx 604
6640 @itemx 620
6641 @itemx 630
6642 @itemx 740
6643 @itemx 7400
6644 @itemx 7450
6645 @itemx 750
6646 @itemx 505
6647 @option{-mno-power}, @option{-mpowerpc}, @option{-mnew-mnemonics}
6649 @item 601
6650 @option{-mpower}, @option{-mpowerpc}, @option{-mnew-mnemonics}
6652 @item 403
6653 @itemx 821
6654 @itemx 860
6655 @option{-mno-power}, @option{-mpowerpc}, @option{-mnew-mnemonics}, @option{-msoft-float}
6656 @end table
6658 @item -mtune=@var{cpu_type}
6659 @opindex mtune
6660 Set the instruction scheduling parameters for machine type
6661 @var{cpu_type}, but do not set the architecture type, register usage, or
6662 choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
6663 values for @var{cpu_type} are used for @option{-mtune} as for
6664 @option{-mcpu}.  If both are specified, the code generated will use the
6665 architecture, registers, and mnemonics set by @option{-mcpu}, but the
6666 scheduling parameters set by @option{-mtune}.
6668 @item -maltivec
6669 @itemx -mno-altivec
6670 @opindex maltivec
6671 @opindex mno-altivec
6672 These switches enable or disable the use of built-in functions that
6673 allow access to the AltiVec instruction set.  You may also need to set
6674 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
6675 enhancements.
6677 @item -mfull-toc
6678 @itemx -mno-fp-in-toc
6679 @itemx -mno-sum-in-toc
6680 @itemx -mminimal-toc
6681 @opindex mfull-toc
6682 @opindex mno-fp-in-toc
6683 @opindex mno-sum-in-toc
6684 @opindex mminimal-toc
6685 Modify generation of the TOC (Table Of Contents), which is created for
6686 every executable file.  The @option{-mfull-toc} option is selected by
6687 default.  In that case, GCC will allocate at least one TOC entry for
6688 each unique non-automatic variable reference in your program.  GCC
6689 will also place floating-point constants in the TOC@.  However, only
6690 16,384 entries are available in the TOC@.
6692 If you receive a linker error message that saying you have overflowed
6693 the available TOC space, you can reduce the amount of TOC space used
6694 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
6695 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
6696 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
6697 generate code to calculate the sum of an address and a constant at
6698 run-time instead of putting that sum into the TOC@.  You may specify one
6699 or both of these options.  Each causes GCC to produce very slightly
6700 slower and larger code at the expense of conserving TOC space.
6702 If you still run out of space in the TOC even when you specify both of
6703 these options, specify @option{-mminimal-toc} instead.  This option causes
6704 GCC to make only one TOC entry for every file.  When you specify this
6705 option, GCC will produce code that is slower and larger but which
6706 uses extremely little TOC space.  You may wish to use this option
6707 only on files that contain less frequently executed code.
6709 @item -maix64
6710 @itemx -maix32
6711 @opindex maix64
6712 @opindex maix32
6713 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
6714 @code{long} type, and the infrastructure needed to support them.
6715 Specifying @option{-maix64} implies @option{-mpowerpc64} and
6716 @option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
6717 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
6719 @item -mxl-call
6720 @itemx -mno-xl-call
6721 @opindex mxl-call
6722 @opindex mno-xl-call
6723 On AIX, pass floating-point arguments to prototyped functions beyond the
6724 register save area (RSA) on the stack in addition to argument FPRs.  The
6725 AIX calling convention was extended but not initially documented to
6726 handle an obscure K&R C case of calling a function that takes the
6727 address of its arguments with fewer arguments than declared.  AIX XL
6728 compilers access floating point arguments which do not fit in the
6729 RSA from the stack when a subroutine is compiled without
6730 optimization.  Because always storing floating-point arguments on the
6731 stack is inefficient and rarely needed, this option is not enabled by
6732 default and only is necessary when calling subroutines compiled by AIX
6733 XL compilers without optimization.
6735 @item -mthreads
6736 @opindex mthreads
6737 Support @dfn{AIX Threads}.  Link an application written to use
6738 @dfn{pthreads} with special libraries and startup code to enable the
6739 application to run.
6741 @item -mpe
6742 @opindex mpe
6743 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
6744 application written to use message passing with special startup code to
6745 enable the application to run.  The system must have PE installed in the
6746 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
6747 must be overridden with the @option{-specs=} option to specify the
6748 appropriate directory location.  The Parallel Environment does not
6749 support threads, so the @option{-mpe} option and the @option{-mthreads}
6750 option are incompatible.
6752 @item -msoft-float
6753 @itemx -mhard-float
6754 @opindex msoft-float
6755 @opindex mhard-float
6756 Generate code that does not use (uses) the floating-point register set.
6757 Software floating point emulation is provided if you use the
6758 @option{-msoft-float} option, and pass the option to GCC when linking.
6760 @item -mmultiple
6761 @itemx -mno-multiple
6762 @opindex mmultiple
6763 @opindex mno-multiple
6764 Generate code that uses (does not use) the load multiple word
6765 instructions and the store multiple word instructions.  These
6766 instructions are generated by default on POWER systems, and not
6767 generated on PowerPC systems.  Do not use @option{-mmultiple} on little
6768 endian PowerPC systems, since those instructions do not work when the
6769 processor is in little endian mode.  The exceptions are PPC740 and
6770 PPC750 which permit the instructions usage in little endian mode.
6772 @item -mstring
6773 @itemx -mno-string
6774 @opindex mstring
6775 @opindex mno-string
6776 Generate code that uses (does not use) the load string instructions
6777 and the store string word instructions to save multiple registers and
6778 do small block moves.  These instructions are generated by default on
6779 POWER systems, and not generated on PowerPC systems.  Do not use
6780 @option{-mstring} on little endian PowerPC systems, since those
6781 instructions do not work when the processor is in little endian mode.
6782 The exceptions are PPC740 and PPC750 which permit the instructions
6783 usage in little endian mode.
6785 @item -mupdate
6786 @itemx -mno-update
6787 @opindex mupdate
6788 @opindex mno-update
6789 Generate code that uses (does not use) the load or store instructions
6790 that update the base register to the address of the calculated memory
6791 location.  These instructions are generated by default.  If you use
6792 @option{-mno-update}, there is a small window between the time that the
6793 stack pointer is updated and the address of the previous frame is
6794 stored, which means code that walks the stack frame across interrupts or
6795 signals may get corrupted data.
6797 @item -mfused-madd
6798 @itemx -mno-fused-madd
6799 @opindex mfused-madd
6800 @opindex mno-fused-madd
6801 Generate code that uses (does not use) the floating point multiply and
6802 accumulate instructions.  These instructions are generated by default if
6803 hardware floating is used.
6805 @item -mno-bit-align
6806 @itemx -mbit-align
6807 @opindex mno-bit-align
6808 @opindex mbit-align
6809 On System V.4 and embedded PowerPC systems do not (do) force structures
6810 and unions that contain bit-fields to be aligned to the base type of the
6811 bit-field.
6813 For example, by default a structure containing nothing but 8
6814 @code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
6815 boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
6816 the structure would be aligned to a 1 byte boundary and be one byte in
6817 size.
6819 @item -mno-strict-align
6820 @itemx -mstrict-align
6821 @opindex mno-strict-align
6822 @opindex mstrict-align
6823 On System V.4 and embedded PowerPC systems do not (do) assume that
6824 unaligned memory references will be handled by the system.
6826 @item -mrelocatable
6827 @itemx -mno-relocatable
6828 @opindex mrelocatable
6829 @opindex mno-relocatable
6830 On embedded PowerPC systems generate code that allows (does not allow)
6831 the program to be relocated to a different address at runtime.  If you
6832 use @option{-mrelocatable} on any module, all objects linked together must
6833 be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
6835 @item -mrelocatable-lib
6836 @itemx -mno-relocatable-lib
6837 @opindex mrelocatable-lib
6838 @opindex mno-relocatable-lib
6839 On embedded PowerPC systems generate code that allows (does not allow)
6840 the program to be relocated to a different address at runtime.  Modules
6841 compiled with @option{-mrelocatable-lib} can be linked with either modules
6842 compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
6843 with modules compiled with the @option{-mrelocatable} options.
6845 @item -mno-toc
6846 @itemx -mtoc
6847 @opindex mno-toc
6848 @opindex mtoc
6849 On System V.4 and embedded PowerPC systems do not (do) assume that
6850 register 2 contains a pointer to a global area pointing to the addresses
6851 used in the program.
6853 @item -mlittle
6854 @itemx -mlittle-endian
6855 @opindex mlittle
6856 @opindex mlittle-endian
6857 On System V.4 and embedded PowerPC systems compile code for the
6858 processor in little endian mode.  The @option{-mlittle-endian} option is
6859 the same as @option{-mlittle}.
6861 @item -mbig
6862 @itemx -mbig-endian
6863 @opindex mbig
6864 @opindex mbig-endian
6865 On System V.4 and embedded PowerPC systems compile code for the
6866 processor in big endian mode.  The @option{-mbig-endian} option is
6867 the same as @option{-mbig}.
6869 @item -mcall-sysv
6870 @opindex mcall-sysv
6871 On System V.4 and embedded PowerPC systems compile code using calling
6872 conventions that adheres to the March 1995 draft of the System V
6873 Application Binary Interface, PowerPC processor supplement.  This is the
6874 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
6876 @item -mcall-sysv-eabi
6877 @opindex mcall-sysv-eabi
6878 Specify both @option{-mcall-sysv} and @option{-meabi} options.
6880 @item -mcall-sysv-noeabi
6881 @opindex mcall-sysv-noeabi
6882 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
6884 @item -mcall-aix
6885 @opindex mcall-aix
6886 On System V.4 and embedded PowerPC systems compile code using calling
6887 conventions that are similar to those used on AIX@.  This is the
6888 default if you configured GCC using @samp{powerpc-*-eabiaix}.
6890 @item -mcall-solaris
6891 @opindex mcall-solaris
6892 On System V.4 and embedded PowerPC systems compile code for the Solaris
6893 operating system.
6895 @item -mcall-linux
6896 @opindex mcall-linux
6897 On System V.4 and embedded PowerPC systems compile code for the
6898 Linux-based GNU system.
6900 @item -mcall-netbsd
6901 @opindex mcall-netbsd
6902 On System V.4 and embedded PowerPC systems compile code for the
6903 NetBSD operating system.
6905 @item -maix-struct-return
6906 @opindex maix-struct-return
6907 Return all structures in memory (as specified by the AIX ABI)@.
6909 @item -msvr4-struct-return
6910 @opindex msvr4-struct-return
6911 Return structures smaller than 8 bytes in registers (as specified by the
6912 SVR4 ABI)@.
6914 @item -mabi=altivec
6915 @opindex mabi=altivec
6916 Extend the current ABI with AltiVec ABI extensions.  This does not
6917 change the default ABI, instead it adds the AltiVec ABI extensions to
6918 the current ABI@.
6920 @item -mprototype
6921 @itemx -mno-prototype
6922 @opindex mprototype
6923 @opindex mno-prototype
6924 On System V.4 and embedded PowerPC systems assume that all calls to
6925 variable argument functions are properly prototyped.  Otherwise, the
6926 compiler must insert an instruction before every non prototyped call to
6927 set or clear bit 6 of the condition code register (@var{CR}) to
6928 indicate whether floating point values were passed in the floating point
6929 registers in case the function takes a variable arguments.  With
6930 @option{-mprototype}, only calls to prototyped variable argument functions
6931 will set or clear the bit.
6933 @item -msim
6934 @opindex msim
6935 On embedded PowerPC systems, assume that the startup module is called
6936 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
6937 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
6938 configurations.
6940 @item -mmvme
6941 @opindex mmvme
6942 On embedded PowerPC systems, assume that the startup module is called
6943 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
6944 @file{libc.a}.
6946 @item -mads
6947 @opindex mads
6948 On embedded PowerPC systems, assume that the startup module is called
6949 @file{crt0.o} and the standard C libraries are @file{libads.a} and
6950 @file{libc.a}.
6952 @item -myellowknife
6953 @opindex myellowknife
6954 On embedded PowerPC systems, assume that the startup module is called
6955 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
6956 @file{libc.a}.
6958 @item -mvxworks
6959 @opindex mvxworks
6960 On System V.4 and embedded PowerPC systems, specify that you are
6961 compiling for a VxWorks system.
6963 @item -memb
6964 @opindex memb
6965 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
6966 header to indicate that @samp{eabi} extended relocations are used.
6968 @item -meabi
6969 @itemx -mno-eabi
6970 @opindex meabi
6971 @opindex mno-eabi
6972 On System V.4 and embedded PowerPC systems do (do not) adhere to the
6973 Embedded Applications Binary Interface (eabi) which is a set of
6974 modifications to the System V.4 specifications.  Selecting @option{-meabi}
6975 means that the stack is aligned to an 8 byte boundary, a function
6976 @code{__eabi} is called to from @code{main} to set up the eabi
6977 environment, and the @option{-msdata} option can use both @code{r2} and
6978 @code{r13} to point to two separate small data areas.  Selecting
6979 @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
6980 do not call an initialization function from @code{main}, and the
6981 @option{-msdata} option will only use @code{r13} to point to a single
6982 small data area.  The @option{-meabi} option is on by default if you
6983 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
6985 @item -msdata=eabi
6986 @opindex msdata=eabi
6987 On System V.4 and embedded PowerPC systems, put small initialized
6988 @code{const} global and static data in the @samp{.sdata2} section, which
6989 is pointed to by register @code{r2}.  Put small initialized
6990 non-@code{const} global and static data in the @samp{.sdata} section,
6991 which is pointed to by register @code{r13}.  Put small uninitialized
6992 global and static data in the @samp{.sbss} section, which is adjacent to
6993 the @samp{.sdata} section.  The @option{-msdata=eabi} option is
6994 incompatible with the @option{-mrelocatable} option.  The
6995 @option{-msdata=eabi} option also sets the @option{-memb} option.
6997 @item -msdata=sysv
6998 @opindex msdata=sysv
6999 On System V.4 and embedded PowerPC systems, put small global and static
7000 data in the @samp{.sdata} section, which is pointed to by register
7001 @code{r13}.  Put small uninitialized global and static data in the
7002 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
7003 The @option{-msdata=sysv} option is incompatible with the
7004 @option{-mrelocatable} option.
7006 @item -msdata=default
7007 @itemx -msdata
7008 @opindex msdata=default
7009 @opindex msdata
7010 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
7011 compile code the same as @option{-msdata=eabi}, otherwise compile code the
7012 same as @option{-msdata=sysv}.
7014 @item -msdata-data
7015 @opindex msdata-data
7016 On System V.4 and embedded PowerPC systems, put small global and static
7017 data in the @samp{.sdata} section.  Put small uninitialized global and
7018 static data in the @samp{.sbss} section.  Do not use register @code{r13}
7019 to address small data however.  This is the default behavior unless
7020 other @option{-msdata} options are used.
7022 @item -msdata=none
7023 @itemx -mno-sdata
7024 @opindex msdata=none
7025 @opindex mno-sdata
7026 On embedded PowerPC systems, put all initialized global and static data
7027 in the @samp{.data} section, and all uninitialized data in the
7028 @samp{.bss} section.
7030 @item -G @var{num}
7031 @opindex G
7032 @cindex smaller data references (PowerPC)
7033 @cindex .sdata/.sdata2 references (PowerPC)
7034 On embedded PowerPC systems, put global and static items less than or
7035 equal to @var{num} bytes into the small data or bss sections instead of
7036 the normal data or bss section.  By default, @var{num} is 8.  The
7037 @option{-G @var{num}} switch is also passed to the linker.
7038 All modules should be compiled with the same @option{-G @var{num}} value.
7040 @item -mregnames
7041 @itemx -mno-regnames
7042 @opindex mregnames
7043 @opindex mno-regnames
7044 On System V.4 and embedded PowerPC systems do (do not) emit register
7045 names in the assembly language output using symbolic forms.
7047 @end table
7049 @node RT Options
7050 @subsection IBM RT Options
7051 @cindex RT options
7052 @cindex IBM RT options
7054 These @samp{-m} options are defined for the IBM RT PC:
7056 @table @gcctabopt
7057 @item -min-line-mul
7058 @opindex min-line-mul
7059 Use an in-line code sequence for integer multiplies.  This is the
7060 default.
7062 @item -mcall-lib-mul
7063 @opindex mcall-lib-mul
7064 Call @code{lmul$$} for integer multiples.
7066 @item -mfull-fp-blocks
7067 @opindex mfull-fp-blocks
7068 Generate full-size floating point data blocks, including the minimum
7069 amount of scratch space recommended by IBM@.  This is the default.
7071 @item -mminimum-fp-blocks
7072 @opindex mminimum-fp-blocks
7073 Do not include extra scratch space in floating point data blocks.  This
7074 results in smaller code, but slower execution, since scratch space must
7075 be allocated dynamically.
7077 @cindex @file{varargs.h} and RT PC
7078 @cindex @file{stdarg.h} and RT PC
7079 @item -mfp-arg-in-fpregs
7080 @opindex mfp-arg-in-fpregs
7081 Use a calling sequence incompatible with the IBM calling convention in
7082 which floating point arguments are passed in floating point registers.
7083 Note that @code{varargs.h} and @code{stdarg.h} will not work with
7084 floating point operands if this option is specified.
7086 @item -mfp-arg-in-gregs
7087 @opindex mfp-arg-in-gregs
7088 Use the normal calling convention for floating point arguments.  This is
7089 the default.
7091 @item -mhc-struct-return
7092 @opindex mhc-struct-return
7093 Return structures of more than one word in memory, rather than in a
7094 register.  This provides compatibility with the MetaWare HighC (hc)
7095 compiler.  Use the option @option{-fpcc-struct-return} for compatibility
7096 with the Portable C Compiler (pcc).
7098 @item -mnohc-struct-return
7099 @opindex mnohc-struct-return
7100 Return some structures of more than one word in registers, when
7101 convenient.  This is the default.  For compatibility with the
7102 IBM-supplied compilers, use the option @option{-fpcc-struct-return} or the
7103 option @option{-mhc-struct-return}.
7104 @end table
7106 @node MIPS Options
7107 @subsection MIPS Options
7108 @cindex MIPS options
7110 These @samp{-m} options are defined for the MIPS family of computers:
7112 @table @gcctabopt
7114 @item -march=@var{cpu-type}
7115 @opindex march
7116 Assume the defaults for the machine type @var{cpu-type} when generating
7117 instructions.  The choices for @var{cpu-type} are  @samp{r2000}, @samp{r3000},
7118 @samp{r3900}, @samp{r4000}, @samp{r4100}, @samp{r4300}, @samp{r4400},
7119 @samp{r4600}, @samp{r4650}, @samp{r5000}, @samp{r6000}, @samp{r8000},
7120 and @samp{orion}.  Additionally, the @samp{r2000}, @samp{r3000},
7121 @samp{r4000}, @samp{r5000}, and @samp{r6000} can be abbreviated as
7122 @samp{r2k} (or @samp{r2K}), @samp{r3k}, etc.
7124 @item -mtune=@var{cpu-type}
7125 @opindex mtune
7126 Assume the defaults for the machine type @var{cpu-type} when scheduling
7127 instructions.  The choices for @var{cpu-type} are @samp{r2000}, @samp{r3000},
7128 @samp{r3900}, @samp{r4000}, @samp{r4100}, @samp{r4300}, @samp{r4400},
7129 @samp{r4600}, @samp{r4650}, @samp{r5000}, @samp{r6000}, @samp{r8000},
7130 and @samp{orion}.  Additionally, the @samp{r2000}, @samp{r3000},
7131 @samp{r4000}, @samp{r5000}, and @samp{r6000} can be abbreviated as
7132 @samp{r2k} (or @samp{r2K}), @samp{r3k}, etc.  While picking a specific
7133 @var{cpu-type} will schedule things appropriately for that particular
7134 chip, the compiler will not generate any code that does not meet level 1
7135 of the MIPS ISA (instruction set architecture) without a @option{-mipsX}
7136 or @option{-mabi} switch being used.
7138 @item -mcpu=@var{cpu-type}
7139 @opindex mcpu
7140 This is identical to specifying both @option{-march} and @option{-mtune}.
7142 @item -mips1
7143 @opindex mips1
7144 Issue instructions from level 1 of the MIPS ISA@.  This is the default.
7145 @samp{r3000} is the default @var{cpu-type} at this ISA level.
7147 @item -mips2
7148 @opindex mips2
7149 Issue instructions from level 2 of the MIPS ISA (branch likely, square
7150 root instructions).  @samp{r6000} is the default @var{cpu-type} at this
7151 ISA level.
7153 @item -mips3
7154 @opindex mips3
7155 Issue instructions from level 3 of the MIPS ISA (64-bit instructions).
7156 @samp{r4000} is the default @var{cpu-type} at this ISA level.
7158 @item -mips4
7159 @opindex mips4
7160 Issue instructions from level 4 of the MIPS ISA (conditional move,
7161 prefetch, enhanced FPU instructions).  @samp{r8000} is the default
7162 @var{cpu-type} at this ISA level.
7164 @item -mfp32
7165 @opindex mfp32
7166 Assume that 32 32-bit floating point registers are available.  This is
7167 the default.
7169 @item -mfp64
7170 @opindex mfp64
7171 Assume that 32 64-bit floating point registers are available.  This is
7172 the default when the @option{-mips3} option is used.
7174 @item -mfused-madd
7175 @itemx -mno-fused-madd
7176 @opindex mfused-madd
7177 @opindex mno-fused-madd
7178 Generate code that uses (does not use) the floating point multiply and
7179 accumulate instructions, when they are available.  These instructions
7180 are generated by default if they are available, but this may be
7181 undesirable if the extra precision causes problems or on certain chips
7182 in the mode where denormals are rounded to zero where denormals
7183 generated by multiply and accumulate instructions cause exceptions
7184 anyway.
7186 @item -mgp32
7187 @opindex mgp32
7188 Assume that 32 32-bit general purpose registers are available.  This is
7189 the default.
7191 @item -mgp64
7192 @opindex mgp64
7193 Assume that 32 64-bit general purpose registers are available.  This is
7194 the default when the @option{-mips3} option is used.
7196 @item -mint64
7197 @opindex mint64
7198 Force int and long types to be 64 bits wide.  See @option{-mlong32} for an
7199 explanation of the default, and the width of pointers.
7201 @item -mlong64
7202 @opindex mlong64
7203 Force long types to be 64 bits wide.  See @option{-mlong32} for an
7204 explanation of the default, and the width of pointers.
7206 @item -mlong32
7207 @opindex mlong32
7208 Force long, int, and pointer types to be 32 bits wide.
7210 If none of @option{-mlong32}, @option{-mlong64}, or @option{-mint64} are set,
7211 the size of ints, longs, and pointers depends on the ABI and ISA chosen.
7212 For @option{-mabi=32}, and @option{-mabi=n32}, ints and longs are 32 bits
7213 wide.  For @option{-mabi=64}, ints are 32 bits, and longs are 64 bits wide.
7214 For @option{-mabi=eabi} and either @option{-mips1} or @option{-mips2}, ints
7215 and longs are 32 bits wide.  For @option{-mabi=eabi} and higher ISAs, ints
7216 are 32 bits, and longs are 64 bits wide.  The width of pointer types is
7217 the smaller of the width of longs or the width of general purpose
7218 registers (which in turn depends on the ISA)@.
7220 @item -mabi=32
7221 @itemx -mabi=o64
7222 @itemx -mabi=n32
7223 @itemx -mabi=64
7224 @itemx -mabi=eabi
7225 @opindex mabi=32
7226 @opindex mabi=o64
7227 @opindex mabi=n32
7228 @opindex mabi=64
7229 @opindex mabi=eabi
7230 Generate code for the indicated ABI@.  The default instruction level is
7231 @option{-mips1} for @samp{32}, @option{-mips3} for @samp{n32}, and
7232 @option{-mips4} otherwise.  Conversely, with @option{-mips1} or
7233 @option{-mips2}, the default ABI is @samp{32}; otherwise, the default ABI
7234 is @samp{64}.
7236 @item -mmips-as
7237 @opindex mmips-as
7238 Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
7239 add normal debug information.  This is the default for all
7240 platforms except for the OSF/1 reference platform, using the OSF/rose
7241 object format.  If the either of the @option{-gstabs} or @option{-gstabs+}
7242 switches are used, the @file{mips-tfile} program will encapsulate the
7243 stabs within MIPS ECOFF@.
7245 @item -mgas
7246 @opindex mgas
7247 Generate code for the GNU assembler.  This is the default on the OSF/1
7248 reference platform, using the OSF/rose object format.  Also, this is
7249 the default if the configure option @option{--with-gnu-as} is used.
7251 @item -msplit-addresses
7252 @itemx -mno-split-addresses
7253 @opindex msplit-addresses
7254 @opindex mno-split-addresses
7255 Generate code to load the high and low parts of address constants separately.
7256 This allows GCC to optimize away redundant loads of the high order
7257 bits of addresses.  This optimization requires GNU as and GNU ld.
7258 This optimization is enabled by default for some embedded targets where
7259 GNU as and GNU ld are standard.
7261 @item -mrnames
7262 @itemx -mno-rnames
7263 @opindex mrnames
7264 @opindex mno-rnames
7265 The @option{-mrnames} switch says to output code using the MIPS software
7266 names for the registers, instead of the hardware names (ie, @var{a0}
7267 instead of @var{$4}).  The only known assembler that supports this option
7268 is the Algorithmics assembler.
7270 @item -mgpopt
7271 @itemx -mno-gpopt
7272 @opindex mgpopt
7273 @opindex mno-gpopt
7274 The @option{-mgpopt} switch says to write all of the data declarations
7275 before the instructions in the text section, this allows the MIPS
7276 assembler to generate one word memory references instead of using two
7277 words for short global or static data items.  This is on by default if
7278 optimization is selected.
7280 @item -mstats
7281 @itemx -mno-stats
7282 @opindex mstats
7283 @opindex mno-stats
7284 For each non-inline function processed, the @option{-mstats} switch
7285 causes the compiler to emit one line to the standard error file to
7286 print statistics about the program (number of registers saved, stack
7287 size, etc.).
7289 @item -mmemcpy
7290 @itemx -mno-memcpy
7291 @opindex mmemcpy
7292 @opindex mno-memcpy
7293 The @option{-mmemcpy} switch makes all block moves call the appropriate
7294 string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
7295 generating inline code.
7297 @item -mmips-tfile
7298 @itemx -mno-mips-tfile
7299 @opindex mmips-tfile
7300 @opindex mno-mips-tfile
7301 The @option{-mno-mips-tfile} switch causes the compiler not
7302 postprocess the object file with the @file{mips-tfile} program,
7303 after the MIPS assembler has generated it to add debug support.  If
7304 @file{mips-tfile} is not run, then no local variables will be
7305 available to the debugger.  In addition, @file{stage2} and
7306 @file{stage3} objects will have the temporary file names passed to the
7307 assembler embedded in the object file, which means the objects will
7308 not compare the same.  The @option{-mno-mips-tfile} switch should only
7309 be used when there are bugs in the @file{mips-tfile} program that
7310 prevents compilation.
7312 @item -msoft-float
7313 @opindex msoft-float
7314 Generate output containing library calls for floating point.
7315 @strong{Warning:} the requisite libraries are not part of GCC@.
7316 Normally the facilities of the machine's usual C compiler are used, but
7317 this can't be done directly in cross-compilation.  You must make your
7318 own arrangements to provide suitable library functions for
7319 cross-compilation.
7321 @item -mhard-float
7322 @opindex mhard-float
7323 Generate output containing floating point instructions.  This is the
7324 default if you use the unmodified sources.
7326 @item -mabicalls
7327 @itemx -mno-abicalls
7328 @opindex mabicalls
7329 @opindex mno-abicalls
7330 Emit (or do not emit) the pseudo operations @samp{.abicalls},
7331 @samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for
7332 position independent code.
7334 @item -mlong-calls
7335 @itemx -mno-long-calls
7336 @opindex mlong-calls
7337 @opindex mno-long-calls
7338 Do all calls with the @samp{JALR} instruction, which requires
7339 loading up a function's address into a register before the call.
7340 You need to use this switch, if you call outside of the current
7341 512 megabyte segment to functions that are not through pointers.
7343 @item -mhalf-pic
7344 @itemx -mno-half-pic
7345 @opindex mhalf-pic
7346 @opindex mno-half-pic
7347 Put pointers to extern references into the data section and load them
7348 up, rather than put the references in the text section.
7350 @item -membedded-pic
7351 @itemx -mno-embedded-pic
7352 @opindex membedded-pic
7353 @opindex mno-embedded-pic
7354 Generate PIC code suitable for some embedded systems.  All calls are
7355 made using PC relative address, and all data is addressed using the $gp
7356 register.  No more than 65536 bytes of global data may be used.  This
7357 requires GNU as and GNU ld which do most of the work.  This currently
7358 only works on targets which use ECOFF; it does not work with ELF@.
7360 @item -membedded-data
7361 @itemx -mno-embedded-data
7362 @opindex membedded-data
7363 @opindex mno-embedded-data
7364 Allocate variables to the read-only data section first if possible, then
7365 next in the small data section if possible, otherwise in data.  This gives
7366 slightly slower code than the default, but reduces the amount of RAM required
7367 when executing, and thus may be preferred for some embedded systems.
7369 @item -muninit-const-in-rodata
7370 @itemx -mno-uninit-const-in-rodata
7371 @opindex muninit-const-in-rodata
7372 @opindex mno-uninit-const-in-rodata
7373 When used together with @option{-membedded-data}, it will always store uninitialized
7374 const variables in the read-only data section.
7376 @item -msingle-float
7377 @itemx -mdouble-float
7378 @opindex msingle-float
7379 @opindex mdouble-float
7380 The @option{-msingle-float} switch tells gcc to assume that the floating
7381 point coprocessor only supports single precision operations, as on the
7382 @samp{r4650} chip.  The @option{-mdouble-float} switch permits gcc to use
7383 double precision operations.  This is the default.
7385 @item -mmad
7386 @itemx -mno-mad
7387 @opindex mmad
7388 @opindex mno-mad
7389 Permit use of the @samp{mad}, @samp{madu} and @samp{mul} instructions,
7390 as on the @samp{r4650} chip.
7392 @item -m4650
7393 @opindex m4650
7394 Turns on @option{-msingle-float}, @option{-mmad}, and, at least for now,
7395 @option{-mcpu=r4650}.
7397 @item -mips16
7398 @itemx -mno-mips16
7399 @opindex mips16
7400 @opindex mno-mips16
7401 Enable 16-bit instructions.
7403 @item -mentry
7404 @opindex mentry
7405 Use the entry and exit pseudo ops.  This option can only be used with
7406 @option{-mips16}.
7408 @item -EL
7409 @opindex EL
7410 Compile code for the processor in little endian mode.
7411 The requisite libraries are assumed to exist.
7413 @item -EB
7414 @opindex EB
7415 Compile code for the processor in big endian mode.
7416 The requisite libraries are assumed to exist.
7418 @item -G @var{num}
7419 @opindex G
7420 @cindex smaller data references (MIPS)
7421 @cindex gp-relative references (MIPS)
7422 Put global and static items less than or equal to @var{num} bytes into
7423 the small data or bss sections instead of the normal data or bss
7424 section.  This allows the assembler to emit one word memory reference
7425 instructions based on the global pointer (@var{gp} or @var{$28}),
7426 instead of the normal two words used.  By default, @var{num} is 8 when
7427 the MIPS assembler is used, and 0 when the GNU assembler is used.  The
7428 @option{-G @var{num}} switch is also passed to the assembler and linker.
7429 All modules should be compiled with the same @option{-G @var{num}}
7430 value.
7432 @item -nocpp
7433 @opindex nocpp
7434 Tell the MIPS assembler to not run its preprocessor over user
7435 assembler files (with a @samp{.s} suffix) when assembling them.
7437 @item -mfix7000
7438 @opindex mfix7000
7439 Pass an option to gas which will cause nops to be inserted if
7440 the read of the destination register of an mfhi or mflo instruction
7441 occurs in the following two instructions.
7443 @item -no-crt0
7444 @opindex no-crt0
7445 Do not include the default crt0.
7447 @item -mflush-func=@var{func}
7448 @itemx -mno-flush-func
7449 @opindex mflush-func
7450 Specifies the function to call to flush the I and D caches, or to not
7451 call any such function.  If called, the function must take the same
7452 arguments as the common @code{_flush_func()}, that is, the address of the
7453 memory range for which the cache is being flushed, the size of the
7454 memory range, and the number 3 (to flush both caches).  The default
7455 depends on the target gcc was configured for, but commonly is either
7456 @samp{_flush_func} or @samp{__cpu_flush}.
7457 @end table
7459 @ifset INTERNALS
7460 These options are defined by the macro
7461 @code{TARGET_SWITCHES} in the machine description.  The default for the
7462 options is also defined by that macro, which enables you to change the
7463 defaults.
7464 @end ifset
7466 @node i386 and x86-64 Options
7467 @subsection Intel 386 and AMD x86-64 Options
7468 @cindex i386 Options
7469 @cindex x86-64 Options
7470 @cindex Intel 386 Options
7471 @cindex AMD x86-64 Options
7473 These @samp{-m} options are defined for the i386 and x86-64 family of
7474 computers:
7476 @table @gcctabopt
7477 @item -mcpu=@var{cpu-type}
7478 @opindex mcpu
7479 Assume the defaults for the machine type @var{cpu-type} when scheduling
7480 instructions.  The choices for @var{cpu-type} are @samp{i386},
7481 @samp{i486}, @samp{i586}, @samp{i686}, @samp{pentium},
7482 @samp{pentiumpro}, @samp{pentium4}, @samp{k6}, and @samp{athlon}
7484 While picking a specific @var{cpu-type} will schedule things appropriately
7485 for that particular chip, the compiler will not generate any code that
7486 does not run on the i386 without the @option{-march=@var{cpu-type}} option
7487 being used.  @samp{i586} is equivalent to @samp{pentium} and @samp{i686}
7488 is equivalent to @samp{pentiumpro}.  @samp{k6} and @samp{athlon} are the
7489 AMD chips as opposed to the Intel ones.
7491 @item -march=@var{cpu-type}
7492 @opindex march
7493 Generate instructions for the machine type @var{cpu-type}.  The choices
7494 for @var{cpu-type} are the same as for @option{-mcpu}.  Moreover,
7495 specifying @option{-march=@var{cpu-type}} implies @option{-mcpu=@var{cpu-type}}.
7497 @item -m386
7498 @itemx -m486
7499 @itemx -mpentium
7500 @itemx -mpentiumpro
7501 @opindex m386
7502 @opindex m486
7503 @opindex mpentium
7504 @opindex mpentiumpro
7505 These options are synonyms for @option{-mcpu=i386}, @option{-mcpu=i486},
7506 @option{-mcpu=pentium}, and @option{-mcpu=pentiumpro} respectively.
7507 These synonyms are deprecated.
7509 @item -mintel-syntax
7510 @opindex mintel-syntax
7511 Emit assembly using Intel syntax opcodes instead of AT&T syntax.
7513 @item -mieee-fp
7514 @itemx -mno-ieee-fp
7515 @opindex mieee-fp
7516 @opindex mno-ieee-fp
7517 Control whether or not the compiler uses IEEE floating point
7518 comparisons.  These handle correctly the case where the result of a
7519 comparison is unordered.
7521 @item -msoft-float
7522 @opindex msoft-float
7523 Generate output containing library calls for floating point.
7524 @strong{Warning:} the requisite libraries are not part of GCC@.
7525 Normally the facilities of the machine's usual C compiler are used, but
7526 this can't be done directly in cross-compilation.  You must make your
7527 own arrangements to provide suitable library functions for
7528 cross-compilation.
7530 On machines where a function returns floating point results in the 80387
7531 register stack, some floating point opcodes may be emitted even if
7532 @option{-msoft-float} is used.
7534 @item -mno-fp-ret-in-387
7535 @opindex mno-fp-ret-in-387
7536 Do not use the FPU registers for return values of functions.
7538 The usual calling convention has functions return values of types
7539 @code{float} and @code{double} in an FPU register, even if there
7540 is no FPU@.  The idea is that the operating system should emulate
7541 an FPU@.
7543 The option @option{-mno-fp-ret-in-387} causes such values to be returned
7544 in ordinary CPU registers instead.
7546 @item -mno-fancy-math-387
7547 @opindex mno-fancy-math-387
7548 Some 387 emulators do not support the @code{sin}, @code{cos} and
7549 @code{sqrt} instructions for the 387.  Specify this option to avoid
7550 generating those instructions.  This option is the default on FreeBSD@.
7551 As of revision 2.6.1, these instructions are not generated unless you
7552 also use the @option{-funsafe-math-optimizations} switch.
7554 @item -malign-double
7555 @itemx -mno-align-double
7556 @opindex malign-double
7557 @opindex mno-align-double
7558 Control whether GCC aligns @code{double}, @code{long double}, and
7559 @code{long long} variables on a two word boundary or a one word
7560 boundary.  Aligning @code{double} variables on a two word boundary will
7561 produce code that runs somewhat faster on a @samp{Pentium} at the
7562 expense of more memory.
7564 @item -m128bit-long-double
7565 @opindex m128bit-long-double
7566 Control the size of @code{long double} type. i386 application binary interface
7567 specify the size to be 12 bytes, while modern architectures (Pentium and newer)
7568 prefer @code{long double} aligned to 8 or 16 byte boundary.  This is
7569 impossible to reach with 12 byte long doubles in the array accesses.
7571 @strong{Warning:} if you use the @option{-m128bit-long-double} switch, the
7572 structures and arrays containing @code{long double} will change their size as
7573 well as function calling convention for function taking @code{long double}
7574 will be modified.
7576 @item -m96bit-long-double
7577 @opindex m96bit-long-double
7578 Set the size of @code{long double} to 96 bits as required by the i386
7579 application binary interface.  This is the default.
7581 @item -msvr3-shlib
7582 @itemx -mno-svr3-shlib
7583 @opindex msvr3-shlib
7584 @opindex mno-svr3-shlib
7585 Control whether GCC places uninitialized local variables into the
7586 @code{bss} or @code{data} segments.  @option{-msvr3-shlib} places them
7587 into @code{bss}.  These options are meaningful only on System V Release 3.
7589 @item -mrtd
7590 @opindex mrtd
7591 Use a different function-calling convention, in which functions that
7592 take a fixed number of arguments return with the @code{ret} @var{num}
7593 instruction, which pops their arguments while returning.  This saves one
7594 instruction in the caller since there is no need to pop the arguments
7595 there.
7597 You can specify that an individual function is called with this calling
7598 sequence with the function attribute @samp{stdcall}.  You can also
7599 override the @option{-mrtd} option by using the function attribute
7600 @samp{cdecl}.  @xref{Function Attributes}.
7602 @strong{Warning:} this calling convention is incompatible with the one
7603 normally used on Unix, so you cannot use it if you need to call
7604 libraries compiled with the Unix compiler.
7606 Also, you must provide function prototypes for all functions that
7607 take variable numbers of arguments (including @code{printf});
7608 otherwise incorrect code will be generated for calls to those
7609 functions.
7611 In addition, seriously incorrect code will result if you call a
7612 function with too many arguments.  (Normally, extra arguments are
7613 harmlessly ignored.)
7615 @item -mregparm=@var{num}
7616 @opindex mregparm
7617 Control how many registers are used to pass integer arguments.  By
7618 default, no registers are used to pass arguments, and at most 3
7619 registers can be used.  You can control this behavior for a specific
7620 function by using the function attribute @samp{regparm}.
7621 @xref{Function Attributes}.
7623 @strong{Warning:} if you use this switch, and
7624 @var{num} is nonzero, then you must build all modules with the same
7625 value, including any libraries.  This includes the system libraries and
7626 startup modules.
7628 @item -mpreferred-stack-boundary=@var{num}
7629 @opindex mpreferred-stack-boundary
7630 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
7631 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
7632 the default is 4 (16 bytes or 128 bits), except when optimizing for code
7633 size (@option{-Os}), in which case the default is the minimum correct
7634 alignment (4 bytes for x86, and 8 bytes for x86-64).
7636 On Pentium and PentiumPro, @code{double} and @code{long double} values
7637 should be aligned to an 8 byte boundary (see @option{-malign-double}) or
7638 suffer significant run time performance penalties.  On Pentium III, the
7639 Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
7640 penalties if it is not 16 byte aligned.
7642 To ensure proper alignment of this values on the stack, the stack boundary
7643 must be as aligned as that required by any value stored on the stack.
7644 Further, every function must be generated such that it keeps the stack
7645 aligned.  Thus calling a function compiled with a higher preferred
7646 stack boundary from a function compiled with a lower preferred stack
7647 boundary will most likely misalign the stack.  It is recommended that
7648 libraries that use callbacks always use the default setting.
7650 This extra alignment does consume extra stack space, and generally
7651 increases code size.  Code that is sensitive to stack space usage, such
7652 as embedded systems and operating system kernels, may want to reduce the
7653 preferred alignment to @option{-mpreferred-stack-boundary=2}.
7655 @item -mmmx
7656 @itemx -mno-mmx
7657 @item -msse
7658 @itemx -mno-sse
7659 @item -m3dnow
7660 @itemx -mno-3dnow
7661 @opindex mmmx
7662 @opindex mno-mmx
7663 @opindex msse
7664 @opindex mno-sse
7665 @opindex m3dnow
7666 @opindex mno-3dnow
7667 These switches enable or disable the use of built-in functions that allow
7668 direct access to the MMX, SSE and 3Dnow extensions of the instruction set.
7670 The following machine modes are available for use with MMX built-in functions
7671 (@pxref{Vector Extensions}): @code{V2SI} for a vector of two 32 bit integers,
7672 @code{V4HI} for a vector of four 16 bit integers, and @code{V8QI} for a
7673 vector of eight 8 bit integers.  Some of the built-in functions operate on
7674 MMX registers as a whole 64 bit entity, these use @code{DI} as their mode.
7676 If 3Dnow extensions are enabled, @code{V2SF} is used as a mode for a vector
7677 of two 32 bit floating point values.
7679 If SSE extensions are enabled, @code{V4SF} is used for a vector of four 32 bit
7680 floating point values.  Some instructions use a vector of four 32 bit
7681 integers, these use @code{V4SI}.  Finally, some instructions operate on an
7682 entire vector register, interpreting it as a 128 bit integer, these use mode
7683 @code{TI}.
7685 The following built-in functions are made available by @option{-mmmx}:
7686 @table @code
7687 @item v8qi __builtin_ia32_paddb (v8qi, v8qi)
7688 Generates the @code{paddb} machine instruction.
7689 @item v4hi __builtin_ia32_paddw (v4hi, v4hi)
7690 Generates the @code{paddw} machine instruction.
7691 @item v2si __builtin_ia32_paddd (v2si, v2si)
7692 Generates the @code{paddd} machine instruction.
7693 @item v8qi __builtin_ia32_psubb (v8qi, v8qi)
7694 Generates the @code{psubb} machine instruction.
7695 @item v4hi __builtin_ia32_psubw (v4hi, v4hi)
7696 Generates the @code{psubw} machine instruction.
7697 @item v2si __builtin_ia32_psubd (v2si, v2si)
7698 Generates the @code{psubd} machine instruction.
7700 @item v8qi __builtin_ia32_paddsb (v8qi, v8qi)
7701 Generates the @code{paddsb} machine instruction.
7702 @item v4hi __builtin_ia32_paddsw (v4hi, v4hi)
7703 Generates the @code{paddsw} machine instruction.
7704 @item v8qi __builtin_ia32_psubsb (v8qi, v8qi)
7705 Generates the @code{psubsb} machine instruction.
7706 @item v4hi __builtin_ia32_psubsw (v4hi, v4hi)
7707 Generates the @code{psubsw} machine instruction.
7709 @item v8qi __builtin_ia32_paddusb (v8qi, v8qi)
7710 Generates the @code{paddusb} machine instruction.
7711 @item v4hi __builtin_ia32_paddusw (v4hi, v4hi)
7712 Generates the @code{paddusw} machine instruction.
7713 @item v8qi __builtin_ia32_psubusb (v8qi, v8qi)
7714 Generates the @code{psubusb} machine instruction.
7715 @item v4hi __builtin_ia32_psubusw (v4hi, v4hi)
7716 Generates the @code{psubusw} machine instruction.
7718 @item v4hi __builtin_ia32_pmullw (v4hi, v4hi)
7719 Generates the @code{pmullw} machine instruction.
7720 @item v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
7721 Generates the @code{pmulhw} machine instruction.
7723 @item di __builtin_ia32_pand (di, di)
7724 Generates the @code{pand} machine instruction.
7725 @item di __builtin_ia32_pandn (di,di)
7726 Generates the @code{pandn} machine instruction.
7727 @item di __builtin_ia32_por (di, di)
7728 Generates the @code{por} machine instruction.
7729 @item di __builtin_ia32_pxor (di, di)
7730 Generates the @code{pxor} machine instruction.
7732 @item v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
7733 Generates the @code{pcmpeqb} machine instruction.
7734 @item v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
7735 Generates the @code{pcmpeqw} machine instruction.
7736 @item v2si __builtin_ia32_pcmpeqd (v2si, v2si)
7737 Generates the @code{pcmpeqd} machine instruction.
7738 @item v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
7739 Generates the @code{pcmpgtb} machine instruction.
7740 @item v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
7741 Generates the @code{pcmpgtw} machine instruction.
7742 @item v2si __builtin_ia32_pcmpgtd (v2si, v2si)
7743 Generates the @code{pcmpgtd} machine instruction.
7745 @item v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
7746 Generates the @code{punpckhbw} machine instruction.
7747 @item v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
7748 Generates the @code{punpckhwd} machine instruction.
7749 @item v2si __builtin_ia32_punpckhdq (v2si, v2si)
7750 Generates the @code{punpckhdq} machine instruction.
7751 @item v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
7752 Generates the @code{punpcklbw} machine instruction.
7753 @item v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
7754 Generates the @code{punpcklwd} machine instruction.
7755 @item v2si __builtin_ia32_punpckldq (v2si, v2si)
7756 Generates the @code{punpckldq} machine instruction.
7758 @item v8qi __builtin_ia32_packsswb (v4hi, v4hi)
7759 Generates the @code{packsswb} machine instruction.
7760 @item v4hi __builtin_ia32_packssdw (v2si, v2si)
7761 Generates the @code{packssdw} machine instruction.
7762 @item v8qi __builtin_ia32_packuswb (v4hi, v4hi)
7763 Generates the @code{packuswb} machine instruction.
7765 @end table
7767 The following built-in functions are made available either with @option{-msse}, or
7768 with a combination of @option{-m3dnow} and @option{-march=athlon}.
7769 @table @code
7771 @item v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
7772 Generates the @code{pmulhuw} machine instruction.
7774 @item v8qi __builtin_ia32_pavgb (v8qi, v8qi)
7775 Generates the @code{pavgb} machine instruction.
7776 @item v4hi __builtin_ia32_pavgw (v4hi, v4hi)
7777 Generates the @code{pavgw} machine instruction.
7778 @item v4hi __builtin_ia32_psadbw (v8qi, v8qi)
7779 Generates the @code{psadbw} machine instruction.
7781 @item v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
7782 Generates the @code{pmaxub} machine instruction.
7783 @item v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
7784 Generates the @code{pmaxsw} machine instruction.
7785 @item v8qi __builtin_ia32_pminub (v8qi, v8qi)
7786 Generates the @code{pminub} machine instruction.
7787 @item v4hi __builtin_ia32_pminsw (v4hi, v4hi)
7788 Generates the @code{pminsw} machine instruction.
7790 @item int __builtin_ia32_pextrw (v4hi, int)
7791 Generates the @code{pextrw} machine instruction.
7792 @item v4hi __builtin_ia32_pinsrw (v4hi, int, int)
7793 Generates the @code{pinsrw} machine instruction.
7795 @item int __builtin_ia32_pmovmskb (v8qi)
7796 Generates the @code{pmovmskb} machine instruction.
7797 @item void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
7798 Generates the @code{maskmovq} machine instruction.
7799 @item void __builtin_ia32_movntq (di *, di)
7800 Generates the @code{movntq} machine instruction.
7801 @item void __builtin_ia32_sfence (void)
7802 Generates the @code{sfence} machine instruction.
7803 @item void __builtin_ia32_prefetch (char *, int selector)
7804 Generates a prefetch machine instruction, depending on the value of
7805 selector.  If @code{selector} is 0, it generates @code{prefetchnta}; for
7806 a value of 1, it generates @code{prefetcht0}; for a value of 2, it generates
7807 @code{prefetcht1}; and for a value of 3 it generates @code{prefetcht2}.
7809 @end table
7811 The following built-in functions are available when @option{-msse} is used.
7813 @table @code
7814 @item int __builtin_ia32_comieq (v4sf, v4sf)
7815 Generates the @code{comiss} machine instruction and performs an equality
7816 comparison.  The return value is the truth value of that comparison.
7817 @item int __builtin_ia32_comineq (v4sf, v4sf)
7818 Generates the @code{comiss} machine instruction and performs an inequality
7819 comparison.  The return value is the truth value of that comparison.
7820 @item int __builtin_ia32_comilt (v4sf, v4sf)
7821 Generates the @code{comiss} machine instruction and performs a ``less than''
7822 comparison.  The return value is the truth value of that comparison.
7823 @item int __builtin_ia32_comile (v4sf, v4sf)
7824 Generates the @code{comiss} machine instruction and performs a ``less or
7825 equal'' comparison.  The return value is the truth value of that comparison.
7826 @item int __builtin_ia32_comigt (v4sf, v4sf)
7827 Generates the @code{comiss} machine instruction and performs a ``greater than''
7828 comparison.  The return value is the truth value of that comparison.
7829 @item int __builtin_ia32_comige (v4sf, v4sf)
7830 Generates the @code{comiss} machine instruction and performs a ``greater or
7831 equal'' comparison.  The return value is the truth value of that comparison.
7833 @item int __builtin_ia32_ucomieq (v4sf, v4sf)
7834 Generates the @code{ucomiss} machine instruction and performs an equality
7835 comparison.  The return value is the truth value of that comparison.
7836 @item int __builtin_ia32_ucomineq (v4sf, v4sf)
7837 Generates the @code{ucomiss} machine instruction and performs an inequality
7838 comparison.  The return value is the truth value of that comparison.
7839 @item int __builtin_ia32_ucomilt (v4sf, v4sf)
7840 Generates the @code{ucomiss} machine instruction and performs a ``less than''
7841 comparison.  The return value is the truth value of that comparison.
7842 @item int __builtin_ia32_ucomile (v4sf, v4sf)
7843 Generates the @code{ucomiss} machine instruction and performs a ``less or
7844 equal'' comparison.  The return value is the truth value of that comparison.
7845 @item int __builtin_ia32_ucomigt (v4sf, v4sf)
7846 Generates the @code{ucomiss} machine instruction and performs a ``greater than''
7847 comparison.  The return value is the truth value of that comparison.
7848 @item int __builtin_ia32_ucomige (v4sf, v4sf)
7849 Generates the @code{ucomiss} machine instruction and performs a ``greater or
7850 equal'' comparison.  The return value is the truth value of that comparison.
7852 @item v4sf __builtin_ia32_addps (v4sf, v4sf)
7853 Generates the @code{addps} machine instruction.
7854 @item v4sf __builtin_ia32_addss (v4sf, v4sf)
7855 Generates the @code{addss} machine instruction.
7856 @item v4sf __builtin_ia32_subps (v4sf, v4sf)
7857 Generates the @code{subps} machine instruction.
7858 @item v4sf __builtin_ia32_subss (v4sf, v4sf)
7859 Generates the @code{subss} machine instruction.
7860 @item v4sf __builtin_ia32_mulps (v4sf, v4sf)
7861 Generates the @code{mulps} machine instruction.
7862 @item v4sf __builtin_ia32_mulss (v4sf, v4sf)
7863 Generates the @code{mulss} machine instruction.
7864 @item v4sf __builtin_ia32_divps (v4sf, v4sf)
7865 Generates the @code{divps} machine instruction.
7866 @item v4sf __builtin_ia32_divss (v4sf, v4sf)
7867 Generates the @code{divss} machine instruction.
7869 @item v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
7870 Generates the @code{cmpeqps} machine instruction.
7871 @item v4si __builtin_ia32_cmplts (v4sf, v4sf)
7872 Generates the @code{cmpltps} machine instruction.
7873 @item v4si __builtin_ia32_cmpleps (v4sf, v4sf)
7874 Generates the @code{cmpleps} machine instruction.
7875 @item v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
7876 Generates the @code{cmpgtps} machine instruction.
7877 @item v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
7878 Generates the @code{cmpgeps} machine instruction.
7879 @item v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
7880 Generates the @code{cmpunodps} machine instruction.
7881 @item v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
7882 Generates the @code{cmpeqps} machine instruction.
7883 @item v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
7884 Generates the @code{cmpltps} machine instruction.
7885 @item v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
7886 Generates the @code{cmpleps} machine instruction.
7887 @item v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
7888 Generates the @code{cmpgtps} machine instruction.
7889 @item v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
7890 Generates the @code{cmpgeps} machine instruction.
7891 @item v4si __builtin_ia32_cmpordps (v4sf, v4sf)
7892 Generates the @code{cmpunodps} machine instruction.
7894 @item v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
7895 Generates the @code{cmpeqss} machine instruction.
7896 @item v4si __builtin_ia32_cmpltss (v4sf, v4sf)
7897 Generates the @code{cmpltss} machine instruction.
7898 @item v4si __builtin_ia32_cmpless (v4sf, v4sf)
7899 Generates the @code{cmpless} machine instruction.
7900 @item v4si __builtin_ia32_cmpgtss (v4sf, v4sf)
7901 Generates the @code{cmpgtss} machine instruction.
7902 @item v4si __builtin_ia32_cmpgess (v4sf, v4sf)
7903 Generates the @code{cmpgess} machine instruction.
7904 @item v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
7905 Generates the @code{cmpunodss} machine instruction.
7906 @item v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
7907 Generates the @code{cmpeqss} machine instruction.
7908 @item v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
7909 Generates the @code{cmpltss} machine instruction.
7910 @item v4si __builtin_ia32_cmpnless (v4sf, v4sf)
7911 Generates the @code{cmpless} machine instruction.
7912 @item v4si __builtin_ia32_cmpngtss (v4sf, v4sf)
7913 Generates the @code{cmpgtss} machine instruction.
7914 @item v4si __builtin_ia32_cmpngess (v4sf, v4sf)
7915 Generates the @code{cmpgess} machine instruction.
7916 @item v4si __builtin_ia32_cmpordss (v4sf, v4sf)
7917 Generates the @code{cmpunodss} machine instruction.
7919 @item v4sf __builtin_ia32_maxps (v4sf, v4sf)
7920 Generates the @code{maxps} machine instruction.
7921 @item v4sf __builtin_ia32_maxsss (v4sf, v4sf)
7922 Generates the @code{maxss} machine instruction.
7923 @item v4sf __builtin_ia32_minps (v4sf, v4sf)
7924 Generates the @code{minps} machine instruction.
7925 @item v4sf __builtin_ia32_minsss (v4sf, v4sf)
7926 Generates the @code{minss} machine instruction.
7928 @item ti __builtin_ia32_andps (ti, ti)
7929 Generates the @code{andps} machine instruction.
7930 @item ti __builtin_ia32_andnps (ti, ti)
7931 Generates the @code{andnps} machine instruction.
7932 @item ti __builtin_ia32_orps (ti, ti)
7933 Generates the @code{orps} machine instruction.
7934 @item ti __builtin_ia32_xorps (ti, ti)
7935 Generates the @code{xorps} machine instruction.
7937 @item v4sf __builtin_ia32_movps (v4sf, v4sf)
7938 Generates the @code{movps} machine instruction.
7939 @item v4sf __builtin_ia32_movhlps (v4sf, v4sf)
7940 Generates the @code{movhlps} machine instruction.
7941 @item v4sf __builtin_ia32_movlhps (v4sf, v4sf)
7942 Generates the @code{movlhps} machine instruction.
7943 @item v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
7944 Generates the @code{unpckhps} machine instruction.
7945 @item v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
7946 Generates the @code{unpcklps} machine instruction.
7948 @item v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
7949 Generates the @code{cvtpi2ps} machine instruction.
7950 @item v2si __builtin_ia32_cvtps2pi (v4sf)
7951 Generates the @code{cvtps2pi} machine instruction.
7952 @item v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
7953 Generates the @code{cvtsi2ss} machine instruction.
7954 @item int __builtin_ia32_cvtss2si (v4sf)
7955 Generates the @code{cvtsi2ss} machine instruction.
7956 @item v2si __builtin_ia32_cvttps2pi (v4sf)
7957 Generates the @code{cvttps2pi} machine instruction.
7958 @item int __builtin_ia32_cvttss2si (v4sf)
7959 Generates the @code{cvttsi2ss} machine instruction.
7961 @item v4sf __builtin_ia32_rcpps (v4sf)
7962 Generates the @code{rcpps} machine instruction.
7963 @item v4sf __builtin_ia32_rsqrtps (v4sf)
7964 Generates the @code{rsqrtps} machine instruction.
7965 @item v4sf __builtin_ia32_sqrtps (v4sf)
7966 Generates the @code{sqrtps} machine instruction.
7967 @item v4sf __builtin_ia32_rcpss (v4sf)
7968 Generates the @code{rcpss} machine instruction.
7969 @item v4sf __builtin_ia32_rsqrtss (v4sf)
7970 Generates the @code{rsqrtss} machine instruction.
7971 @item v4sf __builtin_ia32_sqrtss (v4sf)
7972 Generates the @code{sqrtss} machine instruction.
7974 @item v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
7975 Generates the @code{shufps} machine instruction.
7977 @item v4sf __builtin_ia32_loadaps (float *)
7978 Generates the @code{movaps} machine instruction as a load from memory.
7979 @item void __builtin_ia32_storeaps (float *, v4sf)
7980 Generates the @code{movaps} machine instruction as a store to memory.
7981 @item v4sf __builtin_ia32_loadups (float *)
7982 Generates the @code{movups} machine instruction as a load from memory.
7983 @item void __builtin_ia32_storeups (float *, v4sf)
7984 Generates the @code{movups} machine instruction as a store to memory.
7985 @item v4sf __builtin_ia32_loadsss (float *)
7986 Generates the @code{movss} machine instruction as a load from memory.
7987 @item void __builtin_ia32_storess (float *, v4sf)
7988 Generates the @code{movss} machine instruction as a store to memory.
7990 @item v4sf __builtin_ia32_loadhps (v4sf, v2si *)
7991 Generates the @code{movhps} machine instruction as a load from memory.
7992 @item v4sf __builtin_ia32_loadlps (v4sf, v2si *)
7993 Generates the @code{movlps} machine instruction as a load from memory
7994 @item void __builtin_ia32_storehps (v4sf, v2si *)
7995 Generates the @code{movhps} machine instruction as a store to memory.
7996 @item void __builtin_ia32_storelps (v4sf, v2si *)
7997 Generates the @code{movlps} machine instruction as a store to memory.
7999 @item void __builtin_ia32_movntps (float *, v4sf)
8000 Generates the @code{movntps} machine instruction.
8001 @item int __builtin_ia32_movmskps (v4sf)
8002 Generates the @code{movntps} machine instruction.
8004 @item void __builtin_ia32_storeps1 (float *, v4sf)
8005 Generates the @code{movaps} machine instruction as a store to memory.
8006 Before storing, the value is modified with a @code{shufps} instruction
8007 so that the lowest of the four floating point elements is replicated
8008 across the entire vector that is stored.
8009 @item void __builtin_ia32_storerps (float *, v4sf)
8010 Generates the @code{movaps} machine instruction as a store to memory.
8011 Before storing, the value is modified with a @code{shufps} instruction
8012 so that the order of the four floating point elements in the vector is
8013 reversed.
8014 @item v4sf __builtin_ia32_loadps1 (float *)
8015 Generates a @code{movss} machine instruction to load a floating point
8016 value from memory, and a @code{shufps} instruction to replicate the
8017 loaded value across all four elements of the result vector.
8018 @item v4sf __builtin_ia32_loadrps (float *)
8019 Generates a @code{movaps} machine instruction to load a vector from
8020 memory, and a @code{shufps} instruction to reverse the order of the
8021 four floating point elements in the result vector.
8022 @item v4sf __builtin_ia32_setps (float, float, float, float)
8023 Constructs a vector from four single floating point values.  The return
8024 value is equal to the value that would result from storing the four
8025 arguments into consecutive memory locations and then executing a
8026 @code{movaps} to load the vector from memory.
8027 @item v4sf __builtin_ia32_setps1 (float)
8028 Constructs a vector from a single floating point value by replicating
8029 it across all four elements of the result vector.
8030 @end table
8032 @item -mpush-args
8033 @itemx -mno-push-args
8034 @opindex mpush-args
8035 @opindex mno-push-args
8036 Use PUSH operations to store outgoing parameters.  This method is shorter
8037 and usually equally fast as method using SUB/MOV operations and is enabled
8038 by default.  In some cases disabling it may improve performance because of
8039 improved scheduling and reduced dependencies.
8041 @item -maccumulate-outgoing-args
8042 @opindex maccumulate-outgoing-args
8043 If enabled, the maximum amount of space required for outgoing arguments will be
8044 computed in the function prologue.  This is faster on most modern CPUs
8045 because of reduced dependencies, improved scheduling and reduced stack usage
8046 when preferred stack boundary is not equal to 2.  The drawback is a notable
8047 increase in code size.  This switch implies @option{-mno-push-args}.
8049 @item -mthreads
8050 @opindex mthreads
8051 Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
8052 on thread-safe exception handling must compile and link all code with the
8053 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
8054 @option{-D_MT}; when linking, it links in a special thread helper library
8055 @option{-lmingwthrd} which cleans up per thread exception handling data.
8057 @item -mno-align-stringops
8058 @opindex mno-align-stringops
8059 Do not align destination of inlined string operations.  This switch reduces
8060 code size and improves performance in case the destination is already aligned,
8061 but gcc don't know about it.
8063 @item -minline-all-stringops
8064 @opindex minline-all-stringops
8065 By default GCC inlines string operations only when destination is known to be
8066 aligned at least to 4 byte boundary.  This enables more inlining, increase code
8067 size, but may improve performance of code that depends on fast memcpy, strlen
8068 and memset for short lengths.
8070 @item -momit-leaf-frame-pointer
8071 @opindex momit-leaf-frame-pointer
8072 Don't keep the frame pointer in a register for leaf functions.  This
8073 avoids the instructions to save, set up and restore frame pointers and
8074 makes an extra register available in leaf functions.  The option
8075 @option{-fomit-frame-pointer} removes the frame pointer for all functions
8076 which might make debugging harder.
8077 @end table
8079 These @samp{-m} switches are supported in addition to the above
8080 on AMD x86-64 processors in 64-bit environments.
8082 @table @gcctabopt
8083 @item -m32
8084 @itemx -m64
8085 @opindex m32
8086 @opindex m64
8087 Generate code for a 32-bit or 64-bit environment.
8088 The 32-bit environment sets int, long and pointer to 32 bits and
8089 generates code that runs on any i386 system.
8090 The 64-bit environment sets int to 32 bits and long and pointer
8091 to 64 bits and generates code for AMD's x86-64 architecture.
8093 @item -mno-red-zone
8094 @opindex no-red-zone
8095 Do not use a so called red zone for x86-64 code.  The red zone is mandated
8096 by the x86-64 ABI, it is a 128-byte area beyond the location of the
8097 stack pointer that will not be modified by signal or interrupt handlers
8098 and therefore can be used for temporary data without adjusting the stack
8099 pointer.  The flag @option{-mno-red-zone} disables this red zone.
8100 @end table
8102 @node HPPA Options
8103 @subsection HPPA Options
8104 @cindex HPPA Options
8106 These @samp{-m} options are defined for the HPPA family of computers:
8108 @table @gcctabopt
8109 @item -march=@var{architecture-type}
8110 @opindex march
8111 Generate code for the specified architecture.  The choices for
8112 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
8113 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
8114 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
8115 architecture option for your machine.  Code compiled for lower numbered
8116 architectures will run on higher numbered architectures, but not the
8117 other way around.
8119 PA 2.0 support currently requires gas snapshot 19990413 or later.  The
8120 next release of binutils (current is 2.9.1) will probably contain PA 2.0
8121 support.
8123 @item -mpa-risc-1-0
8124 @itemx -mpa-risc-1-1
8125 @itemx -mpa-risc-2-0
8126 @opindex mpa-risc-1-0
8127 @opindex mpa-risc-1-1
8128 @opindex mpa-risc-2-0
8129 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
8131 @item -mbig-switch
8132 @opindex mbig-switch
8133 Generate code suitable for big switch tables.  Use this option only if
8134 the assembler/linker complain about out of range branches within a switch
8135 table.
8137 @item -mjump-in-delay
8138 @opindex mjump-in-delay
8139 Fill delay slots of function calls with unconditional jump instructions
8140 by modifying the return pointer for the function call to be the target
8141 of the conditional jump.
8143 @item -mdisable-fpregs
8144 @opindex mdisable-fpregs
8145 Prevent floating point registers from being used in any manner.  This is
8146 necessary for compiling kernels which perform lazy context switching of
8147 floating point registers.  If you use this option and attempt to perform
8148 floating point operations, the compiler will abort.
8150 @item -mdisable-indexing
8151 @opindex mdisable-indexing
8152 Prevent the compiler from using indexing address modes.  This avoids some
8153 rather obscure problems when compiling MIG generated code under MACH@.
8155 @item -mno-space-regs
8156 @opindex mno-space-regs
8157 Generate code that assumes the target has no space registers.  This allows
8158 GCC to generate faster indirect calls and use unscaled index address modes.
8160 Such code is suitable for level 0 PA systems and kernels.
8162 @item -mfast-indirect-calls
8163 @opindex mfast-indirect-calls
8164 Generate code that assumes calls never cross space boundaries.  This
8165 allows GCC to emit code which performs faster indirect calls.
8167 This option will not work in the presence of shared libraries or nested
8168 functions.
8170 @item -mlong-load-store
8171 @opindex mlong-load-store
8172 Generate 3-instruction load and store sequences as sometimes required by
8173 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
8174 the HP compilers.
8176 @item -mportable-runtime
8177 @opindex mportable-runtime
8178 Use the portable calling conventions proposed by HP for ELF systems.
8180 @item -mgas
8181 @opindex mgas
8182 Enable the use of assembler directives only GAS understands.
8184 @item -mschedule=@var{cpu-type}
8185 @opindex mschedule
8186 Schedule code according to the constraints for the machine type
8187 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
8188 @samp{7100}, @samp{7100LC}, @samp{7200}, and @samp{8000}.  Refer to
8189 @file{/usr/lib/sched.models} on an HP-UX system to determine the
8190 proper scheduling option for your machine.
8192 @item -mlinker-opt
8193 @opindex mlinker-opt
8194 Enable the optimization pass in the HPUX linker.  Note this makes symbolic
8195 debugging impossible.  It also triggers a bug in the HPUX 8 and HPUX 9 linkers
8196 in which they give bogus error messages when linking some programs.
8198 @item -msoft-float
8199 @opindex msoft-float
8200 Generate output containing library calls for floating point.
8201 @strong{Warning:} the requisite libraries are not available for all HPPA
8202 targets.  Normally the facilities of the machine's usual C compiler are
8203 used, but this cannot be done directly in cross-compilation.  You must make
8204 your own arrangements to provide suitable library functions for
8205 cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
8206 does provide software floating point support.
8208 @option{-msoft-float} changes the calling convention in the output file;
8209 therefore, it is only useful if you compile @emph{all} of a program with
8210 this option.  In particular, you need to compile @file{libgcc.a}, the
8211 library that comes with GCC, with @option{-msoft-float} in order for
8212 this to work.
8213 @end table
8215 @node Intel 960 Options
8216 @subsection Intel 960 Options
8218 These @samp{-m} options are defined for the Intel 960 implementations:
8220 @table @gcctabopt
8221 @item -m@var{cpu-type}
8222 @opindex mka
8223 @opindex mkb
8224 @opindex mmc
8225 @opindex mca
8226 @opindex mcf
8227 @opindex msa
8228 @opindex msb
8229 Assume the defaults for the machine type @var{cpu-type} for some of
8230 the other options, including instruction scheduling, floating point
8231 support, and addressing modes.  The choices for @var{cpu-type} are
8232 @samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
8233 @samp{sa}, and @samp{sb}.
8234 The default is
8235 @samp{kb}.
8237 @item -mnumerics
8238 @itemx -msoft-float
8239 @opindex mnumerics
8240 @opindex msoft-float
8241 The @option{-mnumerics} option indicates that the processor does support
8242 floating-point instructions.  The @option{-msoft-float} option indicates
8243 that floating-point support should not be assumed.
8245 @item -mleaf-procedures
8246 @itemx -mno-leaf-procedures
8247 @opindex mleaf-procedures
8248 @opindex mno-leaf-procedures
8249 Do (or do not) attempt to alter leaf procedures to be callable with the
8250 @code{bal} instruction as well as @code{call}.  This will result in more
8251 efficient code for explicit calls when the @code{bal} instruction can be
8252 substituted by the assembler or linker, but less efficient code in other
8253 cases, such as calls via function pointers, or using a linker that doesn't
8254 support this optimization.
8256 @item -mtail-call
8257 @itemx -mno-tail-call
8258 @opindex mtail-call
8259 @opindex mno-tail-call
8260 Do (or do not) make additional attempts (beyond those of the
8261 machine-independent portions of the compiler) to optimize tail-recursive
8262 calls into branches.  You may not want to do this because the detection of
8263 cases where this is not valid is not totally complete.  The default is
8264 @option{-mno-tail-call}.
8266 @item -mcomplex-addr
8267 @itemx -mno-complex-addr
8268 @opindex mcomplex-addr
8269 @opindex mno-complex-addr
8270 Assume (or do not assume) that the use of a complex addressing mode is a
8271 win on this implementation of the i960.  Complex addressing modes may not
8272 be worthwhile on the K-series, but they definitely are on the C-series.
8273 The default is currently @option{-mcomplex-addr} for all processors except
8274 the CB and CC@.
8276 @item -mcode-align
8277 @itemx -mno-code-align
8278 @opindex mcode-align
8279 @opindex mno-code-align
8280 Align code to 8-byte boundaries for faster fetching (or don't bother).
8281 Currently turned on by default for C-series implementations only.
8283 @ignore
8284 @item -mclean-linkage
8285 @itemx -mno-clean-linkage
8286 @opindex mclean-linkage
8287 @opindex mno-clean-linkage
8288 These options are not fully implemented.
8289 @end ignore
8291 @item -mic-compat
8292 @itemx -mic2.0-compat
8293 @itemx -mic3.0-compat
8294 @opindex mic-compat
8295 @opindex mic2.0-compat
8296 @opindex mic3.0-compat
8297 Enable compatibility with iC960 v2.0 or v3.0.
8299 @item -masm-compat
8300 @itemx -mintel-asm
8301 @opindex masm-compat
8302 @opindex mintel-asm
8303 Enable compatibility with the iC960 assembler.
8305 @item -mstrict-align
8306 @itemx -mno-strict-align
8307 @opindex mstrict-align
8308 @opindex mno-strict-align
8309 Do not permit (do permit) unaligned accesses.
8311 @item -mold-align
8312 @opindex mold-align
8313 Enable structure-alignment compatibility with Intel's gcc release version
8314 1.3 (based on gcc 1.37).  This option implies @option{-mstrict-align}.
8316 @item -mlong-double-64
8317 @opindex mlong-double-64
8318 Implement type @samp{long double} as 64-bit floating point numbers.
8319 Without the option @samp{long double} is implemented by 80-bit
8320 floating point numbers.  The only reason we have it because there is
8321 no 128-bit @samp{long double} support in @samp{fp-bit.c} yet.  So it
8322 is only useful for people using soft-float targets.  Otherwise, we
8323 should recommend against use of it.
8325 @end table
8327 @node DEC Alpha Options
8328 @subsection DEC Alpha Options
8330 These @samp{-m} options are defined for the DEC Alpha implementations:
8332 @table @gcctabopt
8333 @item -mno-soft-float
8334 @itemx -msoft-float
8335 @opindex mno-soft-float
8336 @opindex msoft-float
8337 Use (do not use) the hardware floating-point instructions for
8338 floating-point operations.  When @option{-msoft-float} is specified,
8339 functions in @file{libgcc.a} will be used to perform floating-point
8340 operations.  Unless they are replaced by routines that emulate the
8341 floating-point operations, or compiled in such a way as to call such
8342 emulations routines, these routines will issue floating-point
8343 operations.   If you are compiling for an Alpha without floating-point
8344 operations, you must ensure that the library is built so as not to call
8345 them.
8347 Note that Alpha implementations without floating-point operations are
8348 required to have floating-point registers.
8350 @item -mfp-reg
8351 @itemx -mno-fp-regs
8352 @opindex mfp-reg
8353 @opindex mno-fp-regs
8354 Generate code that uses (does not use) the floating-point register set.
8355 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
8356 register set is not used, floating point operands are passed in integer
8357 registers as if they were integers and floating-point results are passed
8358 in $0 instead of $f0.  This is a non-standard calling sequence, so any
8359 function with a floating-point argument or return value called by code
8360 compiled with @option{-mno-fp-regs} must also be compiled with that
8361 option.
8363 A typical use of this option is building a kernel that does not use,
8364 and hence need not save and restore, any floating-point registers.
8366 @item -mieee
8367 @opindex mieee
8368 The Alpha architecture implements floating-point hardware optimized for
8369 maximum performance.  It is mostly compliant with the IEEE floating
8370 point standard.  However, for full compliance, software assistance is
8371 required.  This option generates code fully IEEE compliant code
8372 @emph{except} that the @var{inexact-flag} is not maintained (see below).
8373 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
8374 defined during compilation.  The resulting code is less efficient but is
8375 able to correctly support denormalized numbers and exceptional IEEE
8376 values such as not-a-number and plus/minus infinity.  Other Alpha
8377 compilers call this option @option{-ieee_with_no_inexact}.
8379 @item -mieee-with-inexact
8380 @opindex mieee-with-inexact
8381 This is like @option{-mieee} except the generated code also maintains
8382 the IEEE @var{inexact-flag}.  Turning on this option causes the
8383 generated code to implement fully-compliant IEEE math.  In addition to
8384 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
8385 macro.  On some Alpha implementations the resulting code may execute
8386 significantly slower than the code generated by default.  Since there is
8387 very little code that depends on the @var{inexact-flag}, you should
8388 normally not specify this option.  Other Alpha compilers call this
8389 option @option{-ieee_with_inexact}.
8391 @item -mfp-trap-mode=@var{trap-mode}
8392 @opindex mfp-trap-mode
8393 This option controls what floating-point related traps are enabled.
8394 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
8395 The trap mode can be set to one of four values:
8397 @table @samp
8398 @item n
8399 This is the default (normal) setting.  The only traps that are enabled
8400 are the ones that cannot be disabled in software (e.g., division by zero
8401 trap).
8403 @item u
8404 In addition to the traps enabled by @samp{n}, underflow traps are enabled
8405 as well.
8407 @item su
8408 Like @samp{su}, but the instructions are marked to be safe for software
8409 completion (see Alpha architecture manual for details).
8411 @item sui
8412 Like @samp{su}, but inexact traps are enabled as well.
8413 @end table
8415 @item -mfp-rounding-mode=@var{rounding-mode}
8416 @opindex mfp-rounding-mode
8417 Selects the IEEE rounding mode.  Other Alpha compilers call this option
8418 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
8421 @table @samp
8422 @item n
8423 Normal IEEE rounding mode.  Floating point numbers are rounded towards
8424 the nearest machine number or towards the even machine number in case
8425 of a tie.
8427 @item m
8428 Round towards minus infinity.
8430 @item c
8431 Chopped rounding mode.  Floating point numbers are rounded towards zero.
8433 @item d
8434 Dynamic rounding mode.  A field in the floating point control register
8435 (@var{fpcr}, see Alpha architecture reference manual) controls the
8436 rounding mode in effect.  The C library initializes this register for
8437 rounding towards plus infinity.  Thus, unless your program modifies the
8438 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
8439 @end table
8441 @item -mtrap-precision=@var{trap-precision}
8442 @opindex mtrap-precision
8443 In the Alpha architecture, floating point traps are imprecise.  This
8444 means without software assistance it is impossible to recover from a
8445 floating trap and program execution normally needs to be terminated.
8446 GCC can generate code that can assist operating system trap handlers
8447 in determining the exact location that caused a floating point trap.
8448 Depending on the requirements of an application, different levels of
8449 precisions can be selected:
8451 @table @samp
8452 @item p
8453 Program precision.  This option is the default and means a trap handler
8454 can only identify which program caused a floating point exception.
8456 @item f
8457 Function precision.  The trap handler can determine the function that
8458 caused a floating point exception.
8460 @item i
8461 Instruction precision.  The trap handler can determine the exact
8462 instruction that caused a floating point exception.
8463 @end table
8465 Other Alpha compilers provide the equivalent options called
8466 @option{-scope_safe} and @option{-resumption_safe}.
8468 @item -mieee-conformant
8469 @opindex mieee-conformant
8470 This option marks the generated code as IEEE conformant.  You must not
8471 use this option unless you also specify @option{-mtrap-precision=i} and either
8472 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
8473 is to emit the line @samp{.eflag 48} in the function prologue of the
8474 generated assembly file.  Under DEC Unix, this has the effect that
8475 IEEE-conformant math library routines will be linked in.
8477 @item -mbuild-constants
8478 @opindex mbuild-constants
8479 Normally GCC examines a 32- or 64-bit integer constant to
8480 see if it can construct it from smaller constants in two or three
8481 instructions.  If it cannot, it will output the constant as a literal and
8482 generate code to load it from the data segment at runtime.
8484 Use this option to require GCC to construct @emph{all} integer constants
8485 using code, even if it takes more instructions (the maximum is six).
8487 You would typically use this option to build a shared library dynamic
8488 loader.  Itself a shared library, it must relocate itself in memory
8489 before it can find the variables and constants in its own data segment.
8491 @item -malpha-as
8492 @itemx -mgas
8493 @opindex malpha-as
8494 @opindex mgas
8495 Select whether to generate code to be assembled by the vendor-supplied
8496 assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
8498 @item -mbwx
8499 @itemx -mno-bwx
8500 @itemx -mcix
8501 @itemx -mno-cix
8502 @itemx -mmax
8503 @itemx -mno-max
8504 @opindex mbwx
8505 @opindex mno-bwx
8506 @opindex mcix
8507 @opindex mno-cix
8508 @opindex mmax
8509 @opindex mno-max
8510 Indicate whether GCC should generate code to use the optional BWX,
8511 CIX, and MAX instruction sets.  The default is to use the instruction sets
8512 supported by the CPU type specified via @option{-mcpu=} option or that
8513 of the CPU on which GCC was built if none was specified.
8515 @item -mcpu=@var{cpu_type}
8516 @opindex mcpu
8517 Set the instruction set, register set, and instruction scheduling
8518 parameters for machine type @var{cpu_type}.  You can specify either the
8519 @samp{EV} style name or the corresponding chip number.  GCC
8520 supports scheduling parameters for the EV4 and EV5 family of processors
8521 and will choose the default values for the instruction set from
8522 the processor you specify.  If you do not specify a processor type,
8523 GCC will default to the processor on which the compiler was built.
8525 Supported values for @var{cpu_type} are
8527 @table @samp
8528 @item ev4
8529 @itemx 21064
8530 Schedules as an EV4 and has no instruction set extensions.
8532 @item ev5
8533 @itemx 21164
8534 Schedules as an EV5 and has no instruction set extensions.
8536 @item ev56
8537 @itemx 21164a
8538 Schedules as an EV5 and supports the BWX extension.
8540 @item pca56
8541 @itemx 21164pc
8542 @itemx 21164PC
8543 Schedules as an EV5 and supports the BWX and MAX extensions.
8545 @item ev6
8546 @itemx 21264
8547 Schedules as an EV5 (until Digital releases the scheduling parameters
8548 for the EV6) and supports the BWX, CIX, and MAX extensions.
8549 @end table
8551 @item -mmemory-latency=@var{time}
8552 @opindex mmemory-latency
8553 Sets the latency the scheduler should assume for typical memory
8554 references as seen by the application.  This number is highly
8555 dependent on the memory access patterns used by the application
8556 and the size of the external cache on the machine.
8558 Valid options for @var{time} are
8560 @table @samp
8561 @item @var{number}
8562 A decimal number representing clock cycles.
8564 @item L1
8565 @itemx L2
8566 @itemx L3
8567 @itemx main
8568 The compiler contains estimates of the number of clock cycles for
8569 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8570 (also called Dcache, Scache, and Bcache), as well as to main memory.
8571 Note that L3 is only valid for EV5.
8573 @end table
8574 @end table
8576 @node DEC Alpha/VMS Options
8577 @subsection DEC Alpha/VMS Options
8579 These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
8581 @table @gcctabopt
8582 @item -mvms-return-codes
8583 @opindex mvms-return-codes
8584 Return VMS condition codes from main.  The default is to return POSIX
8585 style condition (e.g.@ error) codes.
8586 @end table
8588 @node Clipper Options
8589 @subsection Clipper Options
8591 These @samp{-m} options are defined for the Clipper implementations:
8593 @table @gcctabopt
8594 @item -mc300
8595 @opindex mc300
8596 Produce code for a C300 Clipper processor.  This is the default.
8598 @item -mc400
8599 @opindex mc400
8600 Produce code for a C400 Clipper processor, i.e.@: use floating point
8601 registers f8--f15.
8602 @end table
8604 @node H8/300 Options
8605 @subsection H8/300 Options
8607 These @samp{-m} options are defined for the H8/300 implementations:
8609 @table @gcctabopt
8610 @item -mrelax
8611 @opindex mrelax
8612 Shorten some address references at link time, when possible; uses the
8613 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
8614 ld.info, Using ld}, for a fuller description.
8616 @item -mh
8617 @opindex mh
8618 Generate code for the H8/300H@.
8620 @item -ms
8621 @opindex ms
8622 Generate code for the H8/S@.
8624 @item -ms2600
8625 @opindex ms2600
8626 Generate code for the H8/S2600.  This switch must be used with @option{-ms}.
8628 @item -mint32
8629 @opindex mint32
8630 Make @code{int} data 32 bits by default.
8632 @item -malign-300
8633 @opindex malign-300
8634 On the H8/300H and H8/S, use the same alignment rules as for the H8/300.
8635 The default for the H8/300H and H8/S is to align longs and floats on 4
8636 byte boundaries.
8637 @option{-malign-300} causes them to be aligned on 2 byte boundaries.
8638 This option has no effect on the H8/300.
8639 @end table
8641 @node SH Options
8642 @subsection SH Options
8644 These @samp{-m} options are defined for the SH implementations:
8646 @table @gcctabopt
8647 @item -m1
8648 @opindex m1
8649 Generate code for the SH1.
8651 @item -m2
8652 @opindex m2
8653 Generate code for the SH2.
8655 @item -m3
8656 @opindex m3
8657 Generate code for the SH3.
8659 @item -m3e
8660 @opindex m3e
8661 Generate code for the SH3e.
8663 @item -m4-nofpu
8664 @opindex m4-nofpu
8665 Generate code for the SH4 without a floating-point unit.
8667 @item -m4-single-only
8668 @opindex m4-single-only
8669 Generate code for the SH4 with a floating-point unit that only
8670 supports single-precision arithmetic.
8672 @item -m4-single
8673 @opindex m4-single
8674 Generate code for the SH4 assuming the floating-point unit is in
8675 single-precision mode by default.
8677 @item -m4
8678 @opindex m4
8679 Generate code for the SH4.
8681 @item -mb
8682 @opindex mb
8683 Compile code for the processor in big endian mode.
8685 @item -ml
8686 @opindex ml
8687 Compile code for the processor in little endian mode.
8689 @item -mdalign
8690 @opindex mdalign
8691 Align doubles at 64-bit boundaries.  Note that this changes the calling
8692 conventions, and thus some functions from the standard C library will
8693 not work unless you recompile it first with @option{-mdalign}.
8695 @item -mrelax
8696 @opindex mrelax
8697 Shorten some address references at link time, when possible; uses the
8698 linker option @option{-relax}.
8700 @item -mbigtable
8701 @opindex mbigtable
8702 Use 32-bit offsets in @code{switch} tables.  The default is to use
8703 16-bit offsets.
8705 @item -mfmovd
8706 @opindex mfmovd
8707 Enable the use of the instruction @code{fmovd}.
8709 @item -mhitachi
8710 @opindex mhitachi
8711 Comply with the calling conventions defined by Hitachi.
8713 @item -mnomacsave
8714 @opindex mnomacsave
8715 Mark the @code{MAC} register as call-clobbered, even if
8716 @option{-mhitachi} is given.
8718 @item -mieee
8719 @opindex mieee
8720 Increase IEEE-compliance of floating-point code.
8722 @item -misize
8723 @opindex misize
8724 Dump instruction size and location in the assembly code.
8726 @item -mpadstruct
8727 @opindex mpadstruct
8728 This option is deprecated.  It pads structures to multiple of 4 bytes,
8729 which is incompatible with the SH ABI@.
8731 @item -mspace
8732 @opindex mspace
8733 Optimize for space instead of speed.  Implied by @option{-Os}.
8735 @item -mprefergot
8736 @opindex mprefergot
8737 When generating position-independent code, emit function calls using
8738 the Global Offset Table instead of the Procedure Linkage Table.
8740 @item -musermode
8741 @opindex musermode
8742 Generate a library function call to invalidate instruction cache
8743 entries, after fixing up a trampoline.  This library function call
8744 doesn't assume it can write to the whole memory address space.  This
8745 is the default when the target is @code{sh-*-linux*}.
8746 @end table
8748 @node System V Options
8749 @subsection Options for System V
8751 These additional options are available on System V Release 4 for
8752 compatibility with other compilers on those systems:
8754 @table @gcctabopt
8755 @item -G
8756 @opindex G
8757 Create a shared object.
8758 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
8760 @item -Qy
8761 @opindex Qy
8762 Identify the versions of each tool used by the compiler, in a
8763 @code{.ident} assembler directive in the output.
8765 @item -Qn
8766 @opindex Qn
8767 Refrain from adding @code{.ident} directives to the output file (this is
8768 the default).
8770 @item -YP,@var{dirs}
8771 @opindex YP
8772 Search the directories @var{dirs}, and no others, for libraries
8773 specified with @option{-l}.
8775 @item -Ym,@var{dir}
8776 @opindex Ym
8777 Look in the directory @var{dir} to find the M4 preprocessor.
8778 The assembler uses this option.
8779 @c This is supposed to go with a -Yd for predefined M4 macro files, but
8780 @c the generic assembler that comes with Solaris takes just -Ym.
8781 @end table
8783 @node TMS320C3x/C4x Options
8784 @subsection TMS320C3x/C4x Options
8785 @cindex TMS320C3x/C4x Options
8787 These @samp{-m} options are defined for TMS320C3x/C4x implementations:
8789 @table @gcctabopt
8791 @item -mcpu=@var{cpu_type}
8792 @opindex mcpu
8793 Set the instruction set, register set, and instruction scheduling
8794 parameters for machine type @var{cpu_type}.  Supported values for
8795 @var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
8796 @samp{c44}.  The default is @samp{c40} to generate code for the
8797 TMS320C40.
8799 @item -mbig-memory
8800 @item -mbig
8801 @itemx -msmall-memory
8802 @itemx -msmall
8803 @opindex mbig-memory
8804 @opindex mbig
8805 @opindex msmall-memory
8806 @opindex msmall
8807 Generates code for the big or small memory model.  The small memory
8808 model assumed that all data fits into one 64K word page.  At run-time
8809 the data page (DP) register must be set to point to the 64K page
8810 containing the .bss and .data program sections.  The big memory model is
8811 the default and requires reloading of the DP register for every direct
8812 memory access.
8814 @item -mbk
8815 @itemx -mno-bk
8816 @opindex mbk
8817 @opindex mno-bk
8818 Allow (disallow) allocation of general integer operands into the block
8819 count register BK@.
8821 @item -mdb
8822 @itemx -mno-db
8823 @opindex mdb
8824 @opindex mno-db
8825 Enable (disable) generation of code using decrement and branch,
8826 DBcond(D), instructions.  This is enabled by default for the C4x.  To be
8827 on the safe side, this is disabled for the C3x, since the maximum
8828 iteration count on the C3x is @math{2^23 + 1} (but who iterates loops more than
8829 @math{2^23} times on the C3x?).  Note that GCC will try to reverse a loop so
8830 that it can utilise the decrement and branch instruction, but will give
8831 up if there is more than one memory reference in the loop.  Thus a loop
8832 where the loop counter is decremented can generate slightly more
8833 efficient code, in cases where the RPTB instruction cannot be utilised.
8835 @item -mdp-isr-reload
8836 @itemx -mparanoid
8837 @opindex mdp-isr-reload
8838 @opindex mparanoid
8839 Force the DP register to be saved on entry to an interrupt service
8840 routine (ISR), reloaded to point to the data section, and restored on
8841 exit from the ISR@.  This should not be required unless someone has
8842 violated the small memory model by modifying the DP register, say within
8843 an object library.
8845 @item -mmpyi
8846 @itemx -mno-mpyi
8847 @opindex mmpyi
8848 @opindex mno-mpyi
8849 For the C3x use the 24-bit MPYI instruction for integer multiplies
8850 instead of a library call to guarantee 32-bit results.  Note that if one
8851 of the operands is a constant, then the multiplication will be performed
8852 using shifts and adds.  If the @option{-mmpyi} option is not specified for the C3x,
8853 then squaring operations are performed inline instead of a library call.
8855 @item -mfast-fix
8856 @itemx -mno-fast-fix
8857 @opindex mfast-fix
8858 @opindex mno-fast-fix
8859 The C3x/C4x FIX instruction to convert a floating point value to an
8860 integer value chooses the nearest integer less than or equal to the
8861 floating point value rather than to the nearest integer.  Thus if the
8862 floating point number is negative, the result will be incorrectly
8863 truncated an additional code is necessary to detect and correct this
8864 case.  This option can be used to disable generation of the additional
8865 code required to correct the result.
8867 @item -mrptb
8868 @itemx -mno-rptb
8869 @opindex mrptb
8870 @opindex mno-rptb
8871 Enable (disable) generation of repeat block sequences using the RPTB
8872 instruction for zero overhead looping.  The RPTB construct is only used
8873 for innermost loops that do not call functions or jump across the loop
8874 boundaries.  There is no advantage having nested RPTB loops due to the
8875 overhead required to save and restore the RC, RS, and RE registers.
8876 This is enabled by default with @option{-O2}.
8878 @item -mrpts=@var{count}
8879 @itemx -mno-rpts
8880 @opindex mrpts
8881 @opindex mno-rpts
8882 Enable (disable) the use of the single instruction repeat instruction
8883 RPTS@.  If a repeat block contains a single instruction, and the loop
8884 count can be guaranteed to be less than the value @var{count}, GCC will
8885 emit a RPTS instruction instead of a RPTB@.  If no value is specified,
8886 then a RPTS will be emitted even if the loop count cannot be determined
8887 at compile time.  Note that the repeated instruction following RPTS does
8888 not have to be reloaded from memory each iteration, thus freeing up the
8889 CPU buses for operands.  However, since interrupts are blocked by this
8890 instruction, it is disabled by default.
8892 @item -mloop-unsigned
8893 @itemx -mno-loop-unsigned
8894 @opindex mloop-unsigned
8895 @opindex mno-loop-unsigned
8896 The maximum iteration count when using RPTS and RPTB (and DB on the C40)
8897 is @math{2^31 + 1} since these instructions test if the iteration count is
8898 negative to terminate the loop.  If the iteration count is unsigned
8899 there is a possibility than the @math{2^31 + 1} maximum iteration count may be
8900 exceeded.  This switch allows an unsigned iteration count.
8902 @item -mti
8903 @opindex mti
8904 Try to emit an assembler syntax that the TI assembler (asm30) is happy
8905 with.  This also enforces compatibility with the API employed by the TI
8906 C3x C compiler.  For example, long doubles are passed as structures
8907 rather than in floating point registers.
8909 @item -mregparm
8910 @itemx -mmemparm
8911 @opindex mregparm
8912 @opindex mmemparm
8913 Generate code that uses registers (stack) for passing arguments to functions.
8914 By default, arguments are passed in registers where possible rather
8915 than by pushing arguments on to the stack.
8917 @item -mparallel-insns
8918 @itemx -mno-parallel-insns
8919 @opindex mparallel-insns
8920 @opindex mno-parallel-insns
8921 Allow the generation of parallel instructions.  This is enabled by
8922 default with @option{-O2}.
8924 @item -mparallel-mpy
8925 @itemx -mno-parallel-mpy
8926 @opindex mparallel-mpy
8927 @opindex mno-parallel-mpy
8928 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
8929 provided @option{-mparallel-insns} is also specified.  These instructions have
8930 tight register constraints which can pessimize the code generation
8931 of large functions.
8933 @end table
8935 @node V850 Options
8936 @subsection V850 Options
8937 @cindex V850 Options
8939 These @samp{-m} options are defined for V850 implementations:
8941 @table @gcctabopt
8942 @item -mlong-calls
8943 @itemx -mno-long-calls
8944 @opindex mlong-calls
8945 @opindex mno-long-calls
8946 Treat all calls as being far away (near).  If calls are assumed to be
8947 far away, the compiler will always load the functions address up into a
8948 register, and call indirect through the pointer.
8950 @item -mno-ep
8951 @itemx -mep
8952 @opindex mno-ep
8953 @opindex mep
8954 Do not optimize (do optimize) basic blocks that use the same index
8955 pointer 4 or more times to copy pointer into the @code{ep} register, and
8956 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
8957 option is on by default if you optimize.
8959 @item -mno-prolog-function
8960 @itemx -mprolog-function
8961 @opindex mno-prolog-function
8962 @opindex mprolog-function
8963 Do not use (do use) external functions to save and restore registers at
8964 the prolog and epilog of a function.  The external functions are slower,
8965 but use less code space if more than one function saves the same number
8966 of registers.  The @option{-mprolog-function} option is on by default if
8967 you optimize.
8969 @item -mspace
8970 @opindex mspace
8971 Try to make the code as small as possible.  At present, this just turns
8972 on the @option{-mep} and @option{-mprolog-function} options.
8974 @item -mtda=@var{n}
8975 @opindex mtda
8976 Put static or global variables whose size is @var{n} bytes or less into
8977 the tiny data area that register @code{ep} points to.  The tiny data
8978 area can hold up to 256 bytes in total (128 bytes for byte references).
8980 @item -msda=@var{n}
8981 @opindex msda
8982 Put static or global variables whose size is @var{n} bytes or less into
8983 the small data area that register @code{gp} points to.  The small data
8984 area can hold up to 64 kilobytes.
8986 @item -mzda=@var{n}
8987 @opindex mzda
8988 Put static or global variables whose size is @var{n} bytes or less into
8989 the first 32 kilobytes of memory.
8991 @item -mv850
8992 @opindex mv850
8993 Specify that the target processor is the V850.
8995 @item -mbig-switch
8996 @opindex mbig-switch
8997 Generate code suitable for big switch tables.  Use this option only if
8998 the assembler/linker complain about out of range branches within a switch
8999 table.
9000 @end table
9002 @node ARC Options
9003 @subsection ARC Options
9004 @cindex ARC Options
9006 These options are defined for ARC implementations:
9008 @table @gcctabopt
9009 @item -EL
9010 @opindex EL
9011 Compile code for little endian mode.  This is the default.
9013 @item -EB
9014 @opindex EB
9015 Compile code for big endian mode.
9017 @item -mmangle-cpu
9018 @opindex mmangle-cpu
9019 Prepend the name of the cpu to all public symbol names.
9020 In multiple-processor systems, there are many ARC variants with different
9021 instruction and register set characteristics.  This flag prevents code
9022 compiled for one cpu to be linked with code compiled for another.
9023 No facility exists for handling variants that are ``almost identical''.
9024 This is an all or nothing option.
9026 @item -mcpu=@var{cpu}
9027 @opindex mcpu
9028 Compile code for ARC variant @var{cpu}.
9029 Which variants are supported depend on the configuration.
9030 All variants support @option{-mcpu=base}, this is the default.
9032 @item -mtext=@var{text-section}
9033 @itemx -mdata=@var{data-section}
9034 @itemx -mrodata=@var{readonly-data-section}
9035 @opindex mtext
9036 @opindex mdata
9037 @opindex mrodata
9038 Put functions, data, and readonly data in @var{text-section},
9039 @var{data-section}, and @var{readonly-data-section} respectively
9040 by default.  This can be overridden with the @code{section} attribute.
9041 @xref{Variable Attributes}.
9043 @end table
9045 @node NS32K Options
9046 @subsection NS32K Options
9047 @cindex NS32K options
9049 These are the @samp{-m} options defined for the 32000 series.  The default
9050 values for these options depends on which style of 32000 was selected when
9051 the compiler was configured; the defaults for the most common choices are
9052 given below.
9054 @table @gcctabopt
9055 @item -m32032
9056 @itemx -m32032
9057 @opindex m32032
9058 @opindex m32032
9059 Generate output for a 32032.  This is the default
9060 when the compiler is configured for 32032 and 32016 based systems.
9062 @item -m32332
9063 @itemx -m32332
9064 @opindex m32332
9065 @opindex m32332
9066 Generate output for a 32332.  This is the default
9067 when the compiler is configured for 32332-based systems.
9069 @item -m32532
9070 @itemx -m32532
9071 @opindex m32532
9072 @opindex m32532
9073 Generate output for a 32532.  This is the default
9074 when the compiler is configured for 32532-based systems.
9076 @item -m32081
9077 @opindex m32081
9078 Generate output containing 32081 instructions for floating point.
9079 This is the default for all systems.
9081 @item -m32381
9082 @opindex m32381
9083 Generate output containing 32381 instructions for floating point.  This
9084 also implies @option{-m32081}.  The 32381 is only compatible with the 32332
9085 and 32532 cpus.  This is the default for the pc532-netbsd configuration.
9087 @item -mmulti-add
9088 @opindex mmulti-add
9089 Try and generate multiply-add floating point instructions @code{polyF}
9090 and @code{dotF}.  This option is only available if the @option{-m32381}
9091 option is in effect.  Using these instructions requires changes to
9092 register allocation which generally has a negative impact on
9093 performance.  This option should only be enabled when compiling code
9094 particularly likely to make heavy use of multiply-add instructions.
9096 @item -mnomulti-add
9097 @opindex mnomulti-add
9098 Do not try and generate multiply-add floating point instructions
9099 @code{polyF} and @code{dotF}.  This is the default on all platforms.
9101 @item -msoft-float
9102 @opindex msoft-float
9103 Generate output containing library calls for floating point.
9104 @strong{Warning:} the requisite libraries may not be available.
9106 @item -mnobitfield
9107 @opindex mnobitfield
9108 Do not use the bit-field instructions.  On some machines it is faster to
9109 use shifting and masking operations.  This is the default for the pc532.
9111 @item -mbitfield
9112 @opindex mbitfield
9113 Do use the bit-field instructions.  This is the default for all platforms
9114 except the pc532.
9116 @item -mrtd
9117 @opindex mrtd
9118 Use a different function-calling convention, in which functions
9119 that take a fixed number of arguments return pop their
9120 arguments on return with the @code{ret} instruction.
9122 This calling convention is incompatible with the one normally
9123 used on Unix, so you cannot use it if you need to call libraries
9124 compiled with the Unix compiler.
9126 Also, you must provide function prototypes for all functions that
9127 take variable numbers of arguments (including @code{printf});
9128 otherwise incorrect code will be generated for calls to those
9129 functions.
9131 In addition, seriously incorrect code will result if you call a
9132 function with too many arguments.  (Normally, extra arguments are
9133 harmlessly ignored.)
9135 This option takes its name from the 680x0 @code{rtd} instruction.
9138 @item -mregparam
9139 @opindex mregparam
9140 Use a different function-calling convention where the first two arguments
9141 are passed in registers.
9143 This calling convention is incompatible with the one normally
9144 used on Unix, so you cannot use it if you need to call libraries
9145 compiled with the Unix compiler.
9147 @item -mnoregparam
9148 @opindex mnoregparam
9149 Do not pass any arguments in registers.  This is the default for all
9150 targets.
9152 @item -msb
9153 @opindex msb
9154 It is OK to use the sb as an index register which is always loaded with
9155 zero.  This is the default for the pc532-netbsd target.
9157 @item -mnosb
9158 @opindex mnosb
9159 The sb register is not available for use or has not been initialized to
9160 zero by the run time system.  This is the default for all targets except
9161 the pc532-netbsd.  It is also implied whenever @option{-mhimem} or
9162 @option{-fpic} is set.
9164 @item -mhimem
9165 @opindex mhimem
9166 Many ns32000 series addressing modes use displacements of up to 512MB@.
9167 If an address is above 512MB then displacements from zero can not be used.
9168 This option causes code to be generated which can be loaded above 512MB@.
9169 This may be useful for operating systems or ROM code.
9171 @item -mnohimem
9172 @opindex mnohimem
9173 Assume code will be loaded in the first 512MB of virtual address space.
9174 This is the default for all platforms.
9177 @end table
9179 @node AVR Options
9180 @subsection AVR Options
9181 @cindex AVR Options
9183 These options are defined for AVR implementations:
9185 @table @gcctabopt
9186 @item -mmcu=@var{mcu}
9187 @opindex mmcu
9188 Specify ATMEL AVR instruction set or MCU type.
9190 Instruction set avr1 is for the minimal AVR core, not supported by the C
9191 compiler, only for assembler programs (MCU types: at90s1200, attiny10,
9192 attiny11, attiny12, attiny15, attiny28).
9194 Instruction set avr2 (default) is for the classic AVR core with up to
9195 8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
9196 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
9197 at90c8534, at90s8535).
9199 Instruction set avr3 is for the classic AVR core with up to 128K program
9200 memory space (MCU types: atmega103, atmega603).
9202 Instruction set avr4 is for the enhanced AVR core with up to 8K program
9203 memory space (MCU types: atmega83, atmega85).
9205 Instruction set avr5 is for the enhanced AVR core with up to 128K program
9206 memory space (MCU types: atmega161, atmega163, atmega32, at94k).
9208 @item -msize
9209 @opindex msize
9210 Output instruction sizes to the asm file.
9212 @item -minit-stack=@var{N}
9213 @opindex minit-stack
9214 Specify the initial stack address, which may be a symbol or numeric value,
9215 @samp{__stack} is the default.
9217 @item -mno-interrupts
9218 @opindex mno-interrupts
9219 Generated code is not compatible with hardware interrupts.
9220 Code size will be smaller.
9222 @item -mcall-prologues
9223 @opindex mcall-prologues
9224 Functions prologues/epilogues expanded as call to appropriate
9225 subroutines.  Code size will be smaller.
9227 @item -mno-tablejump
9228 @opindex mno-tablejump
9229 Do not generate tablejump insns which sometimes increase code size.
9231 @item -mtiny-stack
9232 @opindex mtiny-stack
9233 Change only the low 8 bits of the stack pointer.
9234 @end table
9236 @node MCore Options
9237 @subsection MCore Options
9238 @cindex MCore options
9240 These are the @samp{-m} options defined for the Motorola M*Core
9241 processors.
9243 @table @gcctabopt
9245 @item -mhardlit
9246 @itemx -mhardlit
9247 @itemx -mno-hardlit
9248 @opindex mhardlit
9249 @opindex mhardlit
9250 @opindex mno-hardlit
9251 Inline constants into the code stream if it can be done in two
9252 instructions or less.
9254 @item -mdiv
9255 @itemx -mdiv
9256 @itemx -mno-div
9257 @opindex mdiv
9258 @opindex mdiv
9259 @opindex mno-div
9260 Use the divide instruction.  (Enabled by default).
9262 @item -mrelax-immediate
9263 @itemx -mrelax-immediate
9264 @itemx -mno-relax-immediate
9265 @opindex mrelax-immediate
9266 @opindex mrelax-immediate
9267 @opindex mno-relax-immediate
9268 Allow arbitrary sized immediates in bit operations.
9270 @item -mwide-bitfields
9271 @itemx -mwide-bitfields
9272 @itemx -mno-wide-bitfields
9273 @opindex mwide-bitfields
9274 @opindex mwide-bitfields
9275 @opindex mno-wide-bitfields
9276 Always treat bit-fields as int-sized.
9278 @item -m4byte-functions
9279 @itemx -m4byte-functions
9280 @itemx -mno-4byte-functions
9281 @opindex m4byte-functions
9282 @opindex m4byte-functions
9283 @opindex mno-4byte-functions
9284 Force all functions to be aligned to a four byte boundary.
9286 @item -mcallgraph-data
9287 @itemx -mcallgraph-data
9288 @itemx -mno-callgraph-data
9289 @opindex mcallgraph-data
9290 @opindex mcallgraph-data
9291 @opindex mno-callgraph-data
9292 Emit callgraph information.
9294 @item -mslow-bytes
9295 @itemx -mslow-bytes
9296 @itemx -mno-slow-bytes
9297 @opindex mslow-bytes
9298 @opindex mslow-bytes
9299 @opindex mno-slow-bytes
9300 Prefer word access when reading byte quantities.
9302 @item -mlittle-endian
9303 @itemx -mlittle-endian
9304 @itemx -mbig-endian
9305 @opindex mlittle-endian
9306 @opindex mlittle-endian
9307 @opindex mbig-endian
9308 Generate code for a little endian target.
9310 @item -m210
9311 @itemx -m210
9312 @itemx -m340
9313 @opindex m210
9314 @opindex m210
9315 @opindex m340
9316 Generate code for the 210 processor.
9317 @end table
9319 @node IA-64 Options
9320 @subsection IA-64 Options
9321 @cindex IA-64 Options
9323 These are the @samp{-m} options defined for the Intel IA-64 architecture.
9325 @table @gcctabopt
9326 @item -mbig-endian
9327 @opindex mbig-endian
9328 Generate code for a big endian target.  This is the default for HPUX@.
9330 @item -mlittle-endian
9331 @opindex mlittle-endian
9332 Generate code for a little endian target.  This is the default for AIX5
9333 and Linux.
9335 @item -mgnu-as
9336 @itemx -mno-gnu-as
9337 @opindex mgnu-as
9338 @opindex mno-gnu-as
9339 Generate (or don't) code for the GNU assembler.  This is the default.
9340 @c Also, this is the default if the configure option @option{--with-gnu-as}
9341 @c is used.
9343 @item -mgnu-ld
9344 @itemx -mno-gnu-ld
9345 @opindex mgnu-ld
9346 @opindex mno-gnu-ld
9347 Generate (or don't) code for the GNU linker.  This is the default.
9348 @c Also, this is the default if the configure option @option{--with-gnu-ld}
9349 @c is used.
9351 @item -mno-pic
9352 @opindex mno-pic
9353 Generate code that does not use a global pointer register.  The result
9354 is not position independent code, and violates the IA-64 ABI@.
9356 @item -mvolatile-asm-stop
9357 @itemx -mno-volatile-asm-stop
9358 @opindex mvolatile-asm-stop
9359 @opindex mno-volatile-asm-stop
9360 Generate (or don't) a stop bit immediately before and after volatile asm
9361 statements.
9363 @item -mb-step
9364 @opindex mb-step
9365 Generate code that works around Itanium B step errata.
9367 @item -mregister-names
9368 @itemx -mno-register-names
9369 @opindex mregister-names
9370 @opindex mno-register-names
9371 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
9372 the stacked registers.  This may make assembler output more readable.
9374 @item -mno-sdata
9375 @itemx -msdata
9376 @opindex mno-sdata
9377 @opindex msdata
9378 Disable (or enable) optimizations that use the small data section.  This may
9379 be useful for working around optimizer bugs.
9381 @item -mconstant-gp
9382 @opindex mconstant-gp
9383 Generate code that uses a single constant global pointer value.  This is
9384 useful when compiling kernel code.
9386 @item -mauto-pic
9387 @opindex mauto-pic
9388 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
9389 This is useful when compiling firmware code.
9391 @item -minline-divide-min-latency
9392 @opindex minline-divide-min-latency
9393 Generate code for inline divides using the minimum latency algorithm.
9395 @item -minline-divide-max-throughput
9396 @opindex minline-divide-max-throughput
9397 Generate code for inline divides using the maximum throughput algorithm.
9399 @item -mno-dwarf2-asm
9400 @itemx -mdwarf2-asm
9401 @opindex mno-dwarf2-asm
9402 @opindex mdwarf2-asm
9403 Don't (or do) generate assembler code for the DWARF2 line number debugging
9404 info.  This may be useful when not using the GNU assembler.
9406 @item -mfixed-range=@var{register-range}
9407 @opindex mfixed-range
9408 Generate code treating the given register range as fixed registers.
9409 A fixed register is one that the register allocator can not use.  This is
9410 useful when compiling kernel code.  A register range is specified as
9411 two registers separated by a dash.  Multiple register ranges can be
9412 specified separated by a comma.
9413 @end table
9415 @node D30V Options
9416 @subsection D30V Options
9417 @cindex D30V Options
9419 These @samp{-m} options are defined for D30V implementations:
9421 @table @gcctabopt
9422 @item -mextmem
9423 @opindex mextmem
9424 Link the @samp{.text}, @samp{.data}, @samp{.bss}, @samp{.strings},
9425 @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections into external
9426 memory, which starts at location @code{0x80000000}.
9428 @item -mextmemory
9429 @opindex mextmemory
9430 Same as the @option{-mextmem} switch.
9432 @item -monchip
9433 @opindex monchip
9434 Link the @samp{.text} section into onchip text memory, which starts at
9435 location @code{0x0}.  Also link @samp{.data}, @samp{.bss},
9436 @samp{.strings}, @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections
9437 into onchip data memory, which starts at location @code{0x20000000}.
9439 @item -mno-asm-optimize
9440 @itemx -masm-optimize
9441 @opindex mno-asm-optimize
9442 @opindex masm-optimize
9443 Disable (enable) passing @option{-O} to the assembler when optimizing.
9444 The assembler uses the @option{-O} option to automatically parallelize
9445 adjacent short instructions where possible.
9447 @item -mbranch-cost=@var{n}
9448 @opindex mbranch-cost
9449 Increase the internal costs of branches to @var{n}.  Higher costs means
9450 that the compiler will issue more instructions to avoid doing a branch.
9451 The default is 2.
9453 @item -mcond-exec=@var{n}
9454 @opindex mcond-exec
9455 Specify the maximum number of conditionally executed instructions that
9456 replace a branch.  The default is 4.
9457 @end table
9459 @node S/390 and zSeries Options
9460 @subsection S/390 and zSeries Options
9461 @cindex S/390 and zSeries Options
9463 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
9465 @table @gcctabopt
9466 @item -mhard-float
9467 @itemx -msoft-float
9468 @opindex mhard-float
9469 @opindex msoft-float
9470 Use (do not use) the hardware floating-point instructions and registers
9471 for floating-point operations.  When @option{-msoft-float} is specified,
9472 functions in @file{libgcc.a} will be used to perform floating-point
9473 operations.  When @option{-mhard-float} is specified, the compiler
9474 generates IEEE floating-point instructions.  This is the default.
9476 @item -mbackchain
9477 @itemx -mno-backchain
9478 @opindex mbackchain
9479 @opindex mno-backchain
9480 Generate (or do not generate) code which maintains an explicit 
9481 backchain within the stack frame that points to the caller's frame.
9482 This is currently needed to allow debugging.  The default is to
9483 generate the backchain.
9485 @item -msmall-exec
9486 @itemx -mno-small-exec
9487 @opindex msmall-exec
9488 @opindex mno-small-exec
9489 Generate (or do not generate) code using the @code{bras} instruction 
9490 to do subroutine calls. 
9491 This only works reliably if the total executable size does not
9492 exceed 64k.  The default is to use the @code{basr} instruction instead,
9493 which does not have this limitation.
9495 @item -m64
9496 @itemx -m31
9497 @opindex m64
9498 @opindex m31
9499 When @option{-m31} is specified, generate code compliant to the
9500 Linux for S/390 ABI@.  When @option{-m64} is specified, generate
9501 code compliant to the Linux for zSeries ABI@.  This allows GCC in
9502 particular to generate 64-bit instructions.  For the @samp{s390}
9503 targets, the default is @option{-m31}, while the @samp{s390x} 
9504 targets default to @option{-m64}.
9506 @item -mmvcle
9507 @itemx -mno-mvcle
9508 @opindex mmvcle
9509 @opindex mno-mvcle
9510 Generate (or do not generate) code using the @code{mvcle} instruction 
9511 to perform block moves.  When @option{-mno-mvcle} is specifed,
9512 use a @code{mvc} loop instead.  This is the default.
9514 @item -mdebug
9515 @itemx -mno-debug
9516 @opindex mdebug
9517 @opindex mno-debug
9518 Print (or do not print) additional debug information when compiling.
9519 The default is to not print debug information.
9521 @end table
9523 @node CRIS Options
9524 @subsection CRIS Options
9525 @cindex CRIS Options
9527 These options are defined specifically for the CRIS ports.
9529 @table @gcctabopt
9530 @item -march=@var{architecture-type}
9531 @itemx -mcpu=@var{architecture-type}
9532 @opindex march
9533 @opindex mcpu
9534 Generate code for the specified architecture.  The choices for
9535 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
9536 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX.
9537 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
9538 @samp{v10}.
9540 @item -mtune=@var{architecture-type}
9541 @opindex mtune
9542 Tune to @var{architecture-type} everything applicable about the generated
9543 code, except for the ABI and the set of available instructions.  The
9544 choices for @var{architecture-type} are the same as for
9545 @option{-march=@var{architecture-type}}.
9547 @item -mmax-stack-frame=@var{n}
9548 @opindex mmax-stack-frame
9549 Warn when the stack frame of a function exceeds @var{n} bytes.
9551 @item -melinux-stacksize=@var{n}
9552 @opindex melinux-stacksize
9553 Only available with the @samp{cris-axis-aout} target.  Arranges for
9554 indications in the program to the kernel loader that the stack of the
9555 program should be set to @var{n} bytes.
9557 @item -metrax4
9558 @itemx -metrax100
9559 @opindex metrax4
9560 @opindex metrax100
9561 The options @option{-metrax4} and @option{-metrax100} are synonyms for
9562 @option{-march=v3} and @option{-march=v8} respectively.
9564 @item -mpdebug
9565 @opindex mpdebug
9566 Enable CRIS-specific verbose debug-related information in the assembly
9567 code.  This option also has the effect to turn off the @samp{#NO_APP}
9568 formatted-code indicator to the assembler at the beginning of the
9569 assembly file.
9571 @item -mcc-init
9572 @opindex mcc-init
9573 Do not use condition-code results from previous instruction; always emit
9574 compare and test instructions before use of condition codes.
9576 @item -mno-side-effects
9577 @opindex mno-side-effects
9578 Do not emit instructions with side-effects in addressing modes other than
9579 post-increment.
9581 @item -mstack-align
9582 @itemx -mno-stack-align
9583 @itemx -mdata-align
9584 @itemx -mno-data-align
9585 @itemx -mconst-align
9586 @itemx -mno-const-align
9587 @opindex mstack-align
9588 @opindex mno-stack-align
9589 @opindex mdata-align
9590 @opindex mno-data-align
9591 @opindex mconst-align
9592 @opindex mno-const-align
9593 These options (no-options) arranges (eliminate arrangements) for the
9594 stack-frame, individual data and constants to be aligned for the maximum
9595 single data access size for the chosen CPU model.  The default is to
9596 arrange for 32-bit alignment.  ABI details such as structure layout are
9597 not affected by these options.
9599 @item -m32-bit
9600 @itemx -m16-bit
9601 @itemx -m8-bit
9602 @opindex m32-bit
9603 @opindex m16-bit
9604 @opindex m8-bit
9605 Similar to the stack- data- and const-align options above, these options
9606 arrange for stack-frame, writable data and constants to all be 32-bit,
9607 16-bit or 8-bit aligned.  The default is 32-bit alignment.
9609 @item -mno-prologue-epilogue
9610 @itemx -mprologue-epilogue
9611 @opindex mno-prologue-epilogue
9612 @opindex mprologue-epilogue
9613 With @option{-mno-prologue-epilogue}, the normal function prologue and
9614 epilogue that sets up the stack-frame are omitted and no return
9615 instructions or return sequences are generated in the code.  Use this
9616 option only together with visual inspection of the compiled code: no
9617 warnings or errors are generated when call-saved registers must be saved,
9618 or storage for local variable needs to be allocated.
9620 @item -mno-gotplt
9621 @itemx -mgotplt
9622 @opindex mno-gotplt
9623 @opindex mgotplt
9624 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
9625 instruction sequences that load addresses for functions from the PLT part
9626 of the GOT rather than (traditional on other architectures) calls to the
9627 PLT.  The default is @option{-mgotplt}.
9629 @item -maout
9630 @opindex maout
9631 Legacy no-op option only recognized with the cris-axis-aout target.
9633 @item -melf
9634 @opindex melf
9635 Legacy no-op option only recognized with the cris-axis-elf and
9636 cris-axis-linux-gnu targets.
9638 @item -melinux
9639 @opindex melinux
9640 Only recognized with the cris-axis-aout target, where it selects a
9641 GNU/linux-like multilib, include files and instruction set for
9642 @option{-march=v8}.
9644 @item -mlinux
9645 @opindex mlinux
9646 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
9648 @item -sim
9649 @opindex sim
9650 This option, recognized for the cris-axis-aout and cris-axis-elf arranges
9651 to link with input-output functions from a simulator library.  Code,
9652 initialized data and zero-initialized data are allocated consecutively.
9654 @item -sim2
9655 @opindex sim2
9656 Like @option{-sim}, but pass linker options to locate initialized data at
9657 0x40000000 and zero-initialized data at 0x80000000.
9658 @end table
9660 @node MMIX Options
9661 @subsection MMIX Options
9662 @cindex MMIX Options
9664 These options are defined for the MMIX:
9666 @table @code
9667 @item -mlibfuncs
9668 @itemx -mno-libfuncs
9669 Specify that intrinsic library functions are being compiled, passing all
9670 values in registers, no matter the size.
9672 @item -mepsilon
9673 @itemx -mno-epsilon
9674 Generate floating-point comparison instructions that compare with respect
9675 to the @code{rE} epsilon register.
9677 @item -mabi=mmixware
9678 @itemx -mabi=gnu
9679 Generate code that passes function parameters and return values that (in
9680 the called function) are seen as registers @code{$0} and up, as opposed to
9681 the GNU ABI which uses global registers @code{$231} and up.
9683 @item -mzero-extend
9684 @item -mno-zero-extend
9685 When reading data from memory in sizes shorter than 64 bits, use (do not
9686 use) zero-extending load instructions by default, rather than
9687 sign-extending ones.
9689 @item -mknuthdiv
9690 @itemx -mno-knuthdiv
9691 Make the result of a division yielding a remainder have the same sign as
9692 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
9693 remainder follows the sign of the dividend.  Both methods are
9694 arithmetically valid, the latter being almost exclusively used.
9696 @item -mtoplevel-symbols
9697 @itemx -mno-toplevel-symbols
9698 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
9699 code can be used with the @code{PREFIX} assembly directive.
9701 @item -melf
9702 Generate an executable in the ELF format, rather than the default
9703 @samp{mmo} format used by the @command{mmix} simulator.
9704 @end table
9706 @node Code Gen Options
9707 @section Options for Code Generation Conventions
9708 @cindex code generation conventions
9709 @cindex options, code generation
9710 @cindex run-time options
9712 These machine-independent options control the interface conventions
9713 used in code generation.
9715 Most of them have both positive and negative forms; the negative form
9716 of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
9717 one of the forms is listed---the one which is not the default.  You
9718 can figure out the other form by either removing @samp{no-} or adding
9721 @table @gcctabopt
9722 @item -fexceptions
9723 @opindex fexceptions
9724 Enable exception handling.  Generates extra code needed to propagate
9725 exceptions.  For some targets, this implies GCC will generate frame
9726 unwind information for all functions, which can produce significant data
9727 size overhead, although it does not affect execution.  If you do not
9728 specify this option, GCC will enable it by default for languages like
9729 C++ which normally require exception handling, and disable it for
9730 languages like C that do not normally require it.  However, you may need
9731 to enable this option when compiling C code that needs to interoperate
9732 properly with exception handlers written in C++.  You may also wish to
9733 disable this option if you are compiling older C++ programs that don't
9734 use exception handling.
9736 @item -fnon-call-exceptions
9737 @opindex fnon-call-exceptions
9738 Generate code that allows trapping instructions to throw exceptions.
9739 Note that this requires platform-specific runtime support that does
9740 not exist everywhere.  Moreover, it only allows @emph{trapping}
9741 instructions to throw exceptions, i.e.@: memory references or floating
9742 point instructions.  It does not allow exceptions to be thrown from
9743 arbitrary signal handlers such as @code{SIGALRM}.
9745 @item -funwind-tables
9746 @opindex funwind-tables
9747 Similar to @option{-fexceptions}, except that it will just generate any needed
9748 static data, but will not affect the generated code in any other way.
9749 You will normally not enable this option; instead, a language processor
9750 that needs this handling would enable it on your behalf.
9752 @item -fasynchronous-unwind-tables
9753 @opindex funwind-tables
9754 Generate unwind table in dwarf2 format, if supported by target machine.  The
9755 table is exact at each instruction boundary, so it can be used for stack
9756 unwinding from asynchronous events (such as debugger or garbage collector).
9758 @item -fpcc-struct-return
9759 @opindex fpcc-struct-return
9760 Return ``short'' @code{struct} and @code{union} values in memory like
9761 longer ones, rather than in registers.  This convention is less
9762 efficient, but it has the advantage of allowing intercallability between
9763 GCC-compiled files and files compiled with other compilers.
9765 The precise convention for returning structures in memory depends
9766 on the target configuration macros.
9768 Short structures and unions are those whose size and alignment match
9769 that of some integer type.
9771 @item -freg-struct-return
9772 @opindex freg-struct-return
9773 Return @code{struct} and @code{union} values in registers when possible.
9774 This is more efficient for small structures than
9775 @option{-fpcc-struct-return}.
9777 If you specify neither @option{-fpcc-struct-return} nor
9778 @option{-freg-struct-return}, GCC defaults to whichever convention is
9779 standard for the target.  If there is no standard convention, GCC
9780 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
9781 the principal compiler.  In those cases, we can choose the standard, and
9782 we chose the more efficient register return alternative.
9784 @item -fshort-enums
9785 @opindex fshort-enums
9786 Allocate to an @code{enum} type only as many bytes as it needs for the
9787 declared range of possible values.  Specifically, the @code{enum} type
9788 will be equivalent to the smallest integer type which has enough room.
9790 @item -fshort-double
9791 @opindex fshort-double
9792 Use the same size for @code{double} as for @code{float}.
9794 @item -fshared-data
9795 @opindex fshared-data
9796 Requests that the data and non-@code{const} variables of this
9797 compilation be shared data rather than private data.  The distinction
9798 makes sense only on certain operating systems, where shared data is
9799 shared between processes running the same program, while private data
9800 exists in one copy per process.
9802 @item -fno-common
9803 @opindex fno-common
9804 In C, allocate even uninitialized global variables in the data section of the
9805 object file, rather than generating them as common blocks.  This has the
9806 effect that if the same variable is declared (without @code{extern}) in
9807 two different compilations, you will get an error when you link them.
9808 The only reason this might be useful is if you wish to verify that the
9809 program will work on other systems which always work this way.
9811 @item -fno-ident
9812 @opindex fno-ident
9813 Ignore the @samp{#ident} directive.
9815 @item -fno-gnu-linker
9816 @opindex fno-gnu-linker
9817 Do not output global initializations (such as C++ constructors and
9818 destructors) in the form used by the GNU linker (on systems where the GNU
9819 linker is the standard method of handling them).  Use this option when
9820 you want to use a non-GNU linker, which also requires using the
9821 @command{collect2} program to make sure the system linker includes
9822 constructors and destructors.  (@command{collect2} is included in the GCC
9823 distribution.)  For systems which @emph{must} use @command{collect2}, the
9824 compiler driver @command{gcc} is configured to do this automatically.
9826 @item -finhibit-size-directive
9827 @opindex finhibit-size-directive
9828 Don't output a @code{.size} assembler directive, or anything else that
9829 would cause trouble if the function is split in the middle, and the
9830 two halves are placed at locations far apart in memory.  This option is
9831 used when compiling @file{crtstuff.c}; you should not need to use it
9832 for anything else.
9834 @item -fverbose-asm
9835 @opindex fverbose-asm
9836 Put extra commentary information in the generated assembly code to
9837 make it more readable.  This option is generally only of use to those
9838 who actually need to read the generated assembly code (perhaps while
9839 debugging the compiler itself).
9841 @option{-fno-verbose-asm}, the default, causes the
9842 extra information to be omitted and is useful when comparing two assembler
9843 files.
9845 @item -fvolatile
9846 @opindex fvolatile
9847 Consider all memory references through pointers to be volatile.
9849 @item -fvolatile-global
9850 @opindex fvolatile-global
9851 Consider all memory references to extern and global data items to
9852 be volatile.  GCC does not consider static data items to be volatile
9853 because of this switch.
9855 @item -fvolatile-static
9856 @opindex fvolatile-static
9857 Consider all memory references to static data to be volatile.
9859 @item -fpic
9860 @opindex fpic
9861 @cindex global offset table
9862 @cindex PIC
9863 Generate position-independent code (PIC) suitable for use in a shared
9864 library, if supported for the target machine.  Such code accesses all
9865 constant addresses through a global offset table (GOT)@.  The dynamic
9866 loader resolves the GOT entries when the program starts (the dynamic
9867 loader is not part of GCC; it is part of the operating system).  If
9868 the GOT size for the linked executable exceeds a machine-specific
9869 maximum size, you get an error message from the linker indicating that
9870 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
9871 instead.  (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
9872 on the m68k and RS/6000.  The 386 has no such limit.)
9874 Position-independent code requires special support, and therefore works
9875 only on certain machines.  For the 386, GCC supports PIC for System V
9876 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
9877 position-independent.
9879 @item -fPIC
9880 @opindex fPIC
9881 If supported for the target machine, emit position-independent code,
9882 suitable for dynamic linking and avoiding any limit on the size of the
9883 global offset table.  This option makes a difference on the m68k, m88k,
9884 and the Sparc.
9886 Position-independent code requires special support, and therefore works
9887 only on certain machines.
9889 @item -ffixed-@var{reg}
9890 @opindex ffixed
9891 Treat the register named @var{reg} as a fixed register; generated code
9892 should never refer to it (except perhaps as a stack pointer, frame
9893 pointer or in some other fixed role).
9895 @var{reg} must be the name of a register.  The register names accepted
9896 are machine-specific and are defined in the @code{REGISTER_NAMES}
9897 macro in the machine description macro file.
9899 This flag does not have a negative form, because it specifies a
9900 three-way choice.
9902 @item -fcall-used-@var{reg}
9903 @opindex fcall-used
9904 Treat the register named @var{reg} as an allocable register that is
9905 clobbered by function calls.  It may be allocated for temporaries or
9906 variables that do not live across a call.  Functions compiled this way
9907 will not save and restore the register @var{reg}.
9909 It is an error to used this flag with the frame pointer or stack pointer.
9910 Use of this flag for other registers that have fixed pervasive roles in
9911 the machine's execution model will produce disastrous results.
9913 This flag does not have a negative form, because it specifies a
9914 three-way choice.
9916 @item -fcall-saved-@var{reg}
9917 @opindex fcall-saved
9918 Treat the register named @var{reg} as an allocable register saved by
9919 functions.  It may be allocated even for temporaries or variables that
9920 live across a call.  Functions compiled this way will save and restore
9921 the register @var{reg} if they use it.
9923 It is an error to used this flag with the frame pointer or stack pointer.
9924 Use of this flag for other registers that have fixed pervasive roles in
9925 the machine's execution model will produce disastrous results.
9927 A different sort of disaster will result from the use of this flag for
9928 a register in which function values may be returned.
9930 This flag does not have a negative form, because it specifies a
9931 three-way choice.
9933 @item -fpack-struct
9934 @opindex fpack-struct
9935 Pack all structure members together without holes.  Usually you would
9936 not want to use this option, since it makes the code suboptimal, and
9937 the offsets of structure members won't agree with system libraries.
9939 @item -finstrument-functions
9940 @opindex finstrument-functions
9941 Generate instrumentation calls for entry and exit to functions.  Just
9942 after function entry and just before function exit, the following
9943 profiling functions will be called with the address of the current
9944 function and its call site.  (On some platforms,
9945 @code{__builtin_return_address} does not work beyond the current
9946 function, so the call site information may not be available to the
9947 profiling functions otherwise.)
9949 @example
9950 void __cyg_profile_func_enter (void *this_fn,
9951                                void *call_site);
9952 void __cyg_profile_func_exit  (void *this_fn,
9953                                void *call_site);
9954 @end example
9956 The first argument is the address of the start of the current function,
9957 which may be looked up exactly in the symbol table.
9959 This instrumentation is also done for functions expanded inline in other
9960 functions.  The profiling calls will indicate where, conceptually, the
9961 inline function is entered and exited.  This means that addressable
9962 versions of such functions must be available.  If all your uses of a
9963 function are expanded inline, this may mean an additional expansion of
9964 code size.  If you use @samp{extern inline} in your C code, an
9965 addressable version of such functions must be provided.  (This is
9966 normally the case anyways, but if you get lucky and the optimizer always
9967 expands the functions inline, you might have gotten away without
9968 providing static copies.)
9970 A function may be given the attribute @code{no_instrument_function}, in
9971 which case this instrumentation will not be done.  This can be used, for
9972 example, for the profiling functions listed above, high-priority
9973 interrupt routines, and any functions from which the profiling functions
9974 cannot safely be called (perhaps signal handlers, if the profiling
9975 routines generate output or allocate memory).
9977 @item -fstack-check
9978 @opindex fstack-check
9979 Generate code to verify that you do not go beyond the boundary of the
9980 stack.  You should specify this flag if you are running in an
9981 environment with multiple threads, but only rarely need to specify it in
9982 a single-threaded environment since stack overflow is automatically
9983 detected on nearly all systems if there is only one stack.
9985 Note that this switch does not actually cause checking to be done; the
9986 operating system must do that.  The switch causes generation of code
9987 to ensure that the operating system sees the stack being extended.
9989 @item -fstack-limit-register=@var{reg}
9990 @itemx -fstack-limit-symbol=@var{sym}
9991 @itemx -fno-stack-limit
9992 @opindex fstack-limit-register
9993 @opindex fstack-limit-symbol
9994 @opindex fno-stack-limit
9995 Generate code to ensure that the stack does not grow beyond a certain value,
9996 either the value of a register or the address of a symbol.  If the stack
9997 would grow beyond the value, a signal is raised.  For most targets,
9998 the signal is raised before the stack overruns the boundary, so
9999 it is possible to catch the signal without taking special precautions.
10001 For instance, if the stack starts at absolute address @samp{0x80000000}
10002 and grows downwards, you can use the flags
10003 @option{-fstack-limit-symbol=__stack_limit} and
10004 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
10005 of 128KB@.  Note that this may only work with the GNU linker.
10007 @cindex aliasing of parameters
10008 @cindex parameters, aliased
10009 @item -fargument-alias
10010 @itemx -fargument-noalias
10011 @itemx -fargument-noalias-global
10012 @opindex fargument-alias
10013 @opindex fargument-noalias
10014 @opindex fargument-noalias-global
10015 Specify the possible relationships among parameters and between
10016 parameters and global data.
10018 @option{-fargument-alias} specifies that arguments (parameters) may
10019 alias each other and may alias global storage.@*
10020 @option{-fargument-noalias} specifies that arguments do not alias
10021 each other, but may alias global storage.@*
10022 @option{-fargument-noalias-global} specifies that arguments do not
10023 alias each other and do not alias global storage.
10025 Each language will automatically use whatever option is required by
10026 the language standard.  You should not need to use these options yourself.
10028 @item -fleading-underscore
10029 @opindex fleading-underscore
10030 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
10031 change the way C symbols are represented in the object file.  One use
10032 is to help link with legacy assembly code.
10034 Be warned that you should know what you are doing when invoking this
10035 option, and that not all targets provide complete support for it.
10036 @end table
10038 @c man end
10040 @node Environment Variables
10041 @section Environment Variables Affecting GCC
10042 @cindex environment variables
10044 @c man begin ENVIRONMENT
10046 This section describes several environment variables that affect how GCC
10047 operates.  Some of them work by specifying directories or prefixes to use
10048 when searching for various kinds of files.  Some are used to specify other
10049 aspects of the compilation environment.
10051 @ifclear INTERNALS
10052 Note that you can also specify places to search using options such as
10053 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
10054 take precedence over places specified using environment variables, which
10055 in turn take precedence over those specified by the configuration of GCC@.
10057 @end ifclear
10058 @ifset INTERNALS
10059 Note that you can also specify places to search using options such as
10060 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
10061 take precedence over places specified using environment variables, which
10062 in turn take precedence over those specified by the configuration of GCC@.
10063 @xref{Driver}.
10064 @end ifset
10066 @table @env
10067 @item LANG
10068 @itemx LC_CTYPE
10069 @c @itemx LC_COLLATE
10070 @itemx LC_MESSAGES
10071 @c @itemx LC_MONETARY
10072 @c @itemx LC_NUMERIC
10073 @c @itemx LC_TIME
10074 @itemx LC_ALL
10075 @findex LANG
10076 @findex LC_CTYPE
10077 @c @findex LC_COLLATE
10078 @findex LC_MESSAGES
10079 @c @findex LC_MONETARY
10080 @c @findex LC_NUMERIC
10081 @c @findex LC_TIME
10082 @findex LC_ALL
10083 @cindex locale
10084 These environment variables control the way that GCC uses
10085 localization information that allow GCC to work with different
10086 national conventions.  GCC inspects the locale categories
10087 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
10088 so.  These locale categories can be set to any value supported by your
10089 installation.  A typical value is @samp{en_UK} for English in the United
10090 Kingdom.
10092 The @env{LC_CTYPE} environment variable specifies character
10093 classification.  GCC uses it to determine the character boundaries in
10094 a string; this is needed for some multibyte encodings that contain quote
10095 and escape characters that would otherwise be interpreted as a string
10096 end or escape.
10098 The @env{LC_MESSAGES} environment variable specifies the language to
10099 use in diagnostic messages.
10101 If the @env{LC_ALL} environment variable is set, it overrides the value
10102 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
10103 and @env{LC_MESSAGES} default to the value of the @env{LANG}
10104 environment variable.  If none of these variables are set, GCC
10105 defaults to traditional C English behavior.
10107 @item TMPDIR
10108 @findex TMPDIR
10109 If @env{TMPDIR} is set, it specifies the directory to use for temporary
10110 files.  GCC uses temporary files to hold the output of one stage of
10111 compilation which is to be used as input to the next stage: for example,
10112 the output of the preprocessor, which is the input to the compiler
10113 proper.
10115 @item GCC_EXEC_PREFIX
10116 @findex GCC_EXEC_PREFIX
10117 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
10118 names of the subprograms executed by the compiler.  No slash is added
10119 when this prefix is combined with the name of a subprogram, but you can
10120 specify a prefix that ends with a slash if you wish.
10122 If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
10123 an appropriate prefix to use based on the pathname it was invoked with.
10125 If GCC cannot find the subprogram using the specified prefix, it
10126 tries looking in the usual places for the subprogram.
10128 The default value of @env{GCC_EXEC_PREFIX} is
10129 @file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
10130 of @code{prefix} when you ran the @file{configure} script.
10132 Other prefixes specified with @option{-B} take precedence over this prefix.
10134 This prefix is also used for finding files such as @file{crt0.o} that are
10135 used for linking.
10137 In addition, the prefix is used in an unusual way in finding the
10138 directories to search for header files.  For each of the standard
10139 directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
10140 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
10141 replacing that beginning with the specified prefix to produce an
10142 alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
10143 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
10144 These alternate directories are searched first; the standard directories
10145 come next.
10147 @item COMPILER_PATH
10148 @findex COMPILER_PATH
10149 The value of @env{COMPILER_PATH} is a colon-separated list of
10150 directories, much like @env{PATH}.  GCC tries the directories thus
10151 specified when searching for subprograms, if it can't find the
10152 subprograms using @env{GCC_EXEC_PREFIX}.
10154 @item LIBRARY_PATH
10155 @findex LIBRARY_PATH
10156 The value of @env{LIBRARY_PATH} is a colon-separated list of
10157 directories, much like @env{PATH}.  When configured as a native compiler,
10158 GCC tries the directories thus specified when searching for special
10159 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
10160 using GCC also uses these directories when searching for ordinary
10161 libraries for the @option{-l} option (but directories specified with
10162 @option{-L} come first).
10164 @item C_INCLUDE_PATH
10165 @itemx CPLUS_INCLUDE_PATH
10166 @itemx OBJC_INCLUDE_PATH
10167 @findex C_INCLUDE_PATH
10168 @findex CPLUS_INCLUDE_PATH
10169 @findex OBJC_INCLUDE_PATH
10170 @c @itemx OBJCPLUS_INCLUDE_PATH
10171 These environment variables pertain to particular languages.  Each
10172 variable's value is a colon-separated list of directories, much like
10173 @env{PATH}.  When GCC searches for header files, it tries the
10174 directories listed in the variable for the language you are using, after
10175 the directories specified with @option{-I} but before the standard header
10176 file directories.
10178 @item DEPENDENCIES_OUTPUT
10179 @findex DEPENDENCIES_OUTPUT
10180 @cindex dependencies for make as output
10181 If this variable is set, its value specifies how to output dependencies
10182 for Make based on the header files processed by the compiler.  This
10183 output looks much like the output from the @option{-M} option
10184 (@pxref{Preprocessor Options}), but it goes to a separate file, and is
10185 in addition to the usual results of compilation.
10187 The value of @env{DEPENDENCIES_OUTPUT} can be just a file name, in
10188 which case the Make rules are written to that file, guessing the target
10189 name from the source file name.  Or the value can have the form
10190 @samp{@var{file} @var{target}}, in which case the rules are written to
10191 file @var{file} using @var{target} as the target name.
10193 @item LANG
10194 @findex LANG
10195 @cindex locale definition
10196 This variable is used to pass locale information to the compiler.  One way in
10197 which this information is used is to determine the character set to be used
10198 when character literals, string literals and comments are parsed in C and C++.
10199 When the compiler is configured to allow multibyte characters,
10200 the following values for @env{LANG} are recognized:
10202 @table @samp
10203 @item C-JIS
10204 Recognize JIS characters.
10205 @item C-SJIS
10206 Recognize SJIS characters.
10207 @item C-EUCJP
10208 Recognize EUCJP characters.
10209 @end table
10211 If @env{LANG} is not defined, or if it has some other value, then the
10212 compiler will use mblen and mbtowc as defined by the default locale to
10213 recognize and translate multibyte characters.
10214 @end table
10216 @c man end
10218 @node Running Protoize
10219 @section Running Protoize
10221 The program @code{protoize} is an optional part of GCC@.  You can use
10222 it to add prototypes to a program, thus converting the program to ISO
10223 C in one respect.  The companion program @code{unprotoize} does the
10224 reverse: it removes argument types from any prototypes that are found.
10226 When you run these programs, you must specify a set of source files as
10227 command line arguments.  The conversion programs start out by compiling
10228 these files to see what functions they define.  The information gathered
10229 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
10231 After scanning comes actual conversion.  The specified files are all
10232 eligible to be converted; any files they include (whether sources or
10233 just headers) are eligible as well.
10235 But not all the eligible files are converted.  By default,
10236 @code{protoize} and @code{unprotoize} convert only source and header
10237 files in the current directory.  You can specify additional directories
10238 whose files should be converted with the @option{-d @var{directory}}
10239 option.  You can also specify particular files to exclude with the
10240 @option{-x @var{file}} option.  A file is converted if it is eligible, its
10241 directory name matches one of the specified directory names, and its
10242 name within the directory has not been excluded.
10244 Basic conversion with @code{protoize} consists of rewriting most
10245 function definitions and function declarations to specify the types of
10246 the arguments.  The only ones not rewritten are those for varargs
10247 functions.
10249 @code{protoize} optionally inserts prototype declarations at the
10250 beginning of the source file, to make them available for any calls that
10251 precede the function's definition.  Or it can insert prototype
10252 declarations with block scope in the blocks where undeclared functions
10253 are called.
10255 Basic conversion with @code{unprotoize} consists of rewriting most
10256 function declarations to remove any argument types, and rewriting
10257 function definitions to the old-style pre-ISO form.
10259 Both conversion programs print a warning for any function declaration or
10260 definition that they can't convert.  You can suppress these warnings
10261 with @option{-q}.
10263 The output from @code{protoize} or @code{unprotoize} replaces the
10264 original source file.  The original file is renamed to a name ending
10265 with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
10266 without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
10267 for DOS) file already exists, then the source file is simply discarded.
10269 @code{protoize} and @code{unprotoize} both depend on GCC itself to
10270 scan the program and collect information about the functions it uses.
10271 So neither of these programs will work until GCC is installed.
10273 Here is a table of the options you can use with @code{protoize} and
10274 @code{unprotoize}.  Each option works with both programs unless
10275 otherwise stated.
10277 @table @code
10278 @item -B @var{directory}
10279 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
10280 usual directory (normally @file{/usr/local/lib}).  This file contains
10281 prototype information about standard system functions.  This option
10282 applies only to @code{protoize}.
10284 @item -c @var{compilation-options}
10285 Use  @var{compilation-options} as the options when running @code{gcc} to
10286 produce the @samp{.X} files.  The special option @option{-aux-info} is
10287 always passed in addition, to tell @code{gcc} to write a @samp{.X} file.
10289 Note that the compilation options must be given as a single argument to
10290 @code{protoize} or @code{unprotoize}.  If you want to specify several
10291 @code{gcc} options, you must quote the entire set of compilation options
10292 to make them a single word in the shell.
10294 There are certain @code{gcc} arguments that you cannot use, because they
10295 would produce the wrong kind of output.  These include @option{-g},
10296 @option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in
10297 the @var{compilation-options}, they are ignored.
10299 @item -C
10300 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
10301 systems) instead of @samp{.c}.  This is convenient if you are converting
10302 a C program to C++.  This option applies only to @code{protoize}.
10304 @item -g
10305 Add explicit global declarations.  This means inserting explicit
10306 declarations at the beginning of each source file for each function
10307 that is called in the file and was not declared.  These declarations
10308 precede the first function definition that contains a call to an
10309 undeclared function.  This option applies only to @code{protoize}.
10311 @item -i @var{string}
10312 Indent old-style parameter declarations with the string @var{string}.
10313 This option applies only to @code{protoize}.
10315 @code{unprotoize} converts prototyped function definitions to old-style
10316 function definitions, where the arguments are declared between the
10317 argument list and the initial @samp{@{}.  By default, @code{unprotoize}
10318 uses five spaces as the indentation.  If you want to indent with just
10319 one space instead, use @option{-i " "}.
10321 @item -k
10322 Keep the @samp{.X} files.  Normally, they are deleted after conversion
10323 is finished.
10325 @item -l
10326 Add explicit local declarations.  @code{protoize} with @option{-l} inserts
10327 a prototype declaration for each function in each block which calls the
10328 function without any declaration.  This option applies only to
10329 @code{protoize}.
10331 @item -n
10332 Make no real changes.  This mode just prints information about the conversions
10333 that would have been done without @option{-n}.
10335 @item -N
10336 Make no @samp{.save} files.  The original files are simply deleted.
10337 Use this option with caution.
10339 @item -p @var{program}
10340 Use the program @var{program} as the compiler.  Normally, the name
10341 @file{gcc} is used.
10343 @item -q
10344 Work quietly.  Most warnings are suppressed.
10346 @item -v
10347 Print the version number, just like @option{-v} for @code{gcc}.
10348 @end table
10350 If you need special compiler options to compile one of your program's
10351 source files, then you should generate that file's @samp{.X} file
10352 specially, by running @code{gcc} on that source file with the
10353 appropriate options and the option @option{-aux-info}.  Then run
10354 @code{protoize} on the entire set of files.  @code{protoize} will use
10355 the existing @samp{.X} file because it is newer than the source file.
10356 For example:
10358 @example
10359 gcc -Dfoo=bar file1.c -aux-info file1.X
10360 protoize *.c
10361 @end example
10363 @noindent
10364 You need to include the special files along with the rest in the
10365 @code{protoize} command, even though their @samp{.X} files already
10366 exist, because otherwise they won't get converted.
10368 @xref{Protoize Caveats}, for more information on how to use
10369 @code{protoize} successfully.