1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2@c 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
3@c This is part of the GCC manual.
4@c For copying conditions, see the file gcc.texi.
5
6@ignore
7@c man begin COPYRIGHT
8Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
91998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
10
11Permission is granted to copy, distribute and/or modify this document
12under the terms of the GNU Free Documentation License, Version 1.2 or
13any later version published by the Free Software Foundation; with the
14Invariant Sections being ``GNU General Public License'' and ``Funding
15Free Software'', the Front-Cover texts being (a) (see below), and with
16the Back-Cover Texts being (b) (see below).  A copy of the license is
17included in the gfdl(7) man page.
18
19(a) The FSF's Front-Cover Text is:
20
21     A GNU Manual
22
23(b) The FSF's Back-Cover Text is:
24
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
33gcc [@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{}
40
41Only the most useful options are listed here; see below for the
42remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
43@c man end
44@c man begin SEEALSO
45gpl(7), gfdl(7), fsf-funding(7),
46cpp(1), gcov(1), g77(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
47and 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
51For instructions on reporting bugs, see
52@w{@uref{http://gcc.gnu.org/bugs.html}}.  Use of the @command{gccbug}
53script to report bugs is recommended.
54@c man end
55@c man begin AUTHOR
56See the Info entry for @command{gcc}, or
57@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
58for contributors to GCC@.
59@c man end
60@end ignore
61
62@node Invoking GCC
63@chapter GCC Command Options
64@cindex GCC command options
65@cindex command options
66@cindex options, GCC command
67
68@c man begin DESCRIPTION
69When you invoke GCC, it normally does preprocessing, compilation,
70assembly and linking.  The ``overall options'' allow you to stop this
71process at an intermediate stage.  For example, the @option{-c} option
72says not to run the linker.  Then the output consists of object files
73output by the assembler.
74
75Other options are passed on to one stage of processing.  Some options
76control the preprocessor and others the compiler itself.  Yet other
77options control the assembler and linker; most of these are not
78documented here, since you rarely need to use any of them.
79
80@cindex C compilation options
81Most of the command line options that you can use with GCC are useful
82for C programs; when an option is only useful with another language
83(usually C++), the explanation says so explicitly.  If the description
84for a particular option does not mention a source language, you can use
85that option with all supported languages.
86
87@cindex C++ compilation options
88@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
89options for compiling C++ programs.
90
91@cindex grouping options
92@cindex options, grouping
93The @command{gcc} program accepts options and file names as operands.  Many
94options have multi-letter names; therefore multiple single-letter options
95may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d
96-r}}.
97
98@cindex order of options
99@cindex options, order
100You can mix options and other arguments.  For the most part, the order
101you use doesn't matter.  Order does matter when you use several options
102of the same kind; for example, if you specify @option{-L} more than once,
103the directories are searched in the order specified.
104
105Many 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
108these have both positive and negative forms; the negative form of
109@option{-ffoo} would be @option{-fno-foo}.  This manual documents
110only one of these two forms, whichever one is not the default.
111
112@c man end
113
114@xref{Option Index}, for an index to GCC's options.
115
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* Precompiled Headers:: Compiling a header once, and using it many times.
144* Running Protoize::    Automatically adding or removing function prototypes.
145@end menu
146
147@c man begin OPTIONS
148
149@node Option Summary
150@section Option Summary
151
152Here is a summary of all the options, grouped by type.  Explanations are
153in the following sections.
154
155@table @emph
156@item Overall Options
157@xref{Overall Options,,Options Controlling the Kind of Output}.
158@gccoptlist{-c  -S  -E  -o @var{file}  -pipe  -pass-exit-codes  @gol
159-x @var{language}  -v  -###  --help  --target-help  --version}
160
161@item C Language Options
162@xref{C Dialect Options,,Options Controlling C Dialect}.
163@gccoptlist{-ansi  -std=@var{standard}  -aux-info @var{filename} @gol
164-fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
165-fhosted  -ffreestanding  -fms-extensions @gol
166-trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
167-fallow-single-precision  -fcond-mismatch @gol
168-fsigned-bitfields  -fsigned-char @gol
169-funsigned-bitfields  -funsigned-char @gol
170-fwritable-strings}
171
172@item C++ Language Options
173@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
174@gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
175-fconserve-space  -fno-const-strings @gol
176-fno-elide-constructors @gol
177-fno-enforce-eh-specs @gol
178-ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
179-fno-implicit-templates @gol
180-fno-implicit-inline-templates @gol
181-fno-implement-inlines  -fms-extensions @gol
182-fno-nonansi-builtins  -fno-operator-names @gol
183-fno-optional-diags  -fpermissive @gol
184-frepo  -fno-rtti  -fstats  -ftemplate-depth-@var{n} @gol
185-fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
186-fno-default-inline  -Wabi  -Wctor-dtor-privacy @gol
187-Wnon-virtual-dtor  -Wreorder @gol
188-Weffc++  -Wno-deprecated @gol
189-Wno-non-template-friend  -Wold-style-cast @gol
190-Woverloaded-virtual  -Wno-pmf-conversions @gol
191-Wsign-promo  -Wsynth}
192
193@item Objective-C Language Options
194@xref{Objective-C Dialect Options,,Options Controlling Objective-C Dialect}.
195@gccoptlist{
196-fconstant-string-class=@var{class-name} @gol
197-fgnu-runtime  -fnext-runtime @gol
198-fno-nil-receivers @gol
199-fobjc-exceptions @gol
200-freplace-objc-classes @gol
201-fzero-link @gol
202-gen-decls @gol
203-Wno-protocol  -Wselector -Wundeclared-selector}
204
205@item Language Independent Options
206@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
207@gccoptlist{-fmessage-length=@var{n}  @gol
208-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}}
209
210@item Warning Options
211@xref{Warning Options,,Options to Request or Suppress Warnings}.
212@gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
213-w  -Wextra  -Wall  -Waggregate-return @gol
214-Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment @gol
215-Wconversion  -Wno-deprecated-declarations @gol
216-Wdisabled-optimization  -Wno-div-by-zero  -Wendif-labels @gol
217-Werror  -Werror-implicit-function-declaration @gol
218-Wfloat-equal  -Wformat  -Wformat=2 @gol
219-Wno-format-extra-args -Wformat-nonliteral @gol
220-Wformat-security  -Wformat-y2k @gol
221-Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
222-Wimport  -Wno-import  -Winit-self  -Winline @gol
223-Wno-invalid-offsetof  -Winvalid-pch @gol
224-Wlarger-than-@var{len}  -Wlong-long @gol
225-Wmain  -Wmissing-braces @gol
226-Wmissing-format-attribute  -Wmissing-noreturn @gol
227-Wno-multichar  -Wnonnull  -Wpacked  -Wpadded @gol
228-Wparentheses  -Wpointer-arith  -Wredundant-decls @gol
229-Wreturn-type  -Wsequence-point  -Wshadow @gol
230-Wsign-compare  -Wstrict-aliasing @gol
231-Wswitch  -Wswitch-default  -Wswitch-enum @gol
232-Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized @gol
233-Wunknown-pragmas  -Wunreachable-code @gol
234-Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
235-Wunused-value  -Wunused-variable  -Wwrite-strings}
236
237@item C-only Warning Options
238@gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
239-Wmissing-prototypes  -Wnested-externs  -Wold-style-definition @gol
240-Wstrict-prototypes  -Wtraditional @gol
241-Wdeclaration-after-statement}
242
243@item Debugging Options
244@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
245@gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
246-fdump-unnumbered  -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
247-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
248-fdump-tree-original@r{[}-@var{n}@r{]}  @gol
249-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
250-fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
251-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
252-feliminate-unused-debug-symbols -fmem-report -fprofile-arcs @gol
253-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
254-ftest-coverage  -ftime-report @gol
255-g  -g@var{level}  -gcoff -gdwarf-2 @gol
256-ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ @gol
257-p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
258-print-multi-directory  -print-multi-lib @gol
259-print-prog-name=@var{program}  -print-search-dirs  -Q @gol
260-save-temps  -time}
261
262@item Optimization Options
263@xref{Optimize Options,,Options that Control Optimization}.
264@gccoptlist{-falign-functions=@var{n}  -falign-jumps=@var{n} @gol
265-falign-labels=@var{n}  -falign-loops=@var{n}  @gol
266-fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol
267-fbranch-target-load-optimize2 -fcaller-saves  -fcprop-registers @gol
268-fcse-follow-jumps  -fcse-skip-blocks  -fdata-sections @gol
269-fdelayed-branch  -fdelete-null-pointer-checks @gol
270-fexpensive-optimizations  -ffast-math  -ffloat-store @gol
271-fforce-addr  -fforce-mem  -ffunction-sections @gol
272-fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las  -floop-optimize @gol
273-fcrossjumping  -fif-conversion  -fif-conversion2 @gol
274-finline-functions  -finline-limit=@var{n}  -fkeep-inline-functions @gol
275-fkeep-static-consts  -fmerge-constants  -fmerge-all-constants @gol
276-fmove-all-movables  -fnew-ra  -fno-branch-count-reg @gol
277-fno-default-inline  -fno-defer-pop @gol
278-fno-function-cse  -fno-guess-branch-probability @gol
279-fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2 @gol
280-funsafe-math-optimizations  -ffinite-math-only @gol
281-fno-trapping-math  -fno-zero-initialized-in-bss @gol
282-fomit-frame-pointer  -foptimize-register-move @gol
283-foptimize-sibling-calls  -fprefetch-loop-arrays @gol
284-fprofile-generate -fprofile-use @gol
285-freduce-all-givs  -fregmove  -frename-registers @gol
286-freorder-blocks  -freorder-functions @gol
287-frerun-cse-after-loop  -frerun-loop-opt @gol
288-frounding-math -fschedule-insns  -fschedule-insns2 @gol
289-fno-sched-interblock  -fno-sched-spec  -fsched-spec-load @gol
290-fsched-spec-load-dangerous  @gol
291-fsched-stalled-insns=@var{n} -sched-stalled-insns-dep=@var{n} @gol
292-fsched2-use-superblocks @gol
293-fsched2-use-traces  -fsignaling-nans @gol
294-fsingle-precision-constant  @gol
295-fstrength-reduce  -fstrict-aliasing  -ftracer  -fthread-jumps @gol
296-funroll-all-loops  -funroll-loops  -fpeel-loops @gol
297-funswitch-loops  -fold-unroll-loops  -fold-unroll-all-loops @gol
298--param @var{name}=@var{value}
299-O  -O0  -O1  -O2  -O3  -Os}
300
301@item Preprocessor Options
302@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
303@gccoptlist{-A@var{question}=@var{answer} @gol
304-A-@var{question}@r{[}=@var{answer}@r{]} @gol
305-C  -dD  -dI  -dM  -dN @gol
306-D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
307-idirafter @var{dir} @gol
308-include @var{file}  -imacros @var{file} @gol
309-iprefix @var{file}  -iwithprefix @var{dir} @gol
310-iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
311-M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
312-P  -fworking-directory  -remap @gol
313-trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
314-Xpreprocessor @var{option}}
315
316@item Assembler Option
317@xref{Assembler Options,,Passing Options to the Assembler}.
318@gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
319
320@item Linker Options
321@xref{Link Options,,Options for Linking}.
322@gccoptlist{@var{object-file-name}  -l@var{library} @gol
323-nostartfiles  -nodefaultlibs  -nostdlib -pie @gol
324-s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
325-Wl,@var{option}  -Xlinker @var{option} @gol
326-u @var{symbol}}
327
328@item Directory Options
329@xref{Directory Options,,Options for Directory Search}.
330@gccoptlist{-B@var{prefix}  -I@var{dir}  -I-  -L@var{dir}  -specs=@var{file}}
331
332@item Target Options
333@c I wrote this xref this way to avoid overfull hbox. -- rms
334@xref{Target Options}.
335@gccoptlist{-V @var{version}  -b @var{machine}}
336
337@item Machine Dependent Options
338@xref{Submodel Options,,Hardware Models and Configurations}.
339
340@emph{M680x0 Options}
341@gccoptlist{-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
342-m68060  -mcpu32  -m5200  -m68881  -mbitfield  -mc68000  -mc68020   @gol
343-mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel @gol
344-malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
345-mshared-library-id=n  -mid-shared-library  -mno-id-shared-library}
346
347@emph{M68hc1x Options}
348@gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
349-mauto-incdec  -minmax  -mlong-calls  -mshort @gol
350-msoft-reg-count=@var{count}}
351
352@emph{VAX Options}
353@gccoptlist{-mg  -mgnu  -munix}
354
355@emph{SPARC Options}
356@gccoptlist{-mcpu=@var{cpu-type} @gol
357-mtune=@var{cpu-type} @gol
358-mcmodel=@var{code-model} @gol
359-m32  -m64  -mapp-regs  -mno-app-regs @gol
360-mfaster-structs  -mno-faster-structs @gol
361-mflat  -mno-flat  -mfpu  -mno-fpu @gol
362-mhard-float  -msoft-float @gol
363-mhard-quad-float  -msoft-quad-float @gol
364-mimpure-text  -mno-impure-text  -mlittle-endian @gol
365-mstack-bias  -mno-stack-bias @gol
366-munaligned-doubles  -mno-unaligned-doubles @gol
367-mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
368-mcypress  -mf930  -mf934 @gol
369-msparclite  -msupersparc  -mv8
370-threads -pthreads}
371
372@emph{ARM Options}
373@gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
374-mapcs-26  -mapcs-32 @gol
375-mapcs-stack-check  -mno-apcs-stack-check @gol
376-mapcs-float  -mno-apcs-float @gol
377-mapcs-reentrant  -mno-apcs-reentrant @gol
378-msched-prolog  -mno-sched-prolog @gol
379-mlittle-endian  -mbig-endian  -mwords-little-endian @gol
380-malignment-traps  -mno-alignment-traps @gol
381-msoft-float  -mhard-float  -mfpe @gol
382-mthumb-interwork  -mno-thumb-interwork @gol
383-mcpu=@var{name}  -march=@var{name}  -mfpe=@var{name}  @gol
384-mstructure-size-boundary=@var{n} @gol
385-mabort-on-noreturn @gol
386-mlong-calls  -mno-long-calls @gol
387-msingle-pic-base  -mno-single-pic-base @gol
388-mpic-register=@var{reg} @gol
389-mnop-fun-dllimport @gol
390-mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
391-mpoke-function-name @gol
392-mthumb  -marm @gol
393-mtpcs-frame  -mtpcs-leaf-frame @gol
394-mcaller-super-interworking  -mcallee-super-interworking}
395
396@emph{MN10300 Options}
397@gccoptlist{-mmult-bug  -mno-mult-bug @gol
398-mam33  -mno-am33 @gol
399-mam33-2  -mno-am33-2 @gol
400-mno-crt0  -mrelax}
401
402@emph{M32R/D Options}
403@gccoptlist{-m32r2 -m32rx -m32r @gol
404-mdebug @gol
405-malign-loops -mno-align-loops @gol
406-missue-rate=@var{number} @gol
407-mbranch-cost=@var{number} @gol
408-mmodel=@var{code-size-model-type} @gol
409-msdata=@var{sdata-type} @gol
410-mno-flush-func -mflush-func=@var{name} @gol
411-mno-flush-trap -mflush-trap=@var{number} @gol
412-G @var{num}}
413
414@emph{RS/6000 and PowerPC Options}
415@gccoptlist{-mcpu=@var{cpu-type} @gol
416-mtune=@var{cpu-type} @gol
417-mpower  -mno-power  -mpower2  -mno-power2 @gol
418-mpowerpc  -mpowerpc64  -mno-powerpc @gol
419-maltivec  -mno-altivec @gol
420-mpowerpc-gpopt  -mno-powerpc-gpopt @gol
421-mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
422-mnew-mnemonics  -mold-mnemonics @gol
423-mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
424-m64  -m32  -mxl-call  -mno-xl-call  -mpe @gol
425-malign-power  -malign-natural @gol
426-msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
427-mstring  -mno-string  -mupdate  -mno-update @gol
428-mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
429-mstrict-align  -mno-strict-align  -mrelocatable @gol
430-mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
431-mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
432-mdynamic-no-pic @gol
433-mprioritize-restricted-insns=@var{priority} @gol
434-msched-costly-dep=@var{dependence_type} @gol
435-minsert-sched-nops=@var{scheme} @gol
436-mcall-sysv  -mcall-netbsd @gol
437-maix-struct-return  -msvr4-struct-return @gol
438-mabi=altivec  -mabi=no-altivec @gol
439-mabi=spe  -mabi=no-spe @gol
440-misel=yes  -misel=no @gol
441-mspe=yes  -mspe=no @gol
442-mfloat-gprs=yes  -mfloat-gprs=no @gol
443-mprototype  -mno-prototype @gol
444-msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
445-msdata=@var{opt}  -mvxworks  -mwindiss  -G @var{num}  -pthread}
446
447@emph{Darwin Options}
448@gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
449-arch_only  -bind_at_load  -bundle  -bundle_loader @gol
450-client_name  -compatibility_version  -current_version @gol
451-dependency-file  -dylib_file  -dylinker_install_name @gol
452-dynamic  -dynamiclib  -exported_symbols_list @gol
453-filelist  -flat_namespace  -force_cpusubtype_ALL @gol
454-force_flat_namespace  -headerpad_max_install_names @gol
455-image_base  -init  -install_name  -keep_private_externs @gol
456-multi_module  -multiply_defined  -multiply_defined_unused @gol
457-noall_load  -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
458-pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
459-private_bundle  -read_only_relocs  -sectalign @gol
460-sectobjectsymbols  -whyload  -seg1addr @gol
461-sectcreate  -sectobjectsymbols  -sectorder @gol
462-seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
463-segprot  -segs_read_only_addr  -segs_read_write_addr @gol
464-single_module  -static  -sub_library  -sub_umbrella @gol
465-twolevel_namespace  -umbrella  -undefined @gol
466-unexported_symbols_list  -weak_reference_mismatches @gol
467-whatsloaded}
468
469@emph{MIPS Options}
470@gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
471-mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64 @gol
472-mips16  -mno-mips16  -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
473-mxgot  -mno-xgot  -membedded-pic  -mno-embedded-pic @gol
474-mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float @gol
475-msingle-float  -mdouble-float  -mint64  -mlong64  -mlong32 @gol
476-G@var{num}  -membedded-data  -mno-embedded-data @gol
477-muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
478-msplit-addresses  -mno-split-addresses  @gol
479-mexplicit-relocs  -mno-explicit-relocs  @gol
480-mrnames  -mno-rnames @gol
481-mcheck-zero-division  -mno-check-zero-division @gol
482-mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
483-mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
484-mfix-sb1  -mno-fix-sb1  -mflush-func=@var{func} @gol
485-mno-flush-func  -mbranch-likely  -mno-branch-likely}
486
487@emph{i386 and x86-64 Options}
488@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
489-mfpmath=@var{unit} @gol
490-masm=@var{dialect}  -mno-fancy-math-387 @gol
491-mno-fp-ret-in-387  -msoft-float  -msvr3-shlib @gol
492-mno-wide-multiply  -mrtd  -malign-double @gol
493-mpreferred-stack-boundary=@var{num} @gol
494-mmmx  -msse  -msse2 -msse3 -m3dnow @gol
495-mthreads  -mno-align-stringops  -minline-all-stringops @gol
496-mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
497-m96bit-long-double  -mregparm=@var{num}  -momit-leaf-frame-pointer @gol
498-mno-red-zone -mno-tls-direct-seg-refs @gol
499-mcmodel=@var{code-model} @gol
500-m32  -m64}
501
502@emph{HPPA Options}
503@gccoptlist{-march=@var{architecture-type} @gol
504-mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
505-mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
506-mjump-in-delay -mlinker-opt -mlong-calls @gol
507-mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
508-mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
509-mno-jump-in-delay  -mno-long-load-store @gol
510-mno-portable-runtime  -mno-soft-float @gol
511-mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
512-mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
513-mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
514-nolibdld  -static  -threads}
515
516@emph{Intel 960 Options}
517@gccoptlist{-m@var{cpu-type}  -masm-compat  -mclean-linkage @gol
518-mcode-align  -mcomplex-addr  -mleaf-procedures @gol
519-mic-compat  -mic2.0-compat  -mic3.0-compat @gol
520-mintel-asm  -mno-clean-linkage  -mno-code-align @gol
521-mno-complex-addr  -mno-leaf-procedures @gol
522-mno-old-align  -mno-strict-align  -mno-tail-call @gol
523-mnumerics  -mold-align  -msoft-float  -mstrict-align @gol
524-mtail-call}
525
526@emph{DEC Alpha Options}
527@gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
528-mieee  -mieee-with-inexact  -mieee-conformant @gol
529-mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
530-mtrap-precision=@var{mode}  -mbuild-constants @gol
531-mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
532-mbwx  -mmax  -mfix  -mcix @gol
533-mfloat-vax  -mfloat-ieee @gol
534-mexplicit-relocs  -msmall-data  -mlarge-data @gol
535-msmall-text  -mlarge-text @gol
536-mmemory-latency=@var{time}}
537
538@emph{DEC Alpha/VMS Options}
539@gccoptlist{-mvms-return-codes}
540
541@emph{H8/300 Options}
542@gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}
543
544@emph{SH Options}
545@gccoptlist{-m1  -m2  -m2e  -m3  -m3e @gol
546-m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
547-m5-64media  -m5-64media-nofpu @gol
548-m5-32media  -m5-32media-nofpu @gol
549-m5-compact  -m5-compact-nofpu @gol
550-mb  -ml  -mdalign  -mrelax @gol
551-mbigtable  -mfmovd  -mhitachi  -mnomacsave @gol
552-mieee  -misize  -mpadstruct  -mspace @gol
553-mprefergot  -musermode}
554
555@emph{System V Options}
556@gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
557
558@emph{ARC Options}
559@gccoptlist{-EB  -EL @gol
560-mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
561-mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
562
563@emph{TMS320C3x/C4x Options}
564@gccoptlist{-mcpu=@var{cpu}  -mbig  -msmall  -mregparm  -mmemparm @gol
565-mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload @gol
566-mrpts=@var{count}  -mrptb  -mdb  -mloop-unsigned @gol
567-mparallel-insns  -mparallel-mpy  -mpreserve-float}
568
569@emph{V850 Options}
570@gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
571-mprolog-function  -mno-prolog-function  -mspace @gol
572-mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
573-mapp-regs  -mno-app-regs @gol
574-mdisable-callt  -mno-disable-callt @gol
575-mv850e1 @gol
576-mv850e @gol
577-mv850  -mbig-switch}
578
579@emph{NS32K Options}
580@gccoptlist{-m32032  -m32332  -m32532  -m32081  -m32381 @gol
581-mmult-add  -mnomult-add  -msoft-float  -mrtd  -mnortd @gol
582-mregparam  -mnoregparam  -msb  -mnosb @gol
583-mbitfield  -mnobitfield  -mhimem  -mnohimem}
584
585@emph{AVR Options}
586@gccoptlist{-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
587-mcall-prologues  -mno-tablejump  -mtiny-stack}
588
589@emph{MCore Options}
590@gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
591-mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
592-m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
593-mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
594-mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
595
596@emph{MMIX Options}
597@gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
598-mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
599-melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
600-mno-base-addresses  -msingle-exit  -mno-single-exit}
601
602@emph{IA-64 Options}
603@gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
604-mvolatile-asm-stop  -mb-step  -mregister-names  -mno-sdata @gol
605-mconstant-gp  -mauto-pic  -minline-float-divide-min-latency @gol
606-minline-float-divide-max-throughput @gol
607-minline-int-divide-min-latency @gol
608-minline-int-divide-max-throughput  -mno-dwarf2-asm @gol
609-mfixed-range=@var{register-range}}
610
611@emph{D30V Options}
612@gccoptlist{-mextmem  -mextmemory  -monchip  -mno-asm-optimize @gol
613-masm-optimize  -mbranch-cost=@var{n}  -mcond-exec=@var{n}}
614
615@emph{S/390 and zSeries Options}
616@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
617-mhard-float  -msoft-float  -mbackchain  -mno-backchain @gol
618-msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
619-m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch  -mfused-madd  -mno-fused-madd}
620
621@emph{CRIS Options}
622@gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
623-mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
624-metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
625-mstack-align  -mdata-align  -mconst-align @gol
626-m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
627-melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
628-mmul-bug-workaround  -mno-mul-bug-workaround}
629
630@emph{PDP-11 Options}
631@gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
632-mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
633-mint16  -mno-int32  -mfloat32  -mno-float64 @gol
634-mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
635-mbranch-expensive  -mbranch-cheap @gol
636-msplit  -mno-split  -munix-asm  -mdec-asm}
637
638@emph{Xstormy16 Options}
639@gccoptlist{-msim}
640
641@emph{Xtensa Options}
642@gccoptlist{-mconst16 -mno-const16 @gol
643-mfused-madd  -mno-fused-madd @gol
644-mtext-section-literals  -mno-text-section-literals @gol
645-mtarget-align  -mno-target-align @gol
646-mlongcalls  -mno-longcalls}
647
648@emph{FRV Options}
649@gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
650-mhard-float  -msoft-float @gol
651-malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
652-mdouble  -mno-double @gol
653-mmedia  -mno-media  -mmuladd  -mno-muladd @gol
654-mlibrary-pic  -macc-4 -macc-8 @gol
655-mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
656-mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
657-mvliw-branch  -mno-vliw-branch @gol
658-mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
659-mno-nested-cond-exec  -mtomcat-stats @gol
660-mcpu=@var{cpu}}
661
662@item Code Generation Options
663@xref{Code Gen Options,,Options for Code Generation Conventions}.
664@gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
665-ffixed-@var{reg}  -fexceptions @gol
666-fnon-call-exceptions  -funwind-tables @gol
667-fasynchronous-unwind-tables @gol
668-finhibit-size-directive  -finstrument-functions @gol
669-fno-common  -fno-ident @gol
670-fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
671-freg-struct-return  -fshared-data  -fshort-enums @gol
672-fshort-double  -fshort-wchar @gol
673-fverbose-asm  -fpack-struct  -fstack-check @gol
674-fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
675-fargument-alias  -fargument-noalias @gol
676-fargument-noalias-global  -fleading-underscore @gol
677-ftls-model=@var{model} @gol
678-ftrapv  -fwrapv  -fbounds-check}
679@end table
680
681@menu
682* Overall Options::     Controlling the kind of output:
683                        an executable, object files, assembler files,
684                        or preprocessed source.
685* C Dialect Options::   Controlling the variant of C language compiled.
686* C++ Dialect Options:: Variations on C++.
687* Objective-C Dialect Options:: Variations on Objective-C.
688* Language Independent Options:: Controlling how diagnostics should be
689                        formatted.
690* Warning Options::     How picky should the compiler be?
691* Debugging Options::   Symbol tables, measurements, and debugging dumps.
692* Optimize Options::    How much optimization?
693* Preprocessor Options:: Controlling header files and macro definitions.
694                         Also, getting dependency information for Make.
695* Assembler Options::   Passing options to the assembler.
696* Link Options::        Specifying libraries and so on.
697* Directory Options::   Where to find header files and libraries.
698                        Where to find the compiler executable files.
699* Spec Files::          How to pass switches to sub-processes.
700* Target Options::      Running a cross-compiler, or an old version of GCC.
701@end menu
702
703@node Overall Options
704@section Options Controlling the Kind of Output
705
706Compilation can involve up to four stages: preprocessing, compilation
707proper, assembly and linking, always in that order.  GCC is capable of
708preprocessing and compiling several files either into several
709assembler input files, or into one assembler input file; then each
710assembler input file produces an object file, and linking combines all
711the object files (those newly compiled, and those specified as input)
712into an executable file.
713
714@cindex file name suffix
715For any given input file, the file name suffix determines what kind of
716compilation is done:
717
718@table @gcctabopt
719@item @var{file}.c
720C source code which must be preprocessed.
721
722@item @var{file}.i
723C source code which should not be preprocessed.
724
725@item @var{file}.ii
726C++ source code which should not be preprocessed.
727
728@item @var{file}.m
729Objective-C source code.  Note that you must link with the library
730@file{libobjc.a} to make an Objective-C program work.
731
732@item @var{file}.mi
733Objective-C source code which should not be preprocessed.
734
735@item @var{file}.h
736C or C++ header file to be turned into a precompiled header.
737
738@item @var{file}.cc
739@itemx @var{file}.cp
740@itemx @var{file}.cxx
741@itemx @var{file}.cpp
742@itemx @var{file}.CPP
743@itemx @var{file}.c++
744@itemx @var{file}.C
745C++ source code which must be preprocessed.  Note that in @samp{.cxx},
746the last two letters must both be literally @samp{x}.  Likewise,
747@samp{.C} refers to a literal capital C@.
748
749@item @var{file}.hh
750@itemx @var{file}.H
751C++ header file to be turned into a precompiled header.
752
753@item @var{file}.f
754@itemx @var{file}.for
755@itemx @var{file}.FOR
756Fortran source code which should not be preprocessed.
757
758@item @var{file}.F
759@itemx @var{file}.fpp
760@itemx @var{file}.FPP
761Fortran source code which must be preprocessed (with the traditional
762preprocessor).
763
764@item @var{file}.r
765Fortran source code which must be preprocessed with a RATFOR
766preprocessor (not included with GCC)@.
767
768@xref{Overall Options,,Options Controlling the Kind of Output, g77,
769Using and Porting GNU Fortran}, for more details of the handling of
770Fortran input files.
771
772@c FIXME: Descriptions of Java file types.
773@c @var{file}.java
774@c @var{file}.class
775@c @var{file}.zip
776@c @var{file}.jar
777
778@item @var{file}.ads
779Ada source code file which contains a library unit declaration (a
780declaration of a package, subprogram, or generic, or a generic
781instantiation), or a library unit renaming declaration (a package,
782generic, or subprogram renaming declaration).  Such files are also
783called @dfn{specs}.
784
785@itemx @var{file}.adb
786Ada source code file containing a library unit body (a subprogram or
787package body).  Such files are also called @dfn{bodies}.
788
789@c GCC also knows about some suffixes for languages not yet included:
790@c Pascal:
791@c @var{file}.p
792@c @var{file}.pas
793
794@item @var{file}.s
795Assembler code.
796
797@item @var{file}.S
798Assembler code which must be preprocessed.
799
800@item @var{other}
801An object file to be fed straight into linking.
802Any file name with no recognized suffix is treated this way.
803@end table
804
805@opindex x
806You can specify the input language explicitly with the @option{-x} option:
807
808@table @gcctabopt
809@item -x @var{language}
810Specify explicitly the @var{language} for the following input files
811(rather than letting the compiler choose a default based on the file
812name suffix).  This option applies to all following input files until
813the next @option{-x} option.  Possible values for @var{language} are:
814@smallexample
815c  c-header  cpp-output
816c++  c++-header  c++-cpp-output
817objective-c  objective-c-header  objc-cpp-output
818assembler  assembler-with-cpp
819ada
820f77  f77-cpp-input  ratfor
821java
822treelang
823@end smallexample
824
825@item -x none
826Turn off any specification of a language, so that subsequent files are
827handled according to their file name suffixes (as they are if @option{-x}
828has not been used at all).
829
830@item -pass-exit-codes
831@opindex pass-exit-codes
832Normally the @command{gcc} program will exit with the code of 1 if any
833phase of the compiler returns a non-success return code.  If you specify
834@option{-pass-exit-codes}, the @command{gcc} program will instead return with
835numerically highest error produced by any phase that returned an error
836indication.
837@end table
838
839If you only want some of the stages of compilation, you can use
840@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
841one of the options @option{-c}, @option{-S}, or @option{-E} to say where
842@command{gcc} is to stop.  Note that some combinations (for example,
843@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
844
845@table @gcctabopt
846@item -c
847@opindex c
848Compile or assemble the source files, but do not link.  The linking
849stage simply is not done.  The ultimate output is in the form of an
850object file for each source file.
851
852By default, the object file name for a source file is made by replacing
853the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
854
855Unrecognized input files, not requiring compilation or assembly, are
856ignored.
857
858@item -S
859@opindex S
860Stop after the stage of compilation proper; do not assemble.  The output
861is in the form of an assembler code file for each non-assembler input
862file specified.
863
864By default, the assembler file name for a source file is made by
865replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
866
867Input files that don't require compilation are ignored.
868
869@item -E
870@opindex E
871Stop after the preprocessing stage; do not run the compiler proper.  The
872output is in the form of preprocessed source code, which is sent to the
873standard output.
874
875Input files which don't require preprocessing are ignored.
876
877@cindex output file option
878@item -o @var{file}
879@opindex o
880Place output in file @var{file}.  This applies regardless to whatever
881sort of output is being produced, whether it be an executable file,
882an object file, an assembler file or preprocessed C code.
883
884If you specify @option{-o} when compiling more than one input file, or
885you are producing an executable file as output, all the source files
886on the command line will be compiled at once.
887
888If @option{-o} is not specified, the default is to put an executable file
889in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
890@file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
891all preprocessed C source on standard output.
892
893@item -v
894@opindex v
895Print (on standard error output) the commands executed to run the stages
896of compilation.  Also print the version number of the compiler driver
897program and of the preprocessor and the compiler proper.
898
899@item -###
900@opindex ###
901Like @option{-v} except the commands are not executed and all command
902arguments are quoted.  This is useful for shell scripts to capture the
903driver-generated command lines.
904
905@item -pipe
906@opindex pipe
907Use pipes rather than temporary files for communication between the
908various stages of compilation.  This fails to work on some systems where
909the assembler is unable to read from a pipe; but the GNU assembler has
910no trouble.
911
912@item --help
913@opindex help
914Print (on the standard output) a description of the command line options
915understood by @command{gcc}.  If the @option{-v} option is also specified
916then @option{--help} will also be passed on to the various processes
917invoked by @command{gcc}, so that they can display the command line options
918they accept.  If the @option{-Wextra} option is also specified then command
919line options which have no documentation associated with them will also
920be displayed.
921
922@item --target-help
923@opindex target-help
924Print (on the standard output) a description of target specific command
925line options for each tool.
926
927@item --version
928@opindex version
929Display the version number and copyrights of the invoked GCC.
930@end table
931
932@node Invoking G++
933@section Compiling C++ Programs
934
935@cindex suffixes for C++ source
936@cindex C++ source file suffixes
937C++ source files conventionally use one of the suffixes @samp{.C},
938@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
939@samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and
940preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
941files with these names and compiles them as C++ programs even if you
942call the compiler the same way as for compiling C programs (usually
943with the name @command{gcc}).
944
945@findex g++
946@findex c++
947However, C++ programs often require class libraries as well as a
948compiler that understands the C++ language---and under some
949circumstances, you might want to compile programs or header files from
950standard input, or otherwise without a suffix that flags them as C++
951programs.  You might also like to precompile a C header file with a
952@samp{.h} extension to be used in C++ compilations.  @command{g++} is a
953program that calls GCC with the default language set to C++, and
954automatically specifies linking against the C++ library.  On many
955systems, @command{g++} is also installed with the name @command{c++}.
956
957@cindex invoking @command{g++}
958When you compile C++ programs, you may specify many of the same
959command-line options that you use for compiling programs in any
960language; or command-line options meaningful for C and related
961languages; or options that are meaningful only for C++ programs.
962@xref{C Dialect Options,,Options Controlling C Dialect}, for
963explanations of options for languages related to C@.
964@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
965explanations of options that are meaningful only for C++ programs.
966
967@node C Dialect Options
968@section Options Controlling C Dialect
969@cindex dialect options
970@cindex language dialect options
971@cindex options, dialect
972
973The following options control the dialect of C (or languages derived
974from C, such as C++ and Objective-C) that the compiler accepts:
975
976@table @gcctabopt
977@cindex ANSI support
978@cindex ISO support
979@item -ansi
980@opindex ansi
981In C mode, support all ISO C90 programs.  In C++ mode,
982remove GNU extensions that conflict with ISO C++.
983
984This turns off certain features of GCC that are incompatible with ISO
985C90 (when compiling C code), or of standard C++ (when compiling C++ code),
986such as the @code{asm} and @code{typeof} keywords, and
987predefined macros such as @code{unix} and @code{vax} that identify the
988type of system you are using.  It also enables the undesirable and
989rarely used ISO trigraph feature.  For the C compiler,
990it disables recognition of C++ style @samp{//} comments as well as
991the @code{inline} keyword.
992
993The alternate keywords @code{__asm__}, @code{__extension__},
994@code{__inline__} and @code{__typeof__} continue to work despite
995@option{-ansi}.  You would not want to use them in an ISO C program, of
996course, but it is useful to put them in header files that might be included
997in compilations done with @option{-ansi}.  Alternate predefined macros
998such as @code{__unix__} and @code{__vax__} are also available, with or
999without @option{-ansi}.
1000
1001The @option{-ansi} option does not cause non-ISO programs to be
1002rejected gratuitously.  For that, @option{-pedantic} is required in
1003addition to @option{-ansi}.  @xref{Warning Options}.
1004
1005The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1006option is used.  Some header files may notice this macro and refrain
1007from declaring certain functions or defining certain macros that the
1008ISO standard doesn't call for; this is to avoid interfering with any
1009programs that might use these names for other things.
1010
1011Functions which would normally be built in but do not have semantics
1012defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1013functions with @option{-ansi} is used.  @xref{Other Builtins,,Other
1014built-in functions provided by GCC}, for details of the functions
1015affected.
1016
1017@item -std=
1018@opindex std
1019Determine the language standard.  This option is currently only
1020supported when compiling C or C++.  A value for this option must be
1021provided; possible values are
1022
1023@table @samp
1024@item c89
1025@itemx iso9899:1990
1026ISO C90 (same as @option{-ansi}).
1027
1028@item iso9899:199409
1029ISO C90 as modified in amendment 1.
1030
1031@item c99
1032@itemx c9x
1033@itemx iso9899:1999
1034@itemx iso9899:199x
1035ISO C99.  Note that this standard is not yet fully supported; see
1036@w{@uref{http://gcc.gnu.org/gcc-3.4/c99status.html}} for more information.  The
1037names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1038
1039@item gnu89
1040Default, ISO C90 plus GNU extensions (including some C99 features).
1041
1042@item gnu99
1043@itemx gnu9x
1044ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
1045this will become the default.  The name @samp{gnu9x} is deprecated.
1046
1047@item c++98
1048The 1998 ISO C++ standard plus amendments.
1049
1050@item gnu++98
1051The same as @option{-std=c++98} plus GNU extensions.  This is the
1052default for C++ code.
1053@end table
1054
1055Even when this option is not specified, you can still use some of the
1056features of newer standards in so far as they do not conflict with
1057previous C standards.  For example, you may use @code{__restrict__} even
1058when @option{-std=c99} is not specified.
1059
1060The @option{-std} options specifying some version of ISO C have the same
1061effects as @option{-ansi}, except that features that were not in ISO C90
1062but are in the specified version (for example, @samp{//} comments and
1063the @code{inline} keyword in ISO C99) are not disabled.
1064
1065@xref{Standards,,Language Standards Supported by GCC}, for details of
1066these standard versions.
1067
1068@item -aux-info @var{filename}
1069@opindex aux-info
1070Output to the given filename prototyped declarations for all functions
1071declared and/or defined in a translation unit, including those in header
1072files.  This option is silently ignored in any language other than C@.
1073
1074Besides declarations, the file indicates, in comments, the origin of
1075each declaration (source file and line), whether the declaration was
1076implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1077@samp{O} for old, respectively, in the first character after the line
1078number and the colon), and whether it came from a declaration or a
1079definition (@samp{C} or @samp{F}, respectively, in the following
1080character).  In the case of function definitions, a K&R-style list of
1081arguments followed by their declarations is also provided, inside
1082comments, after the declaration.
1083
1084@item -fno-asm
1085@opindex fno-asm
1086Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1087keyword, so that code can use these words as identifiers.  You can use
1088the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1089instead.  @option{-ansi} implies @option{-fno-asm}.
1090
1091In C++, this switch only affects the @code{typeof} keyword, since
1092@code{asm} and @code{inline} are standard keywords.  You may want to
1093use the @option{-fno-gnu-keywords} flag instead, which has the same
1094effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1095switch only affects the @code{asm} and @code{typeof} keywords, since
1096@code{inline} is a standard keyword in ISO C99.
1097
1098@item -fno-builtin
1099@itemx -fno-builtin-@var{function}
1100@opindex fno-builtin
1101@cindex built-in functions
1102Don't recognize built-in functions that do not begin with
1103@samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1104functions provided by GCC}, for details of the functions affected,
1105including those which are not built-in functions when @option{-ansi} or
1106@option{-std} options for strict ISO C conformance are used because they
1107do not have an ISO standard meaning.
1108
1109GCC normally generates special code to handle certain built-in functions
1110more efficiently; for instance, calls to @code{alloca} may become single
1111instructions that adjust the stack directly, and calls to @code{memcpy}
1112may become inline copy loops.  The resulting code is often both smaller
1113and faster, but since the function calls no longer appear as such, you
1114cannot set a breakpoint on those calls, nor can you change the behavior
1115of the functions by linking with a different library.
1116
1117With the @option{-fno-builtin-@var{function}} option
1118only the built-in function @var{function} is
1119disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1120function is named this is not built-in in this version of GCC, this
1121option is ignored.  There is no corresponding
1122@option{-fbuiltin-@var{function}} option; if you wish to enable
1123built-in functions selectively when using @option{-fno-builtin} or
1124@option{-ffreestanding}, you may define macros such as:
1125
1126@smallexample
1127#define abs(n)          __builtin_abs ((n))
1128#define strcpy(d, s)    __builtin_strcpy ((d), (s))
1129@end smallexample
1130
1131@item -fhosted
1132@opindex fhosted
1133@cindex hosted environment
1134
1135Assert that compilation takes place in a hosted environment.  This implies
1136@option{-fbuiltin}.  A hosted environment is one in which the
1137entire standard library is available, and in which @code{main} has a return
1138type of @code{int}.  Examples are nearly everything except a kernel.
1139This is equivalent to @option{-fno-freestanding}.
1140
1141@item -ffreestanding
1142@opindex ffreestanding
1143@cindex hosted environment
1144
1145Assert that compilation takes place in a freestanding environment.  This
1146implies @option{-fno-builtin}.  A freestanding environment
1147is one in which the standard library may not exist, and program startup may
1148not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1149This is equivalent to @option{-fno-hosted}.
1150
1151@xref{Standards,,Language Standards Supported by GCC}, for details of
1152freestanding and hosted environments.
1153
1154@item -fms-extensions
1155@opindex fms-extensions
1156Accept some non-standard constructs used in Microsoft header files.
1157
1158@item -trigraphs
1159@opindex trigraphs
1160Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1161options for strict ISO C conformance) implies @option{-trigraphs}.
1162
1163@item -no-integrated-cpp
1164@opindex no-integrated-cpp
1165Performs a compilation in two passes: preprocessing and compiling.  This
1166option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1167@option{-B} option. The user supplied compilation step can then add in
1168an additional preprocessing step after normal preprocessing but before
1169compiling. The default is to use the integrated cpp (internal cpp)
1170
1171The semantics of this option will change if "cc1", "cc1plus", and
1172"cc1obj" are merged.
1173
1174@cindex traditional C language
1175@cindex C language, traditional
1176@item -traditional
1177@itemx -traditional-cpp
1178@opindex traditional-cpp
1179@opindex traditional
1180Formerly, these options caused GCC to attempt to emulate a pre-standard
1181C compiler.  They are now only supported with the @option{-E} switch.
1182The preprocessor continues to support a pre-standard mode.  See the GNU
1183CPP manual for details.
1184
1185@item -fcond-mismatch
1186@opindex fcond-mismatch
1187Allow conditional expressions with mismatched types in the second and
1188third arguments.  The value of such an expression is void.  This option
1189is not supported for C++.
1190
1191@item -funsigned-char
1192@opindex funsigned-char
1193Let the type @code{char} be unsigned, like @code{unsigned char}.
1194
1195Each kind of machine has a default for what @code{char} should
1196be.  It is either like @code{unsigned char} by default or like
1197@code{signed char} by default.
1198
1199Ideally, a portable program should always use @code{signed char} or
1200@code{unsigned char} when it depends on the signedness of an object.
1201But many programs have been written to use plain @code{char} and
1202expect it to be signed, or expect it to be unsigned, depending on the
1203machines they were written for.  This option, and its inverse, let you
1204make such a program work with the opposite default.
1205
1206The type @code{char} is always a distinct type from each of
1207@code{signed char} or @code{unsigned char}, even though its behavior
1208is always just like one of those two.
1209
1210@item -fsigned-char
1211@opindex fsigned-char
1212Let the type @code{char} be signed, like @code{signed char}.
1213
1214Note that this is equivalent to @option{-fno-unsigned-char}, which is
1215the negative form of @option{-funsigned-char}.  Likewise, the option
1216@option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1217
1218@item -fsigned-bitfields
1219@itemx -funsigned-bitfields
1220@itemx -fno-signed-bitfields
1221@itemx -fno-unsigned-bitfields
1222@opindex fsigned-bitfields
1223@opindex funsigned-bitfields
1224@opindex fno-signed-bitfields
1225@opindex fno-unsigned-bitfields
1226These options control whether a bit-field is signed or unsigned, when the
1227declaration does not use either @code{signed} or @code{unsigned}.  By
1228default, such a bit-field is signed, because this is consistent: the
1229basic integer types such as @code{int} are signed types.
1230
1231@item -fwritable-strings
1232@opindex fwritable-strings
1233Store string constants in the writable data segment and don't uniquize
1234them.  This is for compatibility with old programs which assume they can
1235write into string constants.
1236
1237Writing into string constants is a very bad idea; ``constants'' should
1238be constant.
1239
1240This option is deprecated.
1241@end table
1242
1243@node C++ Dialect Options
1244@section Options Controlling C++ Dialect
1245
1246@cindex compiler options, C++
1247@cindex C++ options, command line
1248@cindex options, C++
1249This section describes the command-line options that are only meaningful
1250for C++ programs; but you can also use most of the GNU compiler options
1251regardless of what language your program is in.  For example, you
1252might compile a file @code{firstClass.C} like this:
1253
1254@smallexample
1255g++ -g -frepo -O -c firstClass.C
1256@end smallexample
1257
1258@noindent
1259In this example, only @option{-frepo} is an option meant
1260only for C++ programs; you can use the other options with any
1261language supported by GCC@.
1262
1263Here is a list of options that are @emph{only} for compiling C++ programs:
1264
1265@table @gcctabopt
1266
1267@item -fabi-version=@var{n}
1268@opindex fabi-version
1269Use version @var{n} of the C++ ABI.  Version 2 is the version of the
1270C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1271the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1272the version that conforms most closely to the C++ ABI specification.
1273Therefore, the ABI obtained using version 0 will change as ABI bugs
1274are fixed.
1275
1276The default is version 2.
1277
1278@item -fno-access-control
1279@opindex fno-access-control
1280Turn off all access checking.  This switch is mainly useful for working
1281around bugs in the access control code.
1282
1283@item -fcheck-new
1284@opindex fcheck-new
1285Check that the pointer returned by @code{operator new} is non-null
1286before attempting to modify the storage allocated.  This check is
1287normally unnecessary because the C++ standard specifies that
1288@code{operator new} will only return @code{0} if it is declared
1289@samp{throw()}, in which case the compiler will always check the
1290return value even without this option.  In all other cases, when
1291@code{operator new} has a non-empty exception specification, memory
1292exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1293@samp{new (nothrow)}.
1294
1295@item -fconserve-space
1296@opindex fconserve-space
1297Put uninitialized or runtime-initialized global variables into the
1298common segment, as C does.  This saves space in the executable at the
1299cost of not diagnosing duplicate definitions.  If you compile with this
1300flag and your program mysteriously crashes after @code{main()} has
1301completed, you may have an object that is being destroyed twice because
1302two definitions were merged.
1303
1304This option is no longer useful on most targets, now that support has
1305been added for putting variables into BSS without making them common.
1306
1307@item -fno-const-strings
1308@opindex fno-const-strings
1309Give string constants type @code{char *} instead of type @code{const
1310char *}.  By default, G++ uses type @code{const char *} as required by
1311the standard.  Even if you use @option{-fno-const-strings}, you cannot
1312actually modify the value of a string constant, unless you also use
1313@option{-fwritable-strings}.
1314
1315This option might be removed in a future release of G++.  For maximum
1316portability, you should structure your code so that it works with
1317string constants that have type @code{const char *}.
1318
1319@item -fno-elide-constructors
1320@opindex fno-elide-constructors
1321The C++ standard allows an implementation to omit creating a temporary
1322which is only used to initialize another object of the same type.
1323Specifying this option disables that optimization, and forces G++ to
1324call the copy constructor in all cases.
1325
1326@item -fno-enforce-eh-specs
1327@opindex fno-enforce-eh-specs
1328Don't check for violation of exception specifications at runtime.  This
1329option violates the C++ standard, but may be useful for reducing code
1330size in production builds, much like defining @samp{NDEBUG}.  The compiler
1331will still optimize based on the exception specifications.
1332
1333@item -ffor-scope
1334@itemx -fno-for-scope
1335@opindex ffor-scope
1336@opindex fno-for-scope
1337If @option{-ffor-scope} is specified, the scope of variables declared in
1338a @i{for-init-statement} is limited to the @samp{for} loop itself,
1339as specified by the C++ standard.
1340If @option{-fno-for-scope} is specified, the scope of variables declared in
1341a @i{for-init-statement} extends to the end of the enclosing scope,
1342as was the case in old versions of G++, and other (traditional)
1343implementations of C++.
1344
1345The default if neither flag is given to follow the standard,
1346but to allow and give a warning for old-style code that would
1347otherwise be invalid, or have different behavior.
1348
1349@item -fno-gnu-keywords
1350@opindex fno-gnu-keywords
1351Do not recognize @code{typeof} as a keyword, so that code can use this
1352word as an identifier.  You can use the keyword @code{__typeof__} instead.
1353@option{-ansi} implies @option{-fno-gnu-keywords}.
1354
1355@item -fno-implicit-templates
1356@opindex fno-implicit-templates
1357Never emit code for non-inline templates which are instantiated
1358implicitly (i.e.@: by use); only emit code for explicit instantiations.
1359@xref{Template Instantiation}, for more information.
1360
1361@item -fno-implicit-inline-templates
1362@opindex fno-implicit-inline-templates
1363Don't emit code for implicit instantiations of inline templates, either.
1364The default is to handle inlines differently so that compiles with and
1365without optimization will need the same set of explicit instantiations.
1366
1367@item -fno-implement-inlines
1368@opindex fno-implement-inlines
1369To save space, do not emit out-of-line copies of inline functions
1370controlled by @samp{#pragma implementation}.  This will cause linker
1371errors if these functions are not inlined everywhere they are called.
1372
1373@item -fms-extensions
1374@opindex fms-extensions
1375Disable pedantic warnings about constructs used in MFC, such as implicit
1376int and getting a pointer to member function via non-standard syntax.
1377
1378@item -fno-nonansi-builtins
1379@opindex fno-nonansi-builtins
1380Disable built-in declarations of functions that are not mandated by
1381ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1382@code{index}, @code{bzero}, @code{conjf}, and other related functions.
1383
1384@item -fno-operator-names
1385@opindex fno-operator-names
1386Do not treat the operator name keywords @code{and}, @code{bitand},
1387@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1388synonyms as keywords.
1389
1390@item -fno-optional-diags
1391@opindex fno-optional-diags
1392Disable diagnostics that the standard says a compiler does not need to
1393issue.  Currently, the only such diagnostic issued by G++ is the one for
1394a name having multiple meanings within a class.
1395
1396@item -fpermissive
1397@opindex fpermissive
1398Downgrade some diagnostics about nonconformant code from errors to
1399warnings.  Thus, using @option{-fpermissive} will allow some
1400nonconforming code to compile.
1401
1402@item -frepo
1403@opindex frepo
1404Enable automatic template instantiation at link time.  This option also
1405implies @option{-fno-implicit-templates}.  @xref{Template
1406Instantiation}, for more information.
1407
1408@item -fno-rtti
1409@opindex fno-rtti
1410Disable generation of information about every class with virtual
1411functions for use by the C++ runtime type identification features
1412(@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1413of the language, you can save some space by using this flag.  Note that
1414exception handling uses the same information, but it will generate it as
1415needed.
1416
1417@item -fstats
1418@opindex fstats
1419Emit statistics about front-end processing at the end of the compilation.
1420This information is generally only useful to the G++ development team.
1421
1422@item -ftemplate-depth-@var{n}
1423@opindex ftemplate-depth
1424Set the maximum instantiation depth for template classes to @var{n}.
1425A limit on the template instantiation depth is needed to detect
1426endless recursions during template class instantiation.  ANSI/ISO C++
1427conforming programs must not rely on a maximum depth greater than 17.
1428
1429@item -fuse-cxa-atexit
1430@opindex fuse-cxa-atexit
1431Register destructors for objects with static storage duration with the
1432@code{__cxa_atexit} function rather than the @code{atexit} function.
1433This option is required for fully standards-compliant handling of static
1434destructors, but will only work if your C library supports
1435@code{__cxa_atexit}.
1436
1437@item -fno-weak
1438@opindex fno-weak
1439Do not use weak symbol support, even if it is provided by the linker.
1440By default, G++ will use weak symbols if they are available.  This
1441option exists only for testing, and should not be used by end-users;
1442it will result in inferior code and has no benefits.  This option may
1443be removed in a future release of G++.
1444
1445@item -nostdinc++
1446@opindex nostdinc++
1447Do not search for header files in the standard directories specific to
1448C++, but do still search the other standard directories.  (This option
1449is used when building the C++ library.)
1450@end table
1451
1452In addition, these optimization, warning, and code generation options
1453have meanings only for C++ programs:
1454
1455@table @gcctabopt
1456@item -fno-default-inline
1457@opindex fno-default-inline
1458Do not assume @samp{inline} for functions defined inside a class scope.
1459@xref{Optimize Options,,Options That Control Optimization}.  Note that these
1460functions will have linkage like inline functions; they just won't be
1461inlined by default.
1462
1463@item -Wabi @r{(C++ only)}
1464@opindex Wabi
1465Warn when G++ generates code that is probably not compatible with the
1466vendor-neutral C++ ABI.  Although an effort has been made to warn about
1467all such cases, there are probably some cases that are not warned about,
1468even though G++ is generating incompatible code.  There may also be
1469cases where warnings are emitted even though the code that is generated
1470will be compatible.
1471
1472You should rewrite your code to avoid these warnings if you are
1473concerned about the fact that code generated by G++ may not be binary
1474compatible with code generated by other compilers.
1475
1476The known incompatibilities at this point include:
1477
1478@itemize @bullet
1479
1480@item
1481Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
1482pack data into the same byte as a base class.  For example:
1483
1484@smallexample
1485struct A @{ virtual void f(); int f1 : 1; @};
1486struct B : public A @{ int f2 : 1; @};
1487@end smallexample
1488
1489@noindent
1490In this case, G++ will place @code{B::f2} into the same byte
1491as@code{A::f1}; other compilers will not.  You can avoid this problem
1492by explicitly padding @code{A} so that its size is a multiple of the
1493byte size on your platform; that will cause G++ and other compilers to
1494layout @code{B} identically.
1495
1496@item
1497Incorrect handling of tail-padding for virtual bases.  G++ does not use
1498tail padding when laying out virtual bases.  For example:
1499
1500@smallexample
1501struct A @{ virtual void f(); char c1; @};
1502struct B @{ B(); char c2; @};
1503struct C : public A, public virtual B @{@};
1504@end smallexample
1505
1506@noindent
1507In this case, G++ will not place @code{B} into the tail-padding for
1508@code{A}; other compilers will.  You can avoid this problem by
1509explicitly padding @code{A} so that its size is a multiple of its
1510alignment (ignoring virtual base classes); that will cause G++ and other
1511compilers to layout @code{C} identically.
1512
1513@item
1514Incorrect handling of bit-fields with declared widths greater than that
1515of their underlying types, when the bit-fields appear in a union.  For
1516example:
1517
1518@smallexample
1519union U @{ int i : 4096; @};
1520@end smallexample
1521
1522@noindent
1523Assuming that an @code{int} does not have 4096 bits, G++ will make the
1524union too small by the number of bits in an @code{int}.
1525
1526@item
1527Empty classes can be placed at incorrect offsets.  For example:
1528
1529@smallexample
1530struct A @{@};
1531
1532struct B @{
1533  A a;
1534  virtual void f ();
1535@};
1536
1537struct C : public B, public A @{@};
1538@end smallexample
1539
1540@noindent
1541G++ will place the @code{A} base class of @code{C} at a nonzero offset;
1542it should be placed at offset zero.  G++ mistakenly believes that the
1543@code{A} data member of @code{B} is already at offset zero.
1544
1545@item
1546Names of template functions whose types involve @code{typename} or
1547template template parameters can be mangled incorrectly.
1548
1549@smallexample
1550template <typename Q>
1551void f(typename Q::X) @{@}
1552
1553template <template <typename> class Q>
1554void f(typename Q<int>::X) @{@}
1555@end smallexample
1556
1557@noindent
1558Instantiations of these templates may be mangled incorrectly.
1559
1560@end itemize
1561
1562@item -Wctor-dtor-privacy @r{(C++ only)}
1563@opindex Wctor-dtor-privacy
1564Warn when a class seems unusable because all the constructors or
1565destructors in that class are private, and it has neither friends nor
1566public static member functions.
1567
1568@item -Wnon-virtual-dtor @r{(C++ only)}
1569@opindex Wnon-virtual-dtor
1570Warn when a class appears to be polymorphic, thereby requiring a virtual
1571destructor, yet it declares a non-virtual one.
1572This warning is enabled by @option{-Wall}.
1573
1574@item -Wreorder @r{(C++ only)}
1575@opindex Wreorder
1576@cindex reordering, warning
1577@cindex warning for reordering of member initializers
1578Warn when the order of member initializers given in the code does not
1579match the order in which they must be executed.  For instance:
1580
1581@smallexample
1582struct A @{
1583  int i;
1584  int j;
1585  A(): j (0), i (1) @{ @}
1586@};
1587@end smallexample
1588
1589The compiler will rearrange the member initializers for @samp{i}
1590and @samp{j} to match the declaration order of the members, emitting
1591a warning to that effect.  This warning is enabled by @option{-Wall}.
1592@end table
1593
1594The following @option{-W@dots{}} options are not affected by @option{-Wall}.
1595
1596@table @gcctabopt
1597@item -Weffc++ @r{(C++ only)}
1598@opindex Weffc++
1599Warn about violations of the following style guidelines from Scott Meyers'
1600@cite{Effective C++} book:
1601
1602@itemize @bullet
1603@item
1604Item 11:  Define a copy constructor and an assignment operator for classes
1605with dynamically allocated memory.
1606
1607@item
1608Item 12:  Prefer initialization to assignment in constructors.
1609
1610@item
1611Item 14:  Make destructors virtual in base classes.
1612
1613@item
1614Item 15:  Have @code{operator=} return a reference to @code{*this}.
1615
1616@item
1617Item 23:  Don't try to return a reference when you must return an object.
1618
1619@end itemize
1620
1621Also warn about violations of the following style guidelines from
1622Scott Meyers' @cite{More Effective C++} book:
1623
1624@itemize @bullet
1625@item
1626Item 6:  Distinguish between prefix and postfix forms of increment and
1627decrement operators.
1628
1629@item
1630Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
1631
1632@end itemize
1633
1634When selecting this option, be aware that the standard library
1635headers do not obey all of these guidelines; use @samp{grep -v}
1636to filter out those warnings.
1637
1638@item -Wno-deprecated @r{(C++ only)}
1639@opindex Wno-deprecated
1640Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
1641
1642@item -Wno-non-template-friend @r{(C++ only)}
1643@opindex Wno-non-template-friend
1644Disable warnings when non-templatized friend functions are declared
1645within a template.  Since the advent of explicit template specification
1646support in G++, if the name of the friend is an unqualified-id (i.e.,
1647@samp{friend foo(int)}), the C++ language specification demands that the
1648friend declare or define an ordinary, nontemplate function.  (Section
164914.5.3).  Before G++ implemented explicit specification, unqualified-ids
1650could be interpreted as a particular specialization of a templatized
1651function.  Because this non-conforming behavior is no longer the default
1652behavior for G++, @option{-Wnon-template-friend} allows the compiler to
1653check existing code for potential trouble spots and is on by default.
1654This new compiler behavior can be turned off with
1655@option{-Wno-non-template-friend} which keeps the conformant compiler code
1656but disables the helpful warning.
1657
1658@item -Wold-style-cast @r{(C++ only)}
1659@opindex Wold-style-cast
1660Warn if an old-style (C-style) cast to a non-void type is used within
1661a C++ program.  The new-style casts (@samp{static_cast},
1662@samp{reinterpret_cast}, and @samp{const_cast}) are less vulnerable to
1663unintended effects and much easier to search for.
1664
1665@item -Woverloaded-virtual @r{(C++ only)}
1666@opindex Woverloaded-virtual
1667@cindex overloaded virtual fn, warning
1668@cindex warning for overloaded virtual fn
1669Warn when a function declaration hides virtual functions from a
1670base class.  For example, in:
1671
1672@smallexample
1673struct A @{
1674  virtual void f();
1675@};
1676
1677struct B: public A @{
1678  void f(int);
1679@};
1680@end smallexample
1681
1682the @code{A} class version of @code{f} is hidden in @code{B}, and code
1683like:
1684
1685@smallexample
1686B* b;
1687b->f();
1688@end smallexample
1689
1690will fail to compile.
1691
1692@item -Wno-pmf-conversions @r{(C++ only)}
1693@opindex Wno-pmf-conversions
1694Disable the diagnostic for converting a bound pointer to member function
1695to a plain pointer.
1696
1697@item -Wsign-promo @r{(C++ only)}
1698@opindex Wsign-promo
1699Warn when overload resolution chooses a promotion from unsigned or
1700enumerated type to a signed type, over a conversion to an unsigned type of
1701the same size.  Previous versions of G++ would try to preserve
1702unsignedness, but the standard mandates the current behavior.
1703
1704@item -Wsynth @r{(C++ only)}
1705@opindex Wsynth
1706@cindex warning for synthesized methods
1707@cindex synthesized methods, warning
1708Warn when G++'s synthesis behavior does not match that of cfront.  For
1709instance:
1710
1711@smallexample
1712struct A @{
1713  operator int ();
1714  A& operator = (int);
1715@};
1716
1717main ()
1718@{
1719  A a,b;
1720  a = b;
1721@}
1722@end smallexample
1723
1724In this example, G++ will synthesize a default @samp{A& operator =
1725(const A&);}, while cfront will use the user-defined @samp{operator =}.
1726@end table
1727
1728@node Objective-C Dialect Options
1729@section Options Controlling Objective-C Dialect
1730
1731@cindex compiler options, Objective-C
1732@cindex Objective-C options, command line
1733@cindex options, Objective-C
1734(NOTE: This manual does not describe the Objective-C language itself.  See
1735@w{@uref{http://gcc.gnu.org/readings.html}} for references.)
1736
1737This section describes the command-line options that are only meaningful
1738for Objective-C programs, but you can also use most of the GNU compiler
1739options regardless of what language your program is in.  For example,
1740you might compile a file @code{some_class.m} like this:
1741
1742@smallexample
1743gcc -g -fgnu-runtime -O -c some_class.m
1744@end smallexample
1745
1746@noindent
1747In this example, @option{-fgnu-runtime} is an option meant only for
1748Objective-C programs; you can use the other options with any language
1749supported by GCC@.
1750
1751Here is a list of options that are @emph{only} for compiling Objective-C
1752programs:
1753
1754@table @gcctabopt
1755@item -fconstant-string-class=@var{class-name}
1756@opindex fconstant-string-class
1757Use @var{class-name} as the name of the class to instantiate for each
1758literal string specified with the syntax @code{@@"@dots{}"}.  The default
1759class name is @code{NXConstantString} if the GNU runtime is being used, and
1760@code{NSConstantString} if the NeXT runtime is being used (see below).  The
1761@option{-fconstant-cfstrings} option, if also present, will override the
1762@option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
1763to be laid out as constant CoreFoundation strings.
1764
1765@item -fgnu-runtime
1766@opindex fgnu-runtime
1767Generate object code compatible with the standard GNU Objective-C
1768runtime.  This is the default for most types of systems.
1769
1770@item -fnext-runtime
1771@opindex fnext-runtime
1772Generate output compatible with the NeXT runtime.  This is the default
1773for NeXT-based systems, including Darwin and Mac OS X@.  The macro
1774@code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
1775used.
1776
1777@item -fno-nil-receivers
1778@opindex fno-nil-receivers
1779Assume that all Objective-C message dispatches (e.g.,
1780@code{[receiver message:arg]}) in this translation unit ensure that the receiver
1781is not @code{nil}.  This allows for more efficient entry points in the runtime to be
1782used.  Currently, this option is only available in conjunction with
1783the NeXT runtime on Mac OS X 10.3 and later.
1784
1785@item -fobjc-exceptions
1786@opindex fobjc-exceptions
1787Enable syntactic support for structured exception handling in Objective-C,
1788similar to what is offered by C++ and Java.  Currently, this option is only
1789available in conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1790
1791@smallexample
1792  @@try @{
1793    @dots{}
1794       @@throw expr;
1795    @dots{}
1796  @}
1797  @@catch (AnObjCClass *exc) @{
1798    @dots{}
1799      @@throw expr;
1800    @dots{}
1801      @@throw;
1802    @dots{}
1803  @}
1804  @@catch (AnotherClass *exc) @{
1805    @dots{}
1806  @}
1807  @@catch (id allOthers) @{
1808    @dots{}
1809  @}
1810  @@finally @{
1811    @dots{}
1812      @@throw expr;
1813    @dots{}
1814  @}
1815@end smallexample
1816
1817The @code{@@throw} statement may appear anywhere in an Objective-C or
1818Objective-C++ program; when used inside of a @code{@@catch} block, the
1819@code{@@throw} may appear without an argument (as shown above), in which case
1820the object caught by the @code{@@catch} will be rethrown.
1821
1822Note that only (pointers to) Objective-C objects may be thrown and
1823caught using this scheme.  When an object is thrown, it will be caught
1824by the nearest @code{@@catch} clause capable of handling objects of that type,
1825analogously to how @code{catch} blocks work in C++ and Java.  A
1826@code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
1827any and all Objective-C exceptions not caught by previous @code{@@catch}
1828clauses (if any).
1829
1830The @code{@@finally} clause, if present, will be executed upon exit from the
1831immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
1832regardless of whether any exceptions are thrown, caught or rethrown
1833inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
1834of the @code{finally} clause in Java.
1835
1836There are several caveats to using the new exception mechanism:
1837
1838@itemize @bullet
1839@item
1840Although currently designed to be binary compatible with @code{NS_HANDLER}-style
1841idioms provided by the @code{NSException} class, the new
1842exceptions can only be used on Mac OS X 10.3 (Panther) and later
1843systems, due to additional functionality needed in the (NeXT) Objective-C
1844runtime.
1845
1846@item
1847As mentioned above, the new exceptions do not support handling
1848types other than Objective-C objects.   Furthermore, when used from
1849Objective-C++, the Objective-C exception model does not interoperate with C++
1850exceptions at this time.  This means you cannot @code{@@throw} an exception
1851from Objective-C and @code{catch} it in C++, or vice versa
1852(i.e., @code{throw @dots{} @@catch}).
1853@end itemize
1854
1855The @option{-fobjc-exceptions} switch also enables the use of synchronization
1856blocks for thread-safe execution:
1857
1858@smallexample
1859  @@synchronized (ObjCClass *guard) @{
1860    @dots{}
1861  @}
1862@end smallexample
1863
1864Upon entering the @code{@@synchronized} block, a thread of execution shall
1865first check whether a lock has been placed on the corresponding @code{guard}
1866object by another thread.  If it has, the current thread shall wait until
1867the other thread relinquishes its lock.  Once @code{guard} becomes available,
1868the current thread will place its own lock on it, execute the code contained in
1869the @code{@@synchronized} block, and finally relinquish the lock (thereby
1870making @code{guard} available to other threads).
1871
1872Unlike Java, Objective-C does not allow for entire methods to be marked
1873@code{@@synchronized}.  Note that throwing exceptions out of
1874@code{@@synchronized} blocks is allowed, and will cause the guarding object
1875to be unlocked properly.
1876
1877@item -freplace-objc-classes
1878@opindex freplace-objc-classes
1879Emit a special marker instructing @command{ld(1)} not to statically link in
1880the resulting object file, and allow @command{dyld(1)} to load it in at
1881run time instead.  This is used in conjunction with the Fix-and-Continue
1882debugging mode, where the object file in question may be recompiled and
1883dynamically reloaded in the course of program execution, without the need
1884to restart the program itself.  Currently, Fix-and-Continue functionality
1885is only available in conjunction with the NeXT runtime on Mac OS X 10.3
1886and later.
1887
1888@item -fzero-link
1889@opindex fzero-link
1890When compiling for the NeXT runtime, the compiler ordinarily replaces calls
1891to @code{objc_getClass("@dots{}")} (when the name of the class is known at
1892compile time) with static class references that get initialized at load time,
1893which improves run-time performance.  Specifying the @option{-fzero-link} flag
1894suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
1895to be retained.  This is useful in Zero-Link debugging mode, since it allows
1896for individual class implementations to be modified during program execution.
1897
1898@item -gen-decls
1899@opindex gen-decls
1900Dump interface declarations for all classes seen in the source file to a
1901file named @file{@var{sourcename}.decl}.
1902
1903@item -Wno-protocol
1904@opindex Wno-protocol
1905If a class is declared to implement a protocol, a warning is issued for
1906every method in the protocol that is not implemented by the class.  The
1907default behavior is to issue a warning for every method not explicitly
1908implemented in the class, even if a method implementation is inherited
1909from the superclass.  If you use the @code{-Wno-protocol} option, then
1910methods inherited from the superclass are considered to be implemented,
1911and no warning is issued for them.
1912
1913@item -Wselector
1914@opindex Wselector
1915Warn if multiple methods of different types for the same selector are
1916found during compilation.  The check is performed on the list of methods
1917in the final stage of compilation.  Additionally, a check is performed
1918for each selector appearing in a @code{@@selector(@dots{})}
1919expression, and a corresponding method for that selector has been found
1920during compilation.  Because these checks scan the method table only at
1921the end of compilation, these warnings are not produced if the final
1922stage of compilation is not reached, for example because an error is
1923found during compilation, or because the @code{-fsyntax-only} option is
1924being used.
1925
1926@item -Wundeclared-selector
1927@opindex Wundeclared-selector
1928Warn if a @code{@@selector(@dots{})} expression referring to an
1929undeclared selector is found.  A selector is considered undeclared if no
1930method with that name has been declared before the
1931@code{@@selector(@dots{})} expression, either explicitly in an
1932@code{@@interface} or @code{@@protocol} declaration, or implicitly in
1933an @code{@@implementation} section.  This option always performs its
1934checks as soon as a @code{@@selector(@dots{})} expression is found,
1935while @code{-Wselector} only performs its checks in the final stage of
1936compilation.  This also enforces the coding style convention
1937that methods and selectors must be declared before being used.
1938
1939@item -print-objc-runtime-info
1940@opindex print-objc-runtime-info
1941Generate C header describing the largest structure that is passed by
1942value, if any.
1943
1944@end table
1945
1946@node Language Independent Options
1947@section Options to Control Diagnostic Messages Formatting
1948@cindex options to control diagnostics formatting
1949@cindex diagnostic messages
1950@cindex message formatting
1951
1952Traditionally, diagnostic messages have been formatted irrespective of
1953the output device's aspect (e.g.@: its width, @dots{}).  The options described
1954below can be used to control the diagnostic messages formatting
1955algorithm, e.g.@: how many characters per line, how often source location
1956information should be reported.  Right now, only the C++ front end can
1957honor these options.  However it is expected, in the near future, that
1958the remaining front ends would be able to digest them correctly.
1959
1960@table @gcctabopt
1961@item -fmessage-length=@var{n}
1962@opindex fmessage-length
1963Try to format error messages so that they fit on lines of about @var{n}
1964characters.  The default is 72 characters for @command{g++} and 0 for the rest of
1965the front ends supported by GCC@.  If @var{n} is zero, then no
1966line-wrapping will be done; each error message will appear on a single
1967line.
1968
1969@opindex fdiagnostics-show-location
1970@item -fdiagnostics-show-location=once
1971Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
1972reporter to emit @emph{once} source location information; that is, in
1973case the message is too long to fit on a single physical line and has to
1974be wrapped, the source location won't be emitted (as prefix) again,
1975over and over, in subsequent continuation lines.  This is the default
1976behavior.
1977
1978@item -fdiagnostics-show-location=every-line
1979Only meaningful in line-wrapping mode.  Instructs the diagnostic
1980messages reporter to emit the same source location information (as
1981prefix) for physical lines that result from the process of breaking
1982a message which is too long to fit on a single line.
1983
1984@end table
1985
1986@node Warning Options
1987@section Options to Request or Suppress Warnings
1988@cindex options to control warnings
1989@cindex warning messages
1990@cindex messages, warning
1991@cindex suppressing warnings
1992
1993Warnings are diagnostic messages that report constructions which
1994are not inherently erroneous but which are risky or suggest there
1995may have been an error.
1996
1997You can request many specific warnings with options beginning @samp{-W},
1998for example @option{-Wimplicit} to request warnings on implicit
1999declarations.  Each of these specific warning options also has a
2000negative form beginning @samp{-Wno-} to turn off warnings;
2001for example, @option{-Wno-implicit}.  This manual lists only one of the
2002two forms, whichever is not the default.
2003
2004The following options control the amount and kinds of warnings produced
2005by GCC; for further, language-specific options also refer to
2006@ref{C++ Dialect Options} and @ref{Objective-C Dialect Options}.
2007
2008@table @gcctabopt
2009@cindex syntax checking
2010@item -fsyntax-only
2011@opindex fsyntax-only
2012Check the code for syntax errors, but don't do anything beyond that.
2013
2014@item -pedantic
2015@opindex pedantic
2016Issue all the warnings demanded by strict ISO C and ISO C++;
2017reject all programs that use forbidden extensions, and some other
2018programs that do not follow ISO C and ISO C++.  For ISO C, follows the
2019version of the ISO C standard specified by any @option{-std} option used.
2020
2021Valid ISO C and ISO C++ programs should compile properly with or without
2022this option (though a rare few will require @option{-ansi} or a
2023@option{-std} option specifying the required version of ISO C)@.  However,
2024without this option, certain GNU extensions and traditional C and C++
2025features are supported as well.  With this option, they are rejected.
2026
2027@option{-pedantic} does not cause warning messages for use of the
2028alternate keywords whose names begin and end with @samp{__}.  Pedantic
2029warnings are also disabled in the expression that follows
2030@code{__extension__}.  However, only system header files should use
2031these escape routes; application programs should avoid them.
2032@xref{Alternate Keywords}.
2033
2034Some users try to use @option{-pedantic} to check programs for strict ISO
2035C conformance.  They soon find that it does not do quite what they want:
2036it finds some non-ISO practices, but not all---only those for which
2037ISO C @emph{requires} a diagnostic, and some others for which
2038diagnostics have been added.
2039
2040A feature to report any failure to conform to ISO C might be useful in
2041some instances, but would require considerable additional work and would
2042be quite different from @option{-pedantic}.  We don't have plans to
2043support such a feature in the near future.
2044
2045Where the standard specified with @option{-std} represents a GNU
2046extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
2047corresponding @dfn{base standard}, the version of ISO C on which the GNU
2048extended dialect is based.  Warnings from @option{-pedantic} are given
2049where they are required by the base standard.  (It would not make sense
2050for such warnings to be given only for features not in the specified GNU
2051C dialect, since by definition the GNU dialects of C include all
2052features the compiler supports with the given option, and there would be
2053nothing to warn about.)
2054
2055@item -pedantic-errors
2056@opindex pedantic-errors
2057Like @option{-pedantic}, except that errors are produced rather than
2058warnings.
2059
2060@item -w
2061@opindex w
2062Inhibit all warning messages.
2063
2064@item -Wno-import
2065@opindex Wno-import
2066Inhibit warning messages about the use of @samp{#import}.
2067
2068@item -Wchar-subscripts
2069@opindex Wchar-subscripts
2070Warn if an array subscript has type @code{char}.  This is a common cause
2071of error, as programmers often forget that this type is signed on some
2072machines.
2073
2074@item -Wcomment
2075@opindex Wcomment
2076Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2077comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2078
2079@item -Wformat
2080@opindex Wformat
2081Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2082the arguments supplied have types appropriate to the format string
2083specified, and that the conversions specified in the format string make
2084sense.  This includes standard functions, and others specified by format
2085attributes (@pxref{Function Attributes}), in the @code{printf},
2086@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2087not in the C standard) families.
2088
2089The formats are checked against the format features supported by GNU
2090libc version 2.2.  These include all ISO C90 and C99 features, as well
2091as features from the Single Unix Specification and some BSD and GNU
2092extensions.  Other library implementations may not support all these
2093features; GCC does not support warning about features that go beyond a
2094particular library's limitations.  However, if @option{-pedantic} is used
2095with @option{-Wformat}, warnings will be given about format features not
2096in the selected standard version (but not for @code{strfmon} formats,
2097since those are not in any version of the C standard).  @xref{C Dialect
2098Options,,Options Controlling C Dialect}.
2099
2100Since @option{-Wformat} also checks for null format arguments for
2101several functions, @option{-Wformat} also implies @option{-Wnonnull}.
2102
2103@option{-Wformat} is included in @option{-Wall}.  For more control over some
2104aspects of format checking, the options @option{-Wformat-y2k},
2105@option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
2106@option{-Wformat-nonliteral}, @option{-Wformat-security}, and
2107@option{-Wformat=2} are available, but are not included in @option{-Wall}.
2108
2109@item -Wformat-y2k
2110@opindex Wformat-y2k
2111If @option{-Wformat} is specified, also warn about @code{strftime}
2112formats which may yield only a two-digit year.
2113
2114@item -Wno-format-extra-args
2115@opindex Wno-format-extra-args
2116If @option{-Wformat} is specified, do not warn about excess arguments to a
2117@code{printf} or @code{scanf} format function.  The C standard specifies
2118that such arguments are ignored.
2119
2120Where the unused arguments lie between used arguments that are
2121specified with @samp{$} operand number specifications, normally
2122warnings are still given, since the implementation could not know what
2123type to pass to @code{va_arg} to skip the unused arguments.  However,
2124in the case of @code{scanf} formats, this option will suppress the
2125warning if the unused arguments are all pointers, since the Single
2126Unix Specification says that such unused arguments are allowed.
2127
2128@item -Wno-format-zero-length
2129@opindex Wno-format-zero-length
2130If @option{-Wformat} is specified, do not warn about zero-length formats.
2131The C standard specifies that zero-length formats are allowed.
2132
2133@item -Wformat-nonliteral
2134@opindex Wformat-nonliteral
2135If @option{-Wformat} is specified, also warn if the format string is not a
2136string literal and so cannot be checked, unless the format function
2137takes its format arguments as a @code{va_list}.
2138
2139@item -Wformat-security
2140@opindex Wformat-security
2141If @option{-Wformat} is specified, also warn about uses of format
2142functions that represent possible security problems.  At present, this
2143warns about calls to @code{printf} and @code{scanf} functions where the
2144format string is not a string literal and there are no format arguments,
2145as in @code{printf (foo);}.  This may be a security hole if the format
2146string came from untrusted input and contains @samp{%n}.  (This is
2147currently a subset of what @option{-Wformat-nonliteral} warns about, but
2148in future warnings may be added to @option{-Wformat-security} that are not
2149included in @option{-Wformat-nonliteral}.)
2150
2151@item -Wformat=2
2152@opindex Wformat=2
2153Enable @option{-Wformat} plus format checks not included in
2154@option{-Wformat}.  Currently equivalent to @samp{-Wformat
2155-Wformat-nonliteral -Wformat-security -Wformat-y2k}.
2156
2157@item -Wnonnull
2158@opindex Wnonnull
2159Warn about passing a null pointer for arguments marked as
2160requiring a non-null value by the @code{nonnull} function attribute.
2161
2162@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
2163can be disabled with the @option{-Wno-nonnull} option.
2164
2165@item -Winit-self @r{(C, C++, and Objective-C only)}
2166@opindex Winit-self
2167Warn about uninitialized variables which are initialized with themselves.
2168Note this option can only be used with the @option{-Wuninitialized} option,
2169which in turn only works with @option{-O1} and above.
2170
2171For example, GCC will warn about @code{i} being uninitialized in the
2172following snippet only when @option{-Winit-self} has been specified:
2173@smallexample
2174@group
2175int f()
2176@{
2177  int i = i;
2178  return i;
2179@}
2180@end group
2181@end smallexample
2182
2183@item -Wimplicit-int
2184@opindex Wimplicit-int
2185Warn when a declaration does not specify a type.
2186
2187@item -Wimplicit-function-declaration
2188@itemx -Werror-implicit-function-declaration
2189@opindex Wimplicit-function-declaration
2190@opindex Werror-implicit-function-declaration
2191Give a warning (or error) whenever a function is used before being
2192declared.
2193
2194@item -Wimplicit
2195@opindex Wimplicit
2196Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
2197
2198@item -Wmain
2199@opindex Wmain
2200Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
2201function with external linkage, returning int, taking either zero
2202arguments, two, or three arguments of appropriate types.
2203
2204@item -Wmissing-braces
2205@opindex Wmissing-braces
2206Warn if an aggregate or union initializer is not fully bracketed.  In
2207the following example, the initializer for @samp{a} is not fully
2208bracketed, but that for @samp{b} is fully bracketed.
2209
2210@smallexample
2211int a[2][2] = @{ 0, 1, 2, 3 @};
2212int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
2213@end smallexample
2214
2215@item -Wparentheses
2216@opindex Wparentheses
2217Warn if parentheses are omitted in certain contexts, such
2218as when there is an assignment in a context where a truth value
2219is expected, or when operators are nested whose precedence people
2220often get confused about.
2221
2222Also warn about constructions where there may be confusion to which
2223@code{if} statement an @code{else} branch belongs.  Here is an example of
2224such a case:
2225
2226@smallexample
2227@group
2228@{
2229  if (a)
2230    if (b)
2231      foo ();
2232  else
2233    bar ();
2234@}
2235@end group
2236@end smallexample
2237
2238In C, every @code{else} branch belongs to the innermost possible @code{if}
2239statement, which in this example is @code{if (b)}.  This is often not
2240what the programmer expected, as illustrated in the above example by
2241indentation the programmer chose.  When there is the potential for this
2242confusion, GCC will issue a warning when this flag is specified.
2243To eliminate the warning, add explicit braces around the innermost
2244@code{if} statement so there is no way the @code{else} could belong to
2245the enclosing @code{if}.  The resulting code would look like this:
2246
2247@smallexample
2248@group
2249@{
2250  if (a)
2251    @{
2252      if (b)
2253        foo ();
2254      else
2255        bar ();
2256    @}
2257@}
2258@end group
2259@end smallexample
2260
2261@item -Wsequence-point
2262@opindex Wsequence-point
2263Warn about code that may have undefined semantics because of violations
2264of sequence point rules in the C standard.
2265
2266The C standard defines the order in which expressions in a C program are
2267evaluated in terms of @dfn{sequence points}, which represent a partial
2268ordering between the execution of parts of the program: those executed
2269before the sequence point, and those executed after it.  These occur
2270after the evaluation of a full expression (one which is not part of a
2271larger expression), after the evaluation of the first operand of a
2272@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
2273function is called (but after the evaluation of its arguments and the
2274expression denoting the called function), and in certain other places.
2275Other than as expressed by the sequence point rules, the order of
2276evaluation of subexpressions of an expression is not specified.  All
2277these rules describe only a partial order rather than a total order,
2278since, for example, if two functions are called within one expression
2279with no sequence point between them, the order in which the functions
2280are called is not specified.  However, the standards committee have
2281ruled that function calls do not overlap.
2282
2283It is not specified when between sequence points modifications to the
2284values of objects take effect.  Programs whose behavior depends on this
2285have undefined behavior; the C standard specifies that ``Between the
2286previous and next sequence point an object shall have its stored value
2287modified at most once by the evaluation of an expression.  Furthermore,
2288the prior value shall be read only to determine the value to be
2289stored.''.  If a program breaks these rules, the results on any
2290particular implementation are entirely unpredictable.
2291
2292Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
2293= b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
2294diagnosed by this option, and it may give an occasional false positive
2295result, but in general it has been found fairly effective at detecting
2296this sort of problem in programs.
2297
2298The present implementation of this option only works for C programs.  A
2299future implementation may also work for C++ programs.
2300
2301The C standard is worded confusingly, therefore there is some debate
2302over the precise meaning of the sequence point rules in subtle cases.
2303Links to discussions of the problem, including proposed formal
2304definitions, may be found on the GCC readings page, at
2305@w{@uref{http://gcc.gnu.org/readings.html}}.
2306
2307@item -Wreturn-type
2308@opindex Wreturn-type
2309Warn whenever a function is defined with a return-type that defaults to
2310@code{int}.  Also warn about any @code{return} statement with no
2311return-value in a function whose return-type is not @code{void}.
2312
2313For C++, a function without return type always produces a diagnostic
2314message, even when @option{-Wno-return-type} is specified.  The only
2315exceptions are @samp{main} and functions defined in system headers.
2316
2317@item -Wswitch
2318@opindex Wswitch
2319Warn whenever a @code{switch} statement has an index of enumerated type
2320and lacks a @code{case} for one or more of the named codes of that
2321enumeration.  (The presence of a @code{default} label prevents this
2322warning.)  @code{case} labels outside the enumeration range also
2323provoke warnings when this option is used.
2324
2325@item -Wswitch-default
2326@opindex Wswitch-switch
2327Warn whenever a @code{switch} statement does not have a @code{default}
2328case.
2329
2330@item -Wswitch-enum
2331@opindex Wswitch-enum
2332Warn whenever a @code{switch} statement has an index of enumerated type
2333and lacks a @code{case} for one or more of the named codes of that
2334enumeration.  @code{case} labels outside the enumeration range also
2335provoke warnings when this option is used.
2336
2337@item -Wtrigraphs
2338@opindex Wtrigraphs
2339Warn if any trigraphs are encountered that might change the meaning of
2340the program (trigraphs within comments are not warned about).
2341
2342@item -Wunused-function
2343@opindex Wunused-function
2344Warn whenever a static function is declared but not defined or a
2345non\-inline static function is unused.
2346
2347@item -Wunused-label
2348@opindex Wunused-label
2349Warn whenever a label is declared but not used.
2350
2351To suppress this warning use the @samp{unused} attribute
2352(@pxref{Variable Attributes}).
2353
2354@item -Wunused-parameter
2355@opindex Wunused-parameter
2356Warn whenever a function parameter is unused aside from its declaration.
2357
2358To suppress this warning use the @samp{unused} attribute
2359(@pxref{Variable Attributes}).
2360
2361@item -Wunused-variable
2362@opindex Wunused-variable
2363Warn whenever a local variable or non-constant static variable is unused
2364aside from its declaration
2365
2366To suppress this warning use the @samp{unused} attribute
2367(@pxref{Variable Attributes}).
2368
2369@item -Wunused-value
2370@opindex Wunused-value
2371Warn whenever a statement computes a result that is explicitly not used.
2372
2373To suppress this warning cast the expression to @samp{void}.
2374
2375@item -Wunused
2376@opindex Wunused
2377All the above @option{-Wunused} options combined.
2378
2379In order to get a warning about an unused function parameter, you must
2380either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
2381@samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
2382
2383@item -Wuninitialized
2384@opindex Wuninitialized
2385Warn if an automatic variable is used without first being initialized or
2386if a variable may be clobbered by a @code{setjmp} call.
2387
2388These warnings are possible only in optimizing compilation,
2389because they require data flow information that is computed only
2390when optimizing.  If you don't specify @option{-O}, you simply won't
2391get these warnings.
2392
2393If you want to warn about code which uses the uninitialized value of the
2394variable in its own initializer, use the @option{-Winit-self} option.
2395
2396These warnings occur only for variables that are candidates for
2397register allocation.  Therefore, they do not occur for a variable that
2398is declared @code{volatile}, or whose address is taken, or whose size
2399is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
2400structures, unions or arrays, even when they are in registers.
2401
2402Note that there may be no warning about a variable that is used only
2403to compute a value that itself is never used, because such
2404computations may be deleted by data flow analysis before the warnings
2405are printed.
2406
2407These warnings are made optional because GCC is not smart
2408enough to see all the reasons why the code might be correct
2409despite appearing to have an error.  Here is one example of how
2410this can happen:
2411
2412@smallexample
2413@group
2414@{
2415  int x;
2416  switch (y)
2417    @{
2418    case 1: x = 1;
2419      break;
2420    case 2: x = 4;
2421      break;
2422    case 3: x = 5;
2423    @}
2424  foo (x);
2425@}
2426@end group
2427@end smallexample
2428
2429@noindent
2430If the value of @code{y} is always 1, 2 or 3, then @code{x} is
2431always initialized, but GCC doesn't know this.  Here is
2432another common case:
2433
2434@smallexample
2435@{
2436  int save_y;
2437  if (change_y) save_y = y, y = new_y;
2438  @dots{}
2439  if (change_y) y = save_y;
2440@}
2441@end smallexample
2442
2443@noindent
2444This has no bug because @code{save_y} is used only if it is set.
2445
2446@cindex @code{longjmp} warnings
2447This option also warns when a non-volatile automatic variable might be
2448changed by a call to @code{longjmp}.  These warnings as well are possible
2449only in optimizing compilation.
2450
2451The compiler sees only the calls to @code{setjmp}.  It cannot know
2452where @code{longjmp} will be called; in fact, a signal handler could
2453call it at any point in the code.  As a result, you may get a warning
2454even when there is in fact no problem because @code{longjmp} cannot
2455in fact be called at the place which would cause a problem.
2456
2457Some spurious warnings can be avoided if you declare all the functions
2458you use that never return as @code{noreturn}.  @xref{Function
2459Attributes}.
2460
2461@item -Wunknown-pragmas
2462@opindex Wunknown-pragmas
2463@cindex warning for unknown pragmas
2464@cindex unknown pragmas, warning
2465@cindex pragmas, warning of unknown
2466Warn when a #pragma directive is encountered which is not understood by
2467GCC@.  If this command line option is used, warnings will even be issued
2468for unknown pragmas in system header files.  This is not the case if
2469the warnings were only enabled by the @option{-Wall} command line option.
2470
2471@item -Wstrict-aliasing
2472@opindex Wstrict-aliasing
2473This option is only active when @option{-fstrict-aliasing} is active.
2474It warns about code which might break the strict aliasing rules that the
2475compiler is using for optimization. The warning does not catch all
2476cases, but does attempt to catch the more common pitfalls. It is
2477included in @option{-Wall}.
2478
2479@item -Wall
2480@opindex Wall
2481All of the above @samp{-W} options combined.  This enables all the
2482warnings about constructions that some users consider questionable, and
2483that are easy to avoid (or modify to prevent the warning), even in
2484conjunction with macros.  This also enables some language-specific
2485warnings described in @ref{C++ Dialect Options} and
2486@ref{Objective-C Dialect Options}.
2487@end table
2488
2489The following @option{-W@dots{}} options are not implied by @option{-Wall}.
2490Some of them warn about constructions that users generally do not
2491consider questionable, but which occasionally you might wish to check
2492for; others warn about constructions that are necessary or hard to avoid
2493in some cases, and there is no simple way to modify the code to suppress
2494the warning.
2495
2496@table @gcctabopt
2497@item -Wextra
2498@opindex W
2499@opindex Wextra
2500(This option used to be called @option{-W}.  The older name is still
2501supported, but the newer name is more descriptive.)  Print extra warning
2502messages for these events:
2503
2504@itemize @bullet
2505@item
2506A function can return either with or without a value.  (Falling
2507off the end of the function body is considered returning without
2508a value.)  For example, this function would evoke such a
2509warning:
2510
2511@smallexample
2512@group
2513foo (a)
2514@{
2515  if (a > 0)
2516    return a;
2517@}
2518@end group
2519@end smallexample
2520
2521@item
2522An expression-statement or the left-hand side of a comma expression
2523contains no side effects.
2524To suppress the warning, cast the unused expression to void.
2525For example, an expression such as @samp{x[i,j]} will cause a warning,
2526but @samp{x[(void)i,j]} will not.
2527
2528@item
2529An unsigned value is compared against zero with @samp{<} or @samp{>=}.
2530
2531@item
2532A comparison like @samp{x<=y<=z} appears; this is equivalent to
2533@samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
2534that of ordinary mathematical notation.
2535
2536@item
2537Storage-class specifiers like @code{static} are not the first things in
2538a declaration.  According to the C Standard, this usage is obsolescent.
2539
2540@item
2541The return type of a function has a type qualifier such as @code{const}.
2542Such a type qualifier has no effect, since the value returned by a
2543function is not an lvalue.  (But don't warn about the GNU extension of
2544@code{volatile void} return types.  That extension will be warned about
2545if @option{-pedantic} is specified.)
2546
2547@item
2548If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
2549arguments.
2550
2551@item
2552A comparison between signed and unsigned values could produce an
2553incorrect result when the signed value is converted to unsigned.
2554(But don't warn if @option{-Wno-sign-compare} is also specified.)
2555
2556@item
2557An aggregate has an initializer which does not initialize all members.
2558For example, the following code would cause such a warning, because
2559@code{x.h} would be implicitly initialized to zero:
2560
2561@smallexample
2562struct s @{ int f, g, h; @};
2563struct s x = @{ 3, 4 @};
2564@end smallexample
2565
2566@item
2567A function parameter is declared without a type specifier in K&R-style
2568functions:
2569
2570@smallexample
2571void foo(bar) @{ @}
2572@end smallexample
2573
2574@item
2575An empty body occurs in an @samp{if} or @samp{else} statement.
2576
2577@item
2578A pointer is compared against integer zero with @samp{<}, @samp{<=},
2579@samp{>}, or @samp{>=}.
2580
2581@item
2582A variable might be changed by @samp{longjmp} or @samp{vfork}.
2583
2584@item
2585Any of several floating-point events that often indicate errors, such as
2586overflow, underflow, loss of precision, etc.
2587
2588@item @r{(C++ only)}
2589An enumerator and a non-enumerator both appear in a conditional expression.
2590
2591@item @r{(C++ only)}
2592A non-static reference or non-static @samp{const} member appears in a
2593class without constructors.
2594
2595@item @r{(C++ only)}
2596Ambiguous virtual bases.
2597
2598@item @r{(C++ only)}
2599Subscripting an array which has been declared @samp{register}.
2600
2601@item @r{(C++ only)}
2602Taking the address of a variable which has been declared @samp{register}.
2603
2604@item @r{(C++ only)}
2605A base class is not initialized in a derived class' copy constructor.
2606@end itemize
2607
2608@item -Wno-div-by-zero
2609@opindex Wno-div-by-zero
2610@opindex Wdiv-by-zero
2611Do not warn about compile-time integer division by zero.  Floating point
2612division by zero is not warned about, as it can be a legitimate way of
2613obtaining infinities and NaNs.
2614
2615@item -Wsystem-headers
2616@opindex Wsystem-headers
2617@cindex warnings from system headers
2618@cindex system headers, warnings from
2619Print warning messages for constructs found in system header files.
2620Warnings from system headers are normally suppressed, on the assumption
2621that they usually do not indicate real problems and would only make the
2622compiler output harder to read.  Using this command line option tells
2623GCC to emit warnings from system headers as if they occurred in user
2624code.  However, note that using @option{-Wall} in conjunction with this
2625option will @emph{not} warn about unknown pragmas in system
2626headers---for that, @option{-Wunknown-pragmas} must also be used.
2627
2628@item -Wfloat-equal
2629@opindex Wfloat-equal
2630Warn if floating point values are used in equality comparisons.
2631
2632The idea behind this is that sometimes it is convenient (for the
2633programmer) to consider floating-point values as approximations to
2634infinitely precise real numbers.  If you are doing this, then you need
2635to compute (by analyzing the code, or in some other way) the maximum or
2636likely maximum error that the computation introduces, and allow for it
2637when performing comparisons (and when producing output, but that's a
2638different problem).  In particular, instead of testing for equality, you
2639would check to see whether the two values have ranges that overlap; and
2640this is done with the relational operators, so equality comparisons are
2641probably mistaken.
2642
2643@item -Wtraditional @r{(C only)}
2644@opindex Wtraditional
2645Warn about certain constructs that behave differently in traditional and
2646ISO C@.  Also warn about ISO C constructs that have no traditional C
2647equivalent, and/or problematic constructs which should be avoided.
2648
2649@itemize @bullet
2650@item
2651Macro parameters that appear within string literals in the macro body.
2652In traditional C macro replacement takes place within string literals,
2653but does not in ISO C@.
2654
2655@item
2656In traditional C, some preprocessor directives did not exist.
2657Traditional preprocessors would only consider a line to be a directive
2658if the @samp{#} appeared in column 1 on the line.  Therefore
2659@option{-Wtraditional} warns about directives that traditional C
2660understands but would ignore because the @samp{#} does not appear as the
2661first character on the line.  It also suggests you hide directives like
2662@samp{#pragma} not understood by traditional C by indenting them.  Some
2663traditional implementations would not recognize @samp{#elif}, so it
2664suggests avoiding it altogether.
2665
2666@item
2667A function-like macro that appears without arguments.
2668
2669@item
2670The unary plus operator.
2671
2672@item
2673The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
2674constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
2675constants.)  Note, these suffixes appear in macros defined in the system
2676headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
2677Use of these macros in user code might normally lead to spurious
2678warnings, however GCC's integrated preprocessor has enough context to
2679avoid warning in these cases.
2680
2681@item
2682A function declared external in one block and then used after the end of
2683the block.
2684
2685@item
2686A @code{switch} statement has an operand of type @code{long}.
2687
2688@item
2689A non-@code{static} function declaration follows a @code{static} one.
2690This construct is not accepted by some traditional C compilers.
2691
2692@item
2693The ISO type of an integer constant has a different width or
2694signedness from its traditional type.  This warning is only issued if
2695the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
2696typically represent bit patterns, are not warned about.
2697
2698@item
2699Usage of ISO string concatenation is detected.
2700
2701@item
2702Initialization of automatic aggregates.
2703
2704@item
2705Identifier conflicts with labels.  Traditional C lacks a separate
2706namespace for labels.
2707
2708@item
2709Initialization of unions.  If the initializer is zero, the warning is
2710omitted.  This is done under the assumption that the zero initializer in
2711user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
2712initializer warnings and relies on default initialization to zero in the
2713traditional C case.
2714
2715@item
2716Conversions by prototypes between fixed/floating point values and vice
2717versa.  The absence of these prototypes when compiling with traditional
2718C would cause serious problems.  This is a subset of the possible
2719conversion warnings, for the full set use @option{-Wconversion}.
2720
2721@item
2722Use of ISO C style function definitions.  This warning intentionally is
2723@emph{not} issued for prototype declarations or variadic functions
2724because these ISO C features will appear in your code when using
2725libiberty's traditional C compatibility macros, @code{PARAMS} and
2726@code{VPARAMS}.  This warning is also bypassed for nested functions
2727because that feature is already a GCC extension and thus not relevant to
2728traditional C compatibility.
2729@end itemize
2730
2731@item -Wdeclaration-after-statement @r{(C only)}
2732@opindex Wdeclaration-after-statement
2733Warn when a declaration is found after a statement in a block.  This
2734construct, known from C++, was introduced with ISO C99 and is by default
2735allowed in GCC@.  It is not supported by ISO C90 and was not supported by
2736GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
2737
2738@item -Wundef
2739@opindex Wundef
2740Warn if an undefined identifier is evaluated in an @samp{#if} directive.
2741
2742@item -Wendif-labels
2743@opindex Wendif-labels
2744Warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
2745
2746@item -Wshadow
2747@opindex Wshadow
2748Warn whenever a local variable shadows another local variable, parameter or
2749global variable or whenever a built-in function is shadowed.
2750
2751@item -Wlarger-than-@var{len}
2752@opindex Wlarger-than
2753Warn whenever an object of larger than @var{len} bytes is defined.
2754
2755@item -Wpointer-arith
2756@opindex Wpointer-arith
2757Warn about anything that depends on the ``size of'' a function type or
2758of @code{void}.  GNU C assigns these types a size of 1, for
2759convenience in calculations with @code{void *} pointers and pointers
2760to functions.
2761
2762@item -Wbad-function-cast @r{(C only)}
2763@opindex Wbad-function-cast
2764Warn whenever a function call is cast to a non-matching type.
2765For example, warn if @code{int malloc()} is cast to @code{anything *}.
2766
2767@item -Wcast-qual
2768@opindex Wcast-qual
2769Warn whenever a pointer is cast so as to remove a type qualifier from
2770the target type.  For example, warn if a @code{const char *} is cast
2771to an ordinary @code{char *}.
2772
2773@item -Wcast-align
2774@opindex Wcast-align
2775Warn whenever a pointer is cast such that the required alignment of the
2776target is increased.  For example, warn if a @code{char *} is cast to
2777an @code{int *} on machines where integers can only be accessed at
2778two- or four-byte boundaries.
2779
2780@item -Wwrite-strings
2781@opindex Wwrite-strings
2782When compiling C, give string constants the type @code{const
2783char[@var{length}]} so that
2784copying the address of one into a non-@code{const} @code{char *}
2785pointer will get a warning; when compiling C++, warn about the
2786deprecated conversion from string constants to @code{char *}.
2787These warnings will help you find at
2788compile time code that can try to write into a string constant, but
2789only if you have been very careful about using @code{const} in
2790declarations and prototypes.  Otherwise, it will just be a nuisance;
2791this is why we did not make @option{-Wall} request these warnings.
2792
2793@item -Wconversion
2794@opindex Wconversion
2795Warn if a prototype causes a type conversion that is different from what
2796would happen to the same argument in the absence of a prototype.  This
2797includes conversions of fixed point to floating and vice versa, and
2798conversions changing the width or signedness of a fixed point argument
2799except when the same as the default promotion.
2800
2801Also, warn if a negative integer constant expression is implicitly
2802converted to an unsigned type.  For example, warn about the assignment
2803@code{x = -1} if @code{x} is unsigned.  But do not warn about explicit
2804casts like @code{(unsigned) -1}.
2805
2806@item -Wsign-compare
2807@opindex Wsign-compare
2808@cindex warning for comparison of signed and unsigned values
2809@cindex comparison of signed and unsigned values, warning
2810@cindex signed and unsigned values, comparison warning
2811Warn when a comparison between signed and unsigned values could produce
2812an incorrect result when the signed value is converted to unsigned.
2813This warning is also enabled by @option{-Wextra}; to get the other warnings
2814of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
2815
2816@item -Waggregate-return
2817@opindex Waggregate-return
2818Warn if any functions that return structures or unions are defined or
2819called.  (In languages where you can return an array, this also elicits
2820a warning.)
2821
2822@item -Wstrict-prototypes @r{(C only)}
2823@opindex Wstrict-prototypes
2824Warn if a function is declared or defined without specifying the
2825argument types.  (An old-style function definition is permitted without
2826a warning if preceded by a declaration which specifies the argument
2827types.)
2828
2829@item -Wold-style-definition @r{(C only)}
2830@opindex Wold-style-definition
2831Warn if an old-style function definition is used.  A warning is given
2832even if there is a previous prototype.
2833
2834@item -Wmissing-prototypes @r{(C only)}
2835@opindex Wmissing-prototypes
2836Warn if a global function is defined without a previous prototype
2837declaration.  This warning is issued even if the definition itself
2838provides a prototype.  The aim is to detect global functions that fail
2839to be declared in header files.
2840
2841@item -Wmissing-declarations @r{(C only)}
2842@opindex Wmissing-declarations
2843Warn if a global function is defined without a previous declaration.
2844Do so even if the definition itself provides a prototype.
2845Use this option to detect global functions that are not declared in
2846header files.
2847
2848@item -Wmissing-noreturn
2849@opindex Wmissing-noreturn
2850Warn about functions which might be candidates for attribute @code{noreturn}.
2851Note these are only possible candidates, not absolute ones.  Care should
2852be taken to manually verify functions actually do not ever return before
2853adding the @code{noreturn} attribute, otherwise subtle code generation
2854bugs could be introduced.  You will not get a warning for @code{main} in
2855hosted C environments.
2856
2857@item -Wmissing-format-attribute
2858@opindex Wmissing-format-attribute
2859@opindex Wformat
2860If @option{-Wformat} is enabled, also warn about functions which might be
2861candidates for @code{format} attributes.  Note these are only possible
2862candidates, not absolute ones.  GCC will guess that @code{format}
2863attributes might be appropriate for any function that calls a function
2864like @code{vprintf} or @code{vscanf}, but this might not always be the
2865case, and some functions for which @code{format} attributes are
2866appropriate may not be detected.  This option has no effect unless
2867@option{-Wformat} is enabled (possibly by @option{-Wall}).
2868
2869@item -Wno-multichar
2870@opindex Wno-multichar
2871@opindex Wmultichar
2872Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
2873Usually they indicate a typo in the user's code, as they have
2874implementation-defined values, and should not be used in portable code.
2875
2876@item -Wno-deprecated-declarations
2877@opindex Wno-deprecated-declarations
2878Do not warn about uses of functions, variables, and types marked as
2879deprecated by using the @code{deprecated} attribute.
2880(@pxref{Function Attributes}, @pxref{Variable Attributes},
2881@pxref{Type Attributes}.)
2882
2883@item -Wpacked
2884@opindex Wpacked
2885Warn if a structure is given the packed attribute, but the packed
2886attribute has no effect on the layout or size of the structure.
2887Such structures may be mis-aligned for little benefit.  For
2888instance, in this code, the variable @code{f.x} in @code{struct bar}
2889will be misaligned even though @code{struct bar} does not itself
2890have the packed attribute:
2891
2892@smallexample
2893@group
2894struct foo @{
2895  int x;
2896  char a, b, c, d;
2897@} __attribute__((packed));
2898struct bar @{
2899  char z;
2900  struct foo f;
2901@};
2902@end group
2903@end smallexample
2904
2905@item -Wpadded
2906@opindex Wpadded
2907Warn if padding is included in a structure, either to align an element
2908of the structure or to align the whole structure.  Sometimes when this
2909happens it is possible to rearrange the fields of the structure to
2910reduce the padding and so make the structure smaller.
2911
2912@item -Wredundant-decls
2913@opindex Wredundant-decls
2914Warn if anything is declared more than once in the same scope, even in
2915cases where multiple declaration is valid and changes nothing.
2916
2917@item -Wnested-externs @r{(C only)}
2918@opindex Wnested-externs
2919Warn if an @code{extern} declaration is encountered within a function.
2920
2921@item -Wunreachable-code
2922@opindex Wunreachable-code
2923Warn if the compiler detects that code will never be executed.
2924
2925This option is intended to warn when the compiler detects that at
2926least a whole line of source code will never be executed, because
2927some condition is never satisfied or because it is after a
2928procedure that never returns.
2929
2930It is possible for this option to produce a warning even though there
2931are circumstances under which part of the affected line can be executed,
2932so care should be taken when removing apparently-unreachable code.
2933
2934For instance, when a function is inlined, a warning may mean that the
2935line is unreachable in only one inlined copy of the function.
2936
2937This option is not made part of @option{-Wall} because in a debugging
2938version of a program there is often substantial code which checks
2939correct functioning of the program and is, hopefully, unreachable
2940because the program does work.  Another common use of unreachable
2941code is to provide behavior which is selectable at compile-time.
2942
2943@item -Winline
2944@opindex Winline
2945Warn if a function can not be inlined and it was declared as inline.
2946Even with this option, the compiler will not warn about failures to
2947inline functions declared in system headers.
2948
2949The compiler uses a variety of heuristics to determine whether or not
2950to inline a function.  For example, the compiler takes into account
2951the size of the function being inlined and the the amount of inlining
2952that has already been done in the current function.  Therefore,
2953seemingly insignificant changes in the source program can cause the
2954warnings produced by @option{-Winline} to appear or disappear.
2955
2956@item -Wno-invalid-offsetof @r{(C++ only)}
2957@opindex Wno-invalid-offsetof
2958Suppress warnings from applying the @samp{offsetof} macro to a non-POD
2959type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
2960to a non-POD type is undefined.  In existing C++ implementations,
2961however, @samp{offsetof} typically gives meaningful results even when
2962applied to certain kinds of non-POD types. (Such as a simple
2963@samp{struct} that fails to be a POD type only by virtue of having a
2964constructor.)  This flag is for users who are aware that they are
2965writing nonportable code and who have deliberately chosen to ignore the
2966warning about it.
2967
2968The restrictions on @samp{offsetof} may be relaxed in a future version
2969of the C++ standard.
2970
2971@item -Winvalid-pch
2972@opindex Winvalid-pch
2973Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
2974the search path but can't be used.
2975
2976@item -Wlong-long
2977@opindex Wlong-long
2978@opindex Wno-long-long
2979Warn if @samp{long long} type is used.  This is default.  To inhibit
2980the warning messages, use @option{-Wno-long-long}.  Flags
2981@option{-Wlong-long} and @option{-Wno-long-long} are taken into account
2982only when @option{-pedantic} flag is used.
2983
2984@item -Wdisabled-optimization
2985@opindex Wdisabled-optimization
2986Warn if a requested optimization pass is disabled.  This warning does
2987not generally indicate that there is anything wrong with your code; it
2988merely indicates that GCC's optimizers were unable to handle the code
2989effectively.  Often, the problem is that your code is too big or too
2990complex; GCC will refuse to optimize programs when the optimization
2991itself is likely to take inordinate amounts of time.
2992
2993@item -Werror
2994@opindex Werror
2995Make all warnings into errors.
2996@end table
2997
2998@node Debugging Options
2999@section Options for Debugging Your Program or GCC
3000@cindex options, debugging
3001@cindex debugging information options
3002
3003GCC has various special options that are used for debugging
3004either your program or GCC:
3005
3006@table @gcctabopt
3007@item -g
3008@opindex g
3009Produce debugging information in the operating system's native format
3010(stabs, COFF, XCOFF, or DWARF)@.  GDB can work with this debugging
3011information.
3012
3013On most systems that use stabs format, @option{-g} enables use of extra
3014debugging information that only GDB can use; this extra information
3015makes debugging work better in GDB but will probably make other debuggers
3016crash or
3017refuse to read the program.  If you want to control for certain whether
3018to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
3019@option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
3020
3021Unlike most other C compilers, GCC allows you to use @option{-g} with
3022@option{-O}.  The shortcuts taken by optimized code may occasionally
3023produce surprising results: some variables you declared may not exist
3024at all; flow of control may briefly move where you did not expect it;
3025some statements may not be executed because they compute constant
3026results or their values were already at hand; some statements may
3027execute in different places because they were moved out of loops.
3028
3029Nevertheless it proves possible to debug optimized output.  This makes
3030it reasonable to use the optimizer for programs that might have bugs.
3031
3032The following options are useful when GCC is generated with the
3033capability for more than one debugging format.
3034
3035@item -ggdb
3036@opindex ggdb
3037Produce debugging information for use by GDB@.  This means to use the
3038most expressive format available (DWARF 2, stabs, or the native format
3039if neither of those are supported), including GDB extensions if at all
3040possible.
3041
3042@item -gstabs
3043@opindex gstabs
3044Produce debugging information in stabs format (if that is supported),
3045without GDB extensions.  This is the format used by DBX on most BSD
3046systems.  On MIPS, Alpha and System V Release 4 systems this option
3047produces stabs debugging output which is not understood by DBX or SDB@.
3048On System V Release 4 systems this option requires the GNU assembler.
3049
3050@item -feliminate-unused-debug-symbols
3051@opindex feliminate-unused-debug-symbols
3052Produce debugging information in stabs format (if that is supported),
3053for only symbols that are actually used.
3054
3055@item -gstabs+
3056@opindex gstabs+
3057Produce debugging information in stabs format (if that is supported),
3058using GNU extensions understood only by the GNU debugger (GDB)@.  The
3059use of these extensions is likely to make other debuggers crash or
3060refuse to read the program.
3061
3062@item -gcoff
3063@opindex gcoff
3064Produce debugging information in COFF format (if that is supported).
3065This is the format used by SDB on most System V systems prior to
3066System V Release 4.
3067
3068@item -gxcoff
3069@opindex gxcoff
3070Produce debugging information in XCOFF format (if that is supported).
3071This is the format used by the DBX debugger on IBM RS/6000 systems.
3072
3073@item -gxcoff+
3074@opindex gxcoff+
3075Produce debugging information in XCOFF format (if that is supported),
3076using GNU extensions understood only by the GNU debugger (GDB)@.  The
3077use of these extensions is likely to make other debuggers crash or
3078refuse to read the program, and may cause assemblers other than the GNU
3079assembler (GAS) to fail with an error.
3080
3081@item -gdwarf-2
3082@opindex gdwarf-2
3083Produce debugging information in DWARF version 2 format (if that is
3084supported).  This is the format used by DBX on IRIX 6.
3085
3086@item -gvms
3087@opindex gvms
3088Produce debugging information in VMS debug format (if that is
3089supported).  This is the format used by DEBUG on VMS systems.
3090
3091@item -g@var{level}
3092@itemx -ggdb@var{level}
3093@itemx -gstabs@var{level}
3094@itemx -gcoff@var{level}
3095@itemx -gxcoff@var{level}
3096@itemx -gvms@var{level}
3097Request debugging information and also use @var{level} to specify how
3098much information.  The default level is 2.
3099
3100Level 1 produces minimal information, enough for making backtraces in
3101parts of the program that you don't plan to debug.  This includes
3102descriptions of functions and external variables, but no information
3103about local variables and no line numbers.
3104
3105Level 3 includes extra information, such as all the macro definitions
3106present in the program.  Some debuggers support macro expansion when
3107you use @option{-g3}.
3108
3109Note that in order to avoid confusion between DWARF1 debug level 2,
3110and DWARF2 @option{-gdwarf-2} does not accept a concatenated debug
3111level.  Instead use an additional @option{-g@var{level}} option to
3112change the debug level for DWARF2.
3113
3114@item -feliminate-dwarf2-dups
3115@opindex feliminate-dwarf2-dups
3116Compress DWARF2 debugging information by eliminating duplicated
3117information about each symbol.  This option only makes sense when
3118generating DWARF2 debugging information with @option{-gdwarf-2}.
3119
3120@cindex @command{prof}
3121@item -p
3122@opindex p
3123Generate extra code to write profile information suitable for the
3124analysis program @command{prof}.  You must use this option when compiling
3125the source files you want data about, and you must also use it when
3126linking.
3127
3128@cindex @command{gprof}
3129@item -pg
3130@opindex pg
3131Generate extra code to write profile information suitable for the
3132analysis program @command{gprof}.  You must use this option when compiling
3133the source files you want data about, and you must also use it when
3134linking.
3135
3136@item -Q
3137@opindex Q
3138Makes the compiler print out each function name as it is compiled, and
3139print some statistics about each pass when it finishes.
3140
3141@item -ftime-report
3142@opindex ftime-report
3143Makes the compiler print some statistics about the time consumed by each
3144pass when it finishes.
3145
3146@item -fmem-report
3147@opindex fmem-report
3148Makes the compiler print some statistics about permanent memory
3149allocation when it finishes.
3150
3151@item -fprofile-arcs
3152@opindex fprofile-arcs
3153Add code so that program flow @dfn{arcs} are instrumented.  During
3154execution the program records how many times each branch and call is
3155executed and how many times it is taken or returns.  When the compiled
3156program exits it saves this data to a file called
3157@file{@var{auxname}.gcda} for each source file. The data may be used for
3158profile-directed optimizations (@option{-fbranch-probabilities}), or for
3159test coverage analysis (@option{-ftest-coverage}). Each object file's
3160@var{auxname} is generated from the name of the output file, if
3161explicitly specified and it is not the final executable, otherwise it is
3162the basename of the source file. In both cases any suffix is removed
3163(e.g.  @file{foo.gcda} for input file @file{dir/foo.c}, or
3164@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
3165
3166@itemize
3167
3168@item
3169Compile the source files with @option{-fprofile-arcs} plus optimization
3170and code generation options. For test coverage analysis, use the
3171additional @option{-ftest-coverage} option. You do not need to profile
3172every source file in a program.
3173
3174@item
3175Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
3176(the latter implies the former).
3177
3178@item
3179Run the program on a representative workload to generate the arc profile
3180information. This may be repeated any number of times. You can run
3181concurrent instances of your program, and provided that the file system
3182supports locking, the data files will be correctly updated. Also
3183@code{fork} calls are detected and correctly handled (double counting
3184will not happen).
3185
3186@item
3187For profile-directed optimizations, compile the source files again with
3188the same optimization and code generation options plus
3189@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
3190Control Optimization}).
3191
3192@item
3193For test coverage analysis, use @command{gcov} to produce human readable
3194information from the @file{.gcno} and @file{.gcda} files. Refer to the
3195@command{gcov} documentation for further information.
3196
3197@end itemize
3198
3199With @option{-fprofile-arcs}, for each function of your program GCC
3200creates a program flow graph, then finds a spanning tree for the graph.
3201Only arcs that are not on the spanning tree have to be instrumented: the
3202compiler adds code to count the number of times that these arcs are
3203executed.  When an arc is the only exit or only entrance to a block, the
3204instrumentation code can be added to the block; otherwise, a new basic
3205block must be created to hold the instrumentation code.
3206
3207@need 2000
3208@item -ftest-coverage
3209@opindex ftest-coverage
3210Produce a notes file that the @command{gcov} code-coverage utility
3211(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
3212show program coverage. Each source file's note file is called
3213@file{@var{auxname}.gcno}. Refer to the @option{-fprofile-arcs} option
3214above for a description of @var{auxname} and instructions on how to
3215generate test coverage data. Coverage data will match the source files
3216more closely, if you do not optimize.
3217
3218@item -d@var{letters}
3219@opindex d
3220Says to make debugging dumps during compilation at times specified by
3221@var{letters}.  This is used for debugging the compiler.  The file names
3222for most of the dumps are made by appending a pass number and a word to
3223the @var{dumpname}. @var{dumpname} is generated from the name of the
3224output file, if explicitly specified and it is not an executable,
3225otherwise it is the basename of the source file. In both cases any
3226suffix is removed (e.g.  @file{foo.01.rtl} or @file{foo.02.sibling}).
3227Here are the possible letters for use in @var{letters}, and their
3228meanings:
3229
3230@table @samp
3231@item A
3232@opindex dA
3233Annotate the assembler output with miscellaneous debugging information.
3234@item b
3235@opindex db
3236Dump after computing branch probabilities, to @file{@var{file}.12.bp}.
3237@item B
3238@opindex dB
3239Dump after block reordering, to @file{@var{file}.31.bbro}.
3240@item c
3241@opindex dc
3242Dump after instruction combination, to the file @file{@var{file}.20.combine}.
3243@item C
3244@opindex dC
3245Dump after the first if conversion, to the file @file{@var{file}.14.ce1}.
3246Also dump after the second if conversion, to the file @file{@var{file}.21.ce2}.
3247@item d
3248@opindex dd
3249Dump after branch target load optimization, to to @file{@var{file}.32.btl}.
3250Also dump after delayed branch scheduling, to @file{@var{file}.36.dbr}.
3251@item D
3252@opindex dD
3253Dump all macro definitions, at the end of preprocessing, in addition to
3254normal output.
3255@item E
3256@opindex dE
3257Dump after the third if conversion, to @file{@var{file}.30.ce3}.
3258@item f
3259@opindex df
3260Dump after control and data flow analysis, to @file{@var{file}.11.cfg}.
3261Also dump after life analysis, to @file{@var{file}.19.life}.
3262@item F
3263@opindex dF
3264Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.07.addressof}.
3265@item g
3266@opindex dg
3267Dump after global register allocation, to @file{@var{file}.25.greg}.
3268@item G
3269@opindex dG
3270Dump after GCSE, to @file{@var{file}.08.gcse}.
3271Also dump after jump bypassing and control flow optimizations, to
3272@file{@var{file}.10.bypass}.
3273@item h
3274@opindex dh
3275Dump after finalization of EH handling code, to @file{@var{file}.03.eh}.
3276@item i
3277@opindex di
3278Dump after sibling call optimizations, to @file{@var{file}.02.sibling}.
3279@item j
3280@opindex dj
3281Dump after the first jump optimization, to @file{@var{file}.04.jump}.
3282@item k
3283@opindex dk
3284Dump after conversion from registers to stack, to @file{@var{file}.34.stack}.
3285@item l
3286@opindex dl
3287Dump after local register allocation, to @file{@var{file}.24.lreg}.
3288@item L
3289@opindex dL
3290Dump after loop optimization passes, to @file{@var{file}.09.loop} and
3291@file{@var{file}.16.loop2}.
3292@item M
3293@opindex dM
3294Dump after performing the machine dependent reorganization pass, to
3295@file{@var{file}.35.mach}.
3296@item n
3297@opindex dn
3298Dump after register renumbering, to @file{@var{file}.29.rnreg}.
3299@item N
3300@opindex dN
3301Dump after the register move pass, to @file{@var{file}.22.regmove}.
3302@item o
3303@opindex do
3304Dump after post-reload optimizations, to @file{@var{file}.26.postreload}.
3305@item r
3306@opindex dr
3307Dump after RTL generation, to @file{@var{file}.01.rtl}.
3308@item R
3309@opindex dR
3310Dump after the second scheduling pass, to @file{@var{file}.33.sched2}.
3311@item s
3312@opindex ds
3313Dump after CSE (including the jump optimization that sometimes follows
3314CSE), to @file{@var{file}.06.cse}.
3315@item S
3316@opindex dS
3317Dump after the first scheduling pass, to @file{@var{file}.23.sched}.
3318@item t
3319@opindex dt
3320Dump after the second CSE pass (including the jump optimization that
3321sometimes follows CSE), to @file{@var{file}.18.cse2}.
3322@item T
3323@opindex dT
3324Dump after running tracer, to @file{@var{file}.15.tracer}.
3325@item u
3326@opindex du
3327Dump after null pointer elimination pass to @file{@var{file}.05.null}.
3328@item U
3329@opindex dU
3330Dump callgraph and unit-at-a-time optimization @file{@var{file}.00.unit}.
3331@item V
3332@opindex dV
3333Dump after the value profile transformations, to @file{@var{file}.13.vpt}.
3334@item w
3335@opindex dw
3336Dump after the second flow pass, to @file{@var{file}.27.flow2}.
3337@item z
3338@opindex dz
3339Dump after the peephole pass, to @file{@var{file}.28.peephole2}.
3340@item Z
3341@opindex dZ
3342Dump after constructing the web, to @file{@var{file}.17.web}.
3343@item a
3344@opindex da
3345Produce all the dumps listed above.
3346@item H
3347@opindex dH
3348Produce a core dump whenever an error occurs.
3349@item m
3350@opindex dm
3351Print statistics on memory usage, at the end of the run, to
3352standard error.
3353@item p
3354@opindex dp
3355Annotate the assembler output with a comment indicating which
3356pattern and alternative was used.  The length of each instruction is
3357also printed.
3358@item P
3359@opindex dP
3360Dump the RTL in the assembler output as a comment before each instruction.
3361Also turns on @option{-dp} annotation.
3362@item v
3363@opindex dv
3364For each of the other indicated dump files (except for
3365@file{@var{file}.01.rtl}), dump a representation of the control flow graph
3366suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
3367@item x
3368@opindex dx
3369Just generate RTL for a function instead of compiling it.  Usually used
3370with @samp{r}.
3371@item y
3372@opindex dy
3373Dump debugging information during parsing, to standard error.
3374@end table
3375
3376@item -fdump-unnumbered
3377@opindex fdump-unnumbered
3378When doing debugging dumps (see @option{-d} option above), suppress instruction
3379numbers and line number note output.  This makes it more feasible to
3380use diff on debugging dumps for compiler invocations with different
3381options, in particular with and without @option{-g}.
3382
3383@item -fdump-translation-unit @r{(C and C++ only)}
3384@itemx -fdump-translation-unit-@var{options} @r{(C and C++ only)}
3385@opindex fdump-translation-unit
3386Dump a representation of the tree structure for the entire translation
3387unit to a file.  The file name is made by appending @file{.tu} to the
3388source file name.  If the @samp{-@var{options}} form is used, @var{options}
3389controls the details of the dump as described for the
3390@option{-fdump-tree} options.
3391
3392@item -fdump-class-hierarchy @r{(C++ only)}
3393@itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
3394@opindex fdump-class-hierarchy
3395Dump a representation of each class's hierarchy and virtual function
3396table layout to a file.  The file name is made by appending @file{.class}
3397to the source file name.  If the @samp{-@var{options}} form is used,
3398@var{options} controls the details of the dump as described for the
3399@option{-fdump-tree} options.
3400
3401@item -fdump-tree-@var{switch} @r{(C++ only)}
3402@itemx -fdump-tree-@var{switch}-@var{options} @r{(C++ only)}
3403@opindex fdump-tree
3404Control the dumping at various stages of processing the intermediate
3405language tree to a file.  The file name is generated by appending a switch
3406specific suffix to the source file name.  If the @samp{-@var{options}}
3407form is used, @var{options} is a list of @samp{-} separated options that
3408control the details of the dump. Not all options are applicable to all
3409dumps, those which are not meaningful will be ignored. The following
3410options are available
3411
3412@table @samp
3413@item address
3414Print the address of each node.  Usually this is not meaningful as it
3415changes according to the environment and source file. Its primary use
3416is for tying up a dump file with a debug environment.
3417@item slim
3418Inhibit dumping of members of a scope or body of a function merely
3419because that scope has been reached. Only dump such items when they
3420are directly reachable by some other path.
3421@item all
3422Turn on all options.
3423@end table
3424
3425The following tree dumps are possible:
3426@table @samp
3427@item original
3428Dump before any tree based optimization, to @file{@var{file}.original}.
3429@item optimized
3430Dump after all tree based optimization, to @file{@var{file}.optimized}.
3431@item inlined
3432Dump after function inlining, to @file{@var{file}.inlined}.
3433@end table
3434
3435@item -frandom-seed=@var{string}
3436@opindex frandom-string
3437This option provides a seed that GCC uses when it would otherwise use
3438random numbers.  It is used to generate certain symbol names
3439that have to be different in every compiled file. It is also used to
3440place unique stamps in coverage data files and the object files that
3441produce them. You can use the @option{-frandom-seed} option to produce
3442reproducibly identical object files.
3443
3444The @var{string} should be different for every file you compile.
3445
3446@item -fsched-verbose=@var{n}
3447@opindex fsched-verbose
3448On targets that use instruction scheduling, this option controls the
3449amount of debugging output the scheduler prints.  This information is
3450written to standard error, unless @option{-dS} or @option{-dR} is
3451specified, in which case it is output to the usual dump
3452listing file, @file{.sched} or @file{.sched2} respectively.  However
3453for @var{n} greater than nine, the output is always printed to standard
3454error.
3455
3456For @var{n} greater than zero, @option{-fsched-verbose} outputs the
3457same information as @option{-dRS}.  For @var{n} greater than one, it
3458also output basic block probabilities, detailed ready list information
3459and unit/insn info.  For @var{n} greater than two, it includes RTL
3460at abort point, control-flow and regions info.  And for @var{n} over
3461four, @option{-fsched-verbose} also includes dependence info.
3462
3463@item -save-temps
3464@opindex save-temps
3465Store the usual ``temporary'' intermediate files permanently; place them
3466in the current directory and name them based on the source file.  Thus,
3467compiling @file{foo.c} with @samp{-c -save-temps} would produce files
3468@file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
3469preprocessed @file{foo.i} output file even though the compiler now
3470normally uses an integrated preprocessor.
3471
3472@item -time
3473@opindex time
3474Report the CPU time taken by each subprocess in the compilation
3475sequence.  For C source files, this is the compiler proper and assembler
3476(plus the linker if linking is done).  The output looks like this:
3477
3478@smallexample
3479# cc1 0.12 0.01
3480# as 0.00 0.01
3481@end smallexample
3482
3483The first number on each line is the ``user time,'' that is time spent
3484executing the program itself.  The second number is ``system time,''
3485time spent executing operating system routines on behalf of the program.
3486Both numbers are in seconds.
3487
3488@item -print-file-name=@var{library}
3489@opindex print-file-name
3490Print the full absolute name of the library file @var{library} that
3491would be used when linking---and don't do anything else.  With this
3492option, GCC does not compile or link anything; it just prints the
3493file name.
3494
3495@item -print-multi-directory
3496@opindex print-multi-directory
3497Print the directory name corresponding to the multilib selected by any
3498other switches present in the command line.  This directory is supposed
3499to exist in @env{GCC_EXEC_PREFIX}.
3500
3501@item -print-multi-lib
3502@opindex print-multi-lib
3503Print the mapping from multilib directory names to compiler switches
3504that enable them.  The directory name is separated from the switches by
3505@samp{;}, and each switch starts with an @samp{@@} instead of the
3506@samp{-}, without spaces between multiple switches.  This is supposed to
3507ease shell-processing.
3508
3509@item -print-prog-name=@var{program}
3510@opindex print-prog-name
3511Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
3512
3513@item -print-libgcc-file-name
3514@opindex print-libgcc-file-name
3515Same as @option{-print-file-name=libgcc.a}.
3516
3517This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
3518but you do want to link with @file{libgcc.a}.  You can do
3519
3520@smallexample
3521gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
3522@end smallexample
3523
3524@item -print-search-dirs
3525@opindex print-search-dirs
3526Print the name of the configured installation directory and a list of
3527program and library directories @command{gcc} will search---and don't do anything else.
3528
3529This is useful when @command{gcc} prints the error message
3530@samp{installation problem, cannot exec cpp0: No such file or directory}.
3531To resolve this you either need to put @file{cpp0} and the other compiler
3532components where @command{gcc} expects to find them, or you can set the environment
3533variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
3534Don't forget the trailing '/'.
3535@xref{Environment Variables}.
3536
3537@item -dumpmachine
3538@opindex dumpmachine
3539Print the compiler's target machine (for example,
3540@samp{i686-pc-linux-gnu})---and don't do anything else.
3541
3542@item -dumpversion
3543@opindex dumpversion
3544Print the compiler version (for example, @samp{3.0})---and don't do
3545anything else.
3546
3547@item -dumpspecs
3548@opindex dumpspecs
3549Print the compiler's built-in specs---and don't do anything else.  (This
3550is used when GCC itself is being built.)  @xref{Spec Files}.
3551
3552@item -feliminate-unused-debug-types
3553@opindex feliminate-unused-debug-types
3554Normally, when producing DWARF2 output, GCC will emit debugging
3555information for all types declared in a compilation
3556unit, regardless of whether or not they are actually used
3557in that compilation unit.  Sometimes this is useful, such as
3558if, in the debugger, you want to cast a value to a type that is
3559not actually used in your program (but is declared).  More often,
3560however, this results in a significant amount of wasted space.
3561With this option, GCC will avoid producing debug symbol output
3562for types that are nowhere used in the source file being compiled.
3563@end table
3564
3565@node Optimize Options
3566@section Options That Control Optimization
3567@cindex optimize options
3568@cindex options, optimization
3569
3570These options control various sorts of optimizations.
3571
3572Without any optimization option, the compiler's goal is to reduce the
3573cost of compilation and to make debugging produce the expected
3574results.  Statements are independent: if you stop the program with a
3575breakpoint between statements, you can then assign a new value to any
3576variable or change the program counter to any other statement in the
3577function and get exactly the results you would expect from the source
3578code.
3579
3580Turning on optimization flags makes the compiler attempt to improve
3581the performance and/or code size at the expense of compilation time
3582and possibly the ability to debug the program.
3583
3584The compiler performs optimization based on the knowledge it has of
3585the program.  Using the @option{-funit-at-a-time} flag will allow the
3586compiler to consider information gained from later functions in the
3587file when compiling a function.  Compiling multiple files at once to a
3588single output file (and using @option{-funit-at-a-time}) will allow
3589the compiler to use information gained from all of the files when
3590compiling each of them.
3591
3592Not all optimizations are controlled directly by a flag.  Only
3593optimizations that have a flag are listed.
3594
3595@table @gcctabopt
3596@item -O
3597@itemx -O1
3598@opindex O
3599@opindex O1
3600Optimize.  Optimizing compilation takes somewhat more time, and a lot
3601more memory for a large function.
3602
3603With @option{-O}, the compiler tries to reduce code size and execution
3604time, without performing any optimizations that take a great deal of
3605compilation time.
3606
3607@option{-O} turns on the following optimization flags:
3608@gccoptlist{-fdefer-pop @gol
3609-fmerge-constants @gol
3610-fthread-jumps @gol
3611-floop-optimize @gol
3612-fif-conversion @gol
3613-fif-conversion2 @gol
3614-fdelayed-branch @gol
3615-fguess-branch-probability @gol
3616-fcprop-registers}
3617
3618@option{-O} also turns on @option{-fomit-frame-pointer} on machines
3619where doing so does not interfere with debugging.
3620
3621@item -O2
3622@opindex O2
3623Optimize even more.  GCC performs nearly all supported optimizations
3624that do not involve a space-speed tradeoff.  The compiler does not
3625perform loop unrolling or function inlining when you specify @option{-O2}.
3626As compared to @option{-O}, this option increases both compilation time
3627and the performance of the generated code.
3628
3629@option{-O2} turns on all optimization flags specified by @option{-O}.  It
3630also turns on the following optimization flags:
3631@gccoptlist{-fforce-mem @gol
3632-foptimize-sibling-calls @gol
3633-fstrength-reduce @gol
3634-fcse-follow-jumps  -fcse-skip-blocks @gol
3635-frerun-cse-after-loop  -frerun-loop-opt @gol
3636-fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las @gol
3637-fdelete-null-pointer-checks @gol
3638-fexpensive-optimizations @gol
3639-fregmove @gol
3640-fschedule-insns  -fschedule-insns2 @gol
3641-fsched-interblock  -fsched-spec @gol
3642-fcaller-saves @gol
3643-fpeephole2 @gol
3644-freorder-blocks  -freorder-functions @gol
3645-fstrict-aliasing @gol
3646-funit-at-a-time @gol
3647-falign-functions  -falign-jumps @gol
3648-falign-loops  -falign-labels @gol
3649-fcrossjumping}
3650
3651Please note the warning under @option{-fgcse} about
3652invoking @option{-O2} on programs that use computed gotos.
3653
3654@item -O3
3655@opindex O3
3656Optimize yet more.  @option{-O3} turns on all optimizations specified by
3657@option{-O2} and also turns on the @option{-finline-functions},
3658@option{-fweb} and @option{-frename-registers} options.
3659
3660@item -O0
3661@opindex O0
3662Do not optimize.  This is the default.
3663
3664@item -Os
3665@opindex Os
3666Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
3667do not typically increase code size.  It also performs further
3668optimizations designed to reduce code size.
3669
3670@option{-Os} disables the following optimization flags:
3671@gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
3672-falign-labels  -freorder-blocks  -fprefetch-loop-arrays}
3673
3674If you use multiple @option{-O} options, with or without level numbers,
3675the last such option is the one that is effective.
3676@end table
3677
3678Options of the form @option{-f@var{flag}} specify machine-independent
3679flags.  Most flags have both positive and negative forms; the negative
3680form of @option{-ffoo} would be @option{-fno-foo}.  In the table
3681below, only one of the forms is listed---the one you typically will
3682use.  You can figure out the other form by either removing @samp{no-}
3683or adding it.
3684
3685The following options control specific optimizations.  They are either
3686activated by @option{-O} options or are related to ones that are.  You
3687can use the following flags in the rare cases when ``fine-tuning'' of
3688optimizations to be performed is desired.
3689
3690@table @gcctabopt
3691@item -fno-default-inline
3692@opindex fno-default-inline
3693Do not make member functions inline by default merely because they are
3694defined inside the class scope (C++ only).  Otherwise, when you specify
3695@w{@option{-O}}, member functions defined inside class scope are compiled
3696inline by default; i.e., you don't need to add @samp{inline} in front of
3697the member function name.
3698
3699@item -fno-defer-pop
3700@opindex fno-defer-pop
3701Always pop the arguments to each function call as soon as that function
3702returns.  For machines which must pop arguments after a function call,
3703the compiler normally lets arguments accumulate on the stack for several
3704function calls and pops them all at once.
3705
3706Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3707
3708@item -fforce-mem
3709@opindex fforce-mem
3710Force memory operands to be copied into registers before doing
3711arithmetic on them.  This produces better code by making all memory
3712references potential common subexpressions.  When they are not common
3713subexpressions, instruction combination should eliminate the separate
3714register-load.
3715
3716Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3717
3718@item -fforce-addr
3719@opindex fforce-addr
3720Force memory address constants to be copied into registers before
3721doing arithmetic on them.  This may produce better code just as
3722@option{-fforce-mem} may.
3723
3724@item -fomit-frame-pointer
3725@opindex fomit-frame-pointer
3726Don't keep the frame pointer in a register for functions that
3727don't need one.  This avoids the instructions to save, set up and
3728restore frame pointers; it also makes an extra register available
3729in many functions.  @strong{It also makes debugging impossible on
3730some machines.}
3731
3732On some machines, such as the VAX, this flag has no effect, because
3733the standard calling sequence automatically handles the frame pointer
3734and nothing is saved by pretending it doesn't exist.  The
3735machine-description macro @code{FRAME_POINTER_REQUIRED} controls
3736whether a target machine supports this flag.  @xref{Registers,,Register
3737Usage, gccint, GNU Compiler Collection (GCC) Internals}.
3738
3739Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3740
3741@item -foptimize-sibling-calls
3742@opindex foptimize-sibling-calls
3743Optimize sibling and tail recursive calls.
3744
3745Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3746
3747@item -fno-inline
3748@opindex fno-inline
3749Don't pay attention to the @code{inline} keyword.  Normally this option
3750is used to keep the compiler from expanding any functions inline.
3751Note that if you are not optimizing, no functions can be expanded inline.
3752
3753@item -finline-functions
3754@opindex finline-functions
3755Integrate all simple functions into their callers.  The compiler
3756heuristically decides which functions are simple enough to be worth
3757integrating in this way.
3758
3759If all calls to a given function are integrated, and the function is
3760declared @code{static}, then the function is normally not output as
3761assembler code in its own right.
3762
3763Enabled at level @option{-O3}.
3764
3765@item -finline-limit=@var{n}
3766@opindex finline-limit
3767By default, GCC limits the size of functions that can be inlined.  This flag
3768allows the control of this limit for functions that are explicitly marked as
3769inline (i.e., marked with the inline keyword or defined within the class
3770definition in c++).  @var{n} is the size of functions that can be inlined in
3771number of pseudo instructions (not counting parameter handling).  The default
3772value of @var{n} is 600.
3773Increasing this value can result in more inlined code at
3774the cost of compilation time and memory consumption.  Decreasing usually makes
3775the compilation faster and less code will be inlined (which presumably
3776means slower programs).  This option is particularly useful for programs that
3777use inlining heavily such as those based on recursive templates with C++.
3778
3779Inlining is actually controlled by a number of parameters, which may be
3780specified individually by using @option{--param @var{name}=@var{value}}.
3781The @option{-finline-limit=@var{n}} option sets some of these parameters
3782as follows:
3783
3784@table @gcctabopt
3785 @item max-inline-insns-single
3786  is set to @var{n}/2.
3787 @item max-inline-insns-auto
3788  is set to @var{n}/2.
3789 @item min-inline-insns
3790  is set to 130 or @var{n}/4, whichever is smaller.
3791 @item max-inline-insns-rtl
3792  is set to @var{n}.
3793@end table
3794
3795See below for a documentation of the individual
3796parameters controlling inlining.
3797
3798@emph{Note:} pseudo instruction represents, in this particular context, an
3799abstract measurement of function's size.  In no way, it represents a count
3800of assembly instructions and as such its exact meaning might change from one
3801release to an another.
3802
3803@item -fkeep-inline-functions
3804@opindex fkeep-inline-functions
3805Even if all calls to a given function are integrated, and the function
3806is declared @code{static}, nevertheless output a separate run-time
3807callable version of the function.  This switch does not affect
3808@code{extern inline} functions.
3809
3810@item -fkeep-static-consts
3811@opindex fkeep-static-consts
3812Emit variables declared @code{static const} when optimization isn't turned
3813on, even if the variables aren't referenced.
3814
3815GCC enables this option by default.  If you want to force the compiler to
3816check if the variable was referenced, regardless of whether or not
3817optimization is turned on, use the @option{-fno-keep-static-consts} option.
3818
3819@item -fmerge-constants
3820Attempt to merge identical constants (string constants and floating point
3821constants) across compilation units.
3822
3823This option is the default for optimized compilation if the assembler and
3824linker support it.  Use @option{-fno-merge-constants} to inhibit this
3825behavior.
3826
3827Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3828
3829@item -fmerge-all-constants
3830Attempt to merge identical constants and identical variables.
3831
3832This option implies @option{-fmerge-constants}.  In addition to
3833@option{-fmerge-constants} this considers e.g. even constant initialized
3834arrays or initialized constant variables with integral or floating point
3835types.  Languages like C or C++ require each non-automatic variable to
3836have distinct location, so using this option will result in non-conforming
3837behavior.
3838
3839@item -fnew-ra
3840@opindex fnew-ra
3841Use a graph coloring register allocator.  Currently this option is meant
3842only for testing.  Users should not specify this option, since it is not
3843yet ready for production use.
3844
3845@item -fno-branch-count-reg
3846@opindex fno-branch-count-reg
3847Do not use ``decrement and branch'' instructions on a count register,
3848but instead generate a sequence of instructions that decrement a
3849register, compare it against zero, then branch based upon the result.
3850This option is only meaningful on architectures that support such
3851instructions, which include x86, PowerPC, IA-64 and S/390.
3852
3853The default is @option{-fbranch-count-reg}, enabled when
3854@option{-fstrength-reduce} is enabled.
3855
3856@item -fno-function-cse
3857@opindex fno-function-cse
3858Do not put function addresses in registers; make each instruction that
3859calls a constant function contain the function's address explicitly.
3860
3861This option results in less efficient code, but some strange hacks
3862that alter the assembler output may be confused by the optimizations
3863performed when this option is not used.
3864
3865The default is @option{-ffunction-cse}
3866
3867@item -fno-zero-initialized-in-bss
3868@opindex fno-zero-initialized-in-bss
3869If the target supports a BSS section, GCC by default puts variables that
3870are initialized to zero into BSS@.  This can save space in the resulting
3871code.
3872
3873This option turns off this behavior because some programs explicitly
3874rely on variables going to the data section.  E.g., so that the
3875resulting executable can find the beginning of that section and/or make
3876assumptions based on that.
3877
3878The default is @option{-fzero-initialized-in-bss}.
3879
3880@item -fstrength-reduce
3881@opindex fstrength-reduce
3882Perform the optimizations of loop strength reduction and
3883elimination of iteration variables.
3884
3885Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3886
3887@item -fthread-jumps
3888@opindex fthread-jumps
3889Perform optimizations where we check to see if a jump branches to a
3890location where another comparison subsumed by the first is found.  If
3891so, the first branch is redirected to either the destination of the
3892second branch or a point immediately following it, depending on whether
3893the condition is known to be true or false.
3894
3895Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3896
3897@item -fcse-follow-jumps
3898@opindex fcse-follow-jumps
3899In common subexpression elimination, scan through jump instructions
3900when the target of the jump is not reached by any other path.  For
3901example, when CSE encounters an @code{if} statement with an
3902@code{else} clause, CSE will follow the jump when the condition
3903tested is false.
3904
3905Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3906
3907@item -fcse-skip-blocks
3908@opindex fcse-skip-blocks
3909This is similar to @option{-fcse-follow-jumps}, but causes CSE to
3910follow jumps which conditionally skip over blocks.  When CSE
3911encounters a simple @code{if} statement with no else clause,
3912@option{-fcse-skip-blocks} causes CSE to follow the jump around the
3913body of the @code{if}.
3914
3915Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3916
3917@item -frerun-cse-after-loop
3918@opindex frerun-cse-after-loop
3919Re-run common subexpression elimination after loop optimizations has been
3920performed.
3921
3922Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3923
3924@item -frerun-loop-opt
3925@opindex frerun-loop-opt
3926Run the loop optimizer twice.
3927
3928Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3929
3930@item -fgcse
3931@opindex fgcse
3932Perform a global common subexpression elimination pass.
3933This pass also performs global constant and copy propagation.
3934
3935@emph{Note:} When compiling a program using computed gotos, a GCC
3936extension, you may get better runtime performance if you disable
3937the global common subexpression elimination pass by adding
3938@option{-fno-gcse} to the command line.
3939
3940Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3941
3942@item -fgcse-lm
3943@opindex fgcse-lm
3944When @option{-fgcse-lm} is enabled, global common subexpression elimination will
3945attempt to move loads which are only killed by stores into themselves.  This
3946allows a loop containing a load/store sequence to be changed to a load outside
3947the loop, and a copy/store within the loop.
3948
3949Enabled by default when gcse is enabled.
3950
3951@item -fgcse-sm
3952@opindex fgcse-sm
3953When @option{-fgcse-sm} is enabled, a store motion pass is run after
3954global common subexpression elimination.  This pass will attempt to move
3955stores out of loops.  When used in conjunction with @option{-fgcse-lm},
3956loops containing a load/store sequence can be changed to a load before
3957the loop and a store after the loop.
3958
3959Enabled by default when gcse is enabled.
3960
3961@item -fgcse-las
3962@opindex fgcse-las
3963When @option{-fgcse-las} is enabled, the global common subexpression
3964elimination pass eliminates redundant loads that come after stores to the
3965same memory location (both partial and full redundancies).
3966
3967Enabled by default when gcse is enabled.
3968
3969@item -floop-optimize
3970@opindex floop-optimize
3971Perform loop optimizations: move constant expressions out of loops, simplify
3972exit test conditions and optionally do strength-reduction and loop unrolling as
3973well.
3974
3975Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3976
3977@item -fcrossjumping
3978@opindex crossjumping
3979Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The
3980resulting code may or may not perform better than without cross-jumping.
3981
3982Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3983
3984@item -fif-conversion
3985@opindex if-conversion
3986Attempt to transform conditional jumps into branch-less equivalents.  This
3987include use of conditional moves, min, max, set flags and abs instructions, and
3988some tricks doable by standard arithmetics.  The use of conditional execution
3989on chips where it is available is controlled by @code{if-conversion2}.
3990
3991Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3992
3993@item -fif-conversion2
3994@opindex if-conversion2
3995Use conditional execution (where available) to transform conditional jumps into
3996branch-less equivalents.
3997
3998Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3999
4000@item -fdelete-null-pointer-checks
4001@opindex fdelete-null-pointer-checks
4002Use global dataflow analysis to identify and eliminate useless checks
4003for null pointers.  The compiler assumes that dereferencing a null
4004pointer would have halted the program.  If a pointer is checked after
4005it has already been dereferenced, it cannot be null.
4006
4007In some environments, this assumption is not true, and programs can
4008safely dereference null pointers.  Use
4009@option{-fno-delete-null-pointer-checks} to disable this optimization
4010for programs which depend on that behavior.
4011
4012Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4013
4014@item -fexpensive-optimizations
4015@opindex fexpensive-optimizations
4016Perform a number of minor optimizations that are relatively expensive.
4017
4018Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4019
4020@item -foptimize-register-move
4021@itemx -fregmove
4022@opindex foptimize-register-move
4023@opindex fregmove
4024Attempt to reassign register numbers in move instructions and as
4025operands of other simple instructions in order to maximize the amount of
4026register tying.  This is especially helpful on machines with two-operand
4027instructions.
4028
4029Note @option{-fregmove} and @option{-foptimize-register-move} are the same
4030optimization.
4031
4032Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4033
4034@item -fdelayed-branch
4035@opindex fdelayed-branch
4036If supported for the target machine, attempt to reorder instructions
4037to exploit instruction slots available after delayed branch
4038instructions.
4039
4040Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4041
4042@item -fschedule-insns
4043@opindex fschedule-insns
4044If supported for the target machine, attempt to reorder instructions to
4045eliminate execution stalls due to required data being unavailable.  This
4046helps machines that have slow floating point or memory load instructions
4047by allowing other instructions to be issued until the result of the load
4048or floating point instruction is required.
4049
4050Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4051
4052@item -fschedule-insns2
4053@opindex fschedule-insns2
4054Similar to @option{-fschedule-insns}, but requests an additional pass of
4055instruction scheduling after register allocation has been done.  This is
4056especially useful on machines with a relatively small number of
4057registers and where memory load instructions take more than one cycle.
4058
4059Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4060
4061@item -fno-sched-interblock
4062@opindex fno-sched-interblock
4063Don't schedule instructions across basic blocks.  This is normally
4064enabled by default when scheduling before register allocation, i.e.@:
4065with @option{-fschedule-insns} or at @option{-O2} or higher.
4066
4067@item -fno-sched-spec
4068@opindex fno-sched-spec
4069Don't allow speculative motion of non-load instructions.  This is normally
4070enabled by default when scheduling before register allocation, i.e.@:
4071with @option{-fschedule-insns} or at @option{-O2} or higher.
4072
4073@item -fsched-spec-load
4074@opindex fsched-spec-load
4075Allow speculative motion of some load instructions.  This only makes
4076sense when scheduling before register allocation, i.e.@: with
4077@option{-fschedule-insns} or at @option{-O2} or higher.
4078
4079@item -fsched-spec-load-dangerous
4080@opindex fsched-spec-load-dangerous
4081Allow speculative motion of more load instructions.  This only makes
4082sense when scheduling before register allocation, i.e.@: with
4083@option{-fschedule-insns} or at @option{-O2} or higher.
4084
4085@item -fsched-stalled-insns=@var{n}
4086@opindex fsched-stalled-insns
4087Define how many insns (if any) can be moved prematurely from the queue
4088of stalled insns into the ready list, during the second scheduling pass.
4089
4090@item -fsched-stalled-insns-dep=@var{n}
4091@opindex fsched-stalled-insns-dep
4092Define how many insn groups (cycles) will be examined for a dependency
4093on a stalled insn that is candidate for premature removal from the queue
4094of stalled insns.  Has an effect only during the second scheduling pass,
4095and only if @option{-fsched-stalled-insns} is used and its value is not zero.
4096
4097@item -fsched2-use-superblocks
4098@opindex fsched2-use-superblocks
4099When scheduling after register allocation, do use superblock scheduling
4100algorithm.  Superblock scheduling allows motion across basic block boundaries
4101resulting on faster schedules.  This option is experimental, as not all machine
4102descriptions used by GCC model the CPU closely enough to avoid unreliable
4103results from the algorithm.
4104
4105This only makes sense when scheduling after register allocation, i.e.@: with
4106@option{-fschedule-insns2} or at @option{-O2} or higher.
4107
4108@item -fsched2-use-traces
4109@opindex fsched2-use-traces
4110Use @option{-fsched2-use-superblocks} algorithm when scheduling after register
4111allocation and additionally perform code duplication in order to increase the
4112size of superblocks using tracer pass.  See @option{-ftracer} for details on
4113trace formation.
4114
4115This mode should produce faster but significantly longer programs.  Also
4116without @code{-fbranch-probabilities} the traces constructed may not match the
4117reality and hurt the performance.  This only makes
4118sense when scheduling after register allocation, i.e.@: with
4119@option{-fschedule-insns2} or at @option{-O2} or higher.
4120
4121@item -fcaller-saves
4122@opindex fcaller-saves
4123Enable values to be allocated in registers that will be clobbered by
4124function calls, by emitting extra instructions to save and restore the
4125registers around such calls.  Such allocation is done only when it
4126seems to result in better code than would otherwise be produced.
4127
4128This option is always enabled by default on certain machines, usually
4129those which have no call-preserved registers to use instead.
4130
4131Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4132
4133@item -fmove-all-movables
4134@opindex fmove-all-movables
4135Forces all invariant computations in loops to be moved
4136outside the loop.
4137
4138@item -freduce-all-givs
4139@opindex freduce-all-givs
4140Forces all general-induction variables in loops to be
4141strength-reduced.
4142
4143@emph{Note:} When compiling programs written in Fortran,
4144@option{-fmove-all-movables} and @option{-freduce-all-givs} are enabled
4145by default when you use the optimizer.
4146
4147These options may generate better or worse code; results are highly
4148dependent on the structure of loops within the source code.
4149
4150These two options are intended to be removed someday, once
4151they have helped determine the efficacy of various
4152approaches to improving loop optimizations.
4153
4154Please contact @w{@email{gcc@@gcc.gnu.org}}, and describe how use of
4155these options affects the performance of your production code.
4156Examples of code that runs @emph{slower} when these options are
4157@emph{enabled} are very valuable.
4158
4159@item -fno-peephole
4160@itemx -fno-peephole2
4161@opindex fno-peephole
4162@opindex fno-peephole2
4163Disable any machine-specific peephole optimizations.  The difference
4164between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
4165are implemented in the compiler; some targets use one, some use the
4166other, a few use both.
4167
4168@option{-fpeephole} is enabled by default.
4169@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4170
4171@item -fno-guess-branch-probability
4172@opindex fno-guess-branch-probability
4173Do not guess branch probabilities using a randomized model.
4174
4175Sometimes GCC will opt to use a randomized model to guess branch
4176probabilities, when none are available from either profiling feedback
4177(@option{-fprofile-arcs}) or @samp{__builtin_expect}.  This means that
4178different runs of the compiler on the same program may produce different
4179object code.
4180
4181In a hard real-time system, people don't want different runs of the
4182compiler to produce code that has different behavior; minimizing
4183non-determinism is of paramount import.  This switch allows users to
4184reduce non-determinism, possibly at the expense of inferior
4185optimization.
4186
4187The default is @option{-fguess-branch-probability} at levels
4188@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4189
4190@item -freorder-blocks
4191@opindex freorder-blocks
4192Reorder basic blocks in the compiled function in order to reduce number of
4193taken branches and improve code locality.
4194
4195Enabled at levels @option{-O2}, @option{-O3}.
4196
4197@item -freorder-functions
4198@opindex freorder-functions
4199Reorder basic blocks in the compiled function in order to reduce number of
4200taken branches and improve code locality. This is implemented by using special
4201subsections @code{text.hot} for most frequently executed functions and
4202@code{text.unlikely} for unlikely executed functions.  Reordering is done by
4203the linker so object file format must support named sections and linker must
4204place them in a reasonable way.
4205
4206Also profile feedback must be available in to make this option effective.  See
4207@option{-fprofile-arcs} for details.
4208
4209Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4210
4211@item -fstrict-aliasing
4212@opindex fstrict-aliasing
4213Allows the compiler to assume the strictest aliasing rules applicable to
4214the language being compiled.  For C (and C++), this activates
4215optimizations based on the type of expressions.  In particular, an
4216object of one type is assumed never to reside at the same address as an
4217object of a different type, unless the types are almost the same.  For
4218example, an @code{unsigned int} can alias an @code{int}, but not a
4219@code{void*} or a @code{double}.  A character type may alias any other
4220type.
4221
4222Pay special attention to code like this:
4223@smallexample
4224union a_union @{
4225  int i;
4226  double d;
4227@};
4228
4229int f() @{
4230  a_union t;
4231  t.d = 3.0;
4232  return t.i;
4233@}
4234@end smallexample
4235The practice of reading from a different union member than the one most
4236recently written to (called ``type-punning'') is common.  Even with
4237@option{-fstrict-aliasing}, type-punning is allowed, provided the memory
4238is accessed through the union type.  So, the code above will work as
4239expected.  However, this code might not:
4240@smallexample
4241int f() @{
4242  a_union t;
4243  int* ip;
4244  t.d = 3.0;
4245  ip = &t.i;
4246  return *ip;
4247@}
4248@end smallexample
4249
4250Every language that wishes to perform language-specific alias analysis
4251should define a function that computes, given an @code{tree}
4252node, an alias set for the node.  Nodes in different alias sets are not
4253allowed to alias.  For an example, see the C front-end function
4254@code{c_get_alias_set}.
4255
4256Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4257
4258@item -falign-functions
4259@itemx -falign-functions=@var{n}
4260@opindex falign-functions
4261Align the start of functions to the next power-of-two greater than
4262@var{n}, skipping up to @var{n} bytes.  For instance,
4263@option{-falign-functions=32} aligns functions to the next 32-byte
4264boundary, but @option{-falign-functions=24} would align to the next
426532-byte boundary only if this can be done by skipping 23 bytes or less.
4266
4267@option{-fno-align-functions} and @option{-falign-functions=1} are
4268equivalent and mean that functions will not be aligned.
4269
4270Some assemblers only support this flag when @var{n} is a power of two;
4271in that case, it is rounded up.
4272
4273If @var{n} is not specified or is zero, use a machine-dependent default.
4274
4275Enabled at levels @option{-O2}, @option{-O3}.
4276
4277@item -falign-labels
4278@itemx -falign-labels=@var{n}
4279@opindex falign-labels
4280Align all branch targets to a power-of-two boundary, skipping up to
4281@var{n} bytes like @option{-falign-functions}.  This option can easily
4282make code slower, because it must insert dummy operations for when the
4283branch target is reached in the usual flow of the code.
4284
4285@option{-fno-align-labels} and @option{-falign-labels=1} are
4286equivalent and mean that labels will not be aligned.
4287
4288If @option{-falign-loops} or @option{-falign-jumps} are applicable and
4289are greater than this value, then their values are used instead.
4290
4291If @var{n} is not specified or is zero, use a machine-dependent default
4292which is very likely to be @samp{1}, meaning no alignment.
4293
4294Enabled at levels @option{-O2}, @option{-O3}.
4295
4296@item -falign-loops
4297@itemx -falign-loops=@var{n}
4298@opindex falign-loops
4299Align loops to a power-of-two boundary, skipping up to @var{n} bytes
4300like @option{-falign-functions}.  The hope is that the loop will be
4301executed many times, which will make up for any execution of the dummy
4302operations.
4303
4304@option{-fno-align-loops} and @option{-falign-loops=1} are
4305equivalent and mean that loops will not be aligned.
4306
4307If @var{n} is not specified or is zero, use a machine-dependent default.
4308
4309Enabled at levels @option{-O2}, @option{-O3}.
4310
4311@item -falign-jumps
4312@itemx -falign-jumps=@var{n}
4313@opindex falign-jumps
4314Align branch targets to a power-of-two boundary, for branch targets
4315where the targets can only be reached by jumping, skipping up to @var{n}
4316bytes like @option{-falign-functions}.  In this case, no dummy operations
4317need be executed.
4318
4319@option{-fno-align-jumps} and @option{-falign-jumps=1} are
4320equivalent and mean that loops will not be aligned.
4321
4322If @var{n} is not specified or is zero, use a machine-dependent default.
4323
4324Enabled at levels @option{-O2}, @option{-O3}.
4325
4326@item -frename-registers
4327@opindex frename-registers
4328Attempt to avoid false dependencies in scheduled code by making use
4329of registers left over after register allocation.  This optimization
4330will most benefit processors with lots of registers.  It can, however,
4331make debugging impossible, since variables will no longer stay in
4332a ``home register''.
4333
4334@item -fweb
4335@opindex fweb
4336Constructs webs as commonly used for register allocation purposes and assign
4337each web individual pseudo register.  This allows the register allocation pass
4338to operate on pseudos directly, but also strengthens several other optimization
4339passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
4340however, make debugging impossible, since variables will no longer stay in a
4341``home register''.
4342
4343Enabled at levels @option{-O3}.
4344
4345@item -fno-cprop-registers
4346@opindex fno-cprop-registers
4347After register allocation and post-register allocation instruction splitting,
4348we perform a copy-propagation pass to try to reduce scheduling dependencies
4349and occasionally eliminate the copy.
4350
4351Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4352
4353@item -fprofile-generate
4354@opindex fprofile-generate
4355
4356Enable options usually used for instrumenting application to produce
4357profile useful for later recompilation with profile feedback based
4358optimization.  You must use @code{-fprofile-generate} both when
4359compiling and when linking your program.
4360
4361The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
4362
4363@item -fprofile-use
4364@opindex fprofile-use
4365Enable profile feedback directed optimizations, and optimizations
4366generally profitable only with profile feedback available.
4367
4368The following options are enabled: @code{-fbranch-probabilities},
4369@code{-fvpt}, @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}.
4370
4371@end table
4372
4373The following options control compiler behavior regarding floating
4374point arithmetic.  These options trade off between speed and
4375correctness.  All must be specifically enabled.
4376
4377@table @gcctabopt
4378@item -ffloat-store
4379@opindex ffloat-store
4380Do not store floating point variables in registers, and inhibit other
4381options that might change whether a floating point value is taken from a
4382register or memory.
4383
4384@cindex floating point precision
4385This option prevents undesirable excess precision on machines such as
4386the 68000 where the floating registers (of the 68881) keep more
4387precision than a @code{double} is supposed to have.  Similarly for the
4388x86 architecture.  For most programs, the excess precision does only
4389good, but a few programs rely on the precise definition of IEEE floating
4390point.  Use @option{-ffloat-store} for such programs, after modifying
4391them to store all pertinent intermediate computations into variables.
4392
4393@item -ffast-math
4394@opindex ffast-math
4395Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @*
4396@option{-fno-trapping-math}, @option{-ffinite-math-only},
4397@option{-fno-rounding-math} and @option{-fno-signaling-nans}.
4398
4399This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
4400
4401This option should never be turned on by any @option{-O} option since
4402it can result in incorrect output for programs which depend on
4403an exact implementation of IEEE or ISO rules/specifications for
4404math functions.
4405
4406@item -fno-math-errno
4407@opindex fno-math-errno
4408Do not set ERRNO after calling math functions that are executed
4409with a single instruction, e.g., sqrt.  A program that relies on
4410IEEE exceptions for math error handling may want to use this flag
4411for speed while maintaining IEEE arithmetic compatibility.
4412
4413This option should never be turned on by any @option{-O} option since
4414it can result in incorrect output for programs which depend on
4415an exact implementation of IEEE or ISO rules/specifications for
4416math functions.
4417
4418The default is @option{-fmath-errno}.
4419
4420@item -funsafe-math-optimizations
4421@opindex funsafe-math-optimizations
4422Allow optimizations for floating-point arithmetic that (a) assume
4423that arguments and results are valid and (b) may violate IEEE or
4424ANSI standards.  When used at link-time, it may include libraries
4425or startup files that change the default FPU control word or other
4426similar optimizations.
4427
4428This option should never be turned on by any @option{-O} option since
4429it can result in incorrect output for programs which depend on
4430an exact implementation of IEEE or ISO rules/specifications for
4431math functions.
4432
4433The default is @option{-fno-unsafe-math-optimizations}.
4434
4435@item -ffinite-math-only
4436@opindex ffinite-math-only
4437Allow optimizations for floating-point arithmetic that assume
4438that arguments and results are not NaNs or +-Infs.
4439
4440This option should never be turned on by any @option{-O} option since
4441it can result in incorrect output for programs which depend on
4442an exact implementation of IEEE or ISO rules/specifications.
4443
4444The default is @option{-fno-finite-math-only}.
4445
4446@item -fno-trapping-math
4447@opindex fno-trapping-math
4448Compile code assuming that floating-point operations cannot generate
4449user-visible traps.  These traps include division by zero, overflow,
4450underflow, inexact result and invalid operation.  This option implies
4451@option{-fno-signaling-nans}.  Setting this option may allow faster
4452code if one relies on ``non-stop'' IEEE arithmetic, for example.
4453
4454This option should never be turned on by any @option{-O} option since
4455it can result in incorrect output for programs which depend on
4456an exact implementation of IEEE or ISO rules/specifications for
4457math functions.
4458
4459The default is @option{-ftrapping-math}.
4460
4461@item -frounding-math
4462@opindex frounding-math
4463Disable transformations and optimizations that assume default floating
4464point rounding behavior.  This is round-to-zero for all floating point
4465to integer conversions, and round-to-nearest for all other arithmetic
4466truncations.  This option should be specified for programs that change
4467the FP rounding mode dynamically, or that may be executed with a
4468non-default rounding mode.  This option disables constant folding of
4469floating point expressions at compile-time (which may be affected by
4470rounding mode) and arithmetic transformations that are unsafe in the
4471presence of sign-dependent rounding modes.
4472
4473The default is @option{-fno-rounding-math}.
4474
4475This option is experimental and does not currently guarantee to
4476disable all GCC optimizations that are affected by rounding mode.
4477Future versions of GCC may provide finer control of this setting
4478using C99's @code{FENV_ACCESS} pragma.  This command line option
4479will be used to specify the default state for @code{FENV_ACCESS}.
4480
4481@item -fsignaling-nans
4482@opindex fsignaling-nans
4483Compile code assuming that IEEE signaling NaNs may generate user-visible
4484traps during floating-point operations.  Setting this option disables
4485optimizations that may change the number of exceptions visible with
4486signaling NaNs.  This option implies @option{-ftrapping-math}.
4487
4488This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
4489be defined.
4490
4491The default is @option{-fno-signaling-nans}.
4492
4493This option is experimental and does not currently guarantee to
4494disable all GCC optimizations that affect signaling NaN behavior.
4495
4496@item -fsingle-precision-constant
4497@opindex fsingle-precision-constant
4498Treat floating point constant as single precision constant instead of
4499implicitly converting it to double precision constant.
4500
4501
4502@end table
4503
4504The following options control optimizations that may improve
4505performance, but are not enabled by any @option{-O} options.  This
4506section includes experimental options that may produce broken code.
4507
4508@table @gcctabopt
4509@item -fbranch-probabilities
4510@opindex fbranch-probabilities
4511After running a program compiled with @option{-fprofile-arcs}
4512(@pxref{Debugging Options,, Options for Debugging Your Program or
4513@command{gcc}}), you can compile it a second time using
4514@option{-fbranch-probabilities}, to improve optimizations based on
4515the number of times each branch was taken.  When the program
4516compiled with @option{-fprofile-arcs} exits it saves arc execution
4517counts to a file called @file{@var{sourcename}.gcda} for each source
4518file  The information in this data file is very dependent on the
4519structure of the generated code, so you must use the same source code
4520and the same optimization options for both compilations.
4521
4522With @option{-fbranch-probabilities}, GCC puts a
4523@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
4524These can be used to improve optimization.  Currently, they are only
4525used in one place: in @file{reorg.c}, instead of guessing which path a
4526branch is mostly to take, the @samp{REG_BR_PROB} values are used to
4527exactly determine which path is taken more often.
4528
4529@item -fprofile-values
4530@opindex fprofile-values
4531If combined with @option{-fprofile-arcs}, it adds code so that some
4532data about values of expressions in the program is gathered.
4533
4534With @option{-fbranch-probabilities}, it reads back the data gathered
4535from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
4536notes to instructions for their later usage in optimizations.
4537
4538@item -fvpt
4539@opindex fvpt
4540If combined with @option{-fprofile-arcs}, it instructs the compiler to add
4541a code to gather information about values of expressions.
4542
4543With @option{-fbranch-probabilities}, it reads back the data gathered
4544and actually performs the optimizations based on them.
4545Currently the optimizations include specialization of division operation
4546using the knowledge about the value of the denominator.
4547
4548@item -fnew-ra
4549@opindex fnew-ra
4550Use a graph coloring register allocator.  Currently this option is meant
4551for testing, so we are interested to hear about miscompilations with
4552@option{-fnew-ra}.
4553
4554@item -ftracer
4555@opindex ftracer
4556Perform tail duplication to enlarge superblock size. This transformation
4557simplifies the control flow of the function allowing other optimizations to do
4558better job.
4559
4560@item -funit-at-a-time
4561@opindex funit-at-a-time
4562Parse the whole compilation unit before starting to produce code.
4563This allows some extra optimizations to take place but consumes more
4564memory.
4565
4566@item -funroll-loops
4567@opindex funroll-loops
4568Unroll loops whose number of iterations can be determined at compile time or
4569upon entry to the loop.  @option{-funroll-loops} implies
4570@option{-frerun-cse-after-loop}.  It also turns on complete loop peeling
4571(i.e. complete removal of loops with small constant number of iterations).
4572This option makes code larger, and may or may not make it run faster.
4573
4574@item -funroll-all-loops
4575@opindex funroll-all-loops
4576Unroll all loops, even if their number of iterations is uncertain when
4577the loop is entered.  This usually makes programs run more slowly.
4578@option{-funroll-all-loops} implies the same options as
4579@option{-funroll-loops}.
4580
4581@item -fpeel-loops
4582@opindex fpeel-loops
4583Peels the loops for that there is enough information that they do not
4584roll much (from profile feedback).  It also turns on complete loop peeling
4585(i.e. complete removal of loops with small constant number of iterations).
4586
4587@item -funswitch-loops
4588@opindex funswitch-loops
4589Move branches with loop invariant conditions out of the loop, with duplicates
4590of the loop on both branches (modified according to result of the condition).
4591
4592@item -fold-unroll-loops
4593@opindex fold-unroll-loops
4594Unroll loops whose number of iterations can be determined at compile
4595time or upon entry to the loop, using the old loop unroller whose loop
4596recognition is based on notes from frontend.  @option{-fold-unroll-loops} implies
4597both @option{-fstrength-reduce} and @option{-frerun-cse-after-loop}.  This
4598option makes code larger, and may or may not make it run faster.
4599
4600@item -fold-unroll-all-loops
4601@opindex fold-unroll-all-loops
4602Unroll all loops, even if their number of iterations is uncertain when
4603the loop is entered. This is done using the old loop unroller whose loop
4604recognition is based on notes from frontend.  This usually makes programs run more slowly.
4605@option{-fold-unroll-all-loops} implies the same options as
4606@option{-fold-unroll-loops}.
4607
4608@item -funswitch-loops
4609@opindex funswitch-loops
4610Move branches with loop invariant conditions out of the loop, with duplicates
4611of the loop on both branches (modified according to result of the condition).
4612
4613@item -funswitch-loops
4614@opindex funswitch-loops
4615Move branches with loop invariant conditions out of the loop, with duplicates
4616of the loop on both branches (modified according to result of the condition).
4617
4618@item -fprefetch-loop-arrays
4619@opindex fprefetch-loop-arrays
4620If supported by the target machine, generate instructions to prefetch
4621memory to improve the performance of loops that access large arrays.
4622
4623Disabled at level @option{-Os}.
4624
4625@item -ffunction-sections
4626@itemx -fdata-sections
4627@opindex ffunction-sections
4628@opindex fdata-sections
4629Place each function or data item into its own section in the output
4630file if the target supports arbitrary sections.  The name of the
4631function or the name of the data item determines the section's name
4632in the output file.
4633
4634Use these options on systems where the linker can perform optimizations
4635to improve locality of reference in the instruction space.  Most systems
4636using the ELF object format and SPARC processors running Solaris 2 have
4637linkers with such optimizations.  AIX may have these optimizations in
4638the future.
4639
4640Only use these options when there are significant benefits from doing
4641so.  When you specify these options, the assembler and linker will
4642create larger object and executable files and will also be slower.
4643You will not be able to use @code{gprof} on all systems if you
4644specify this option and you may have problems with debugging if
4645you specify both this option and @option{-g}.
4646
4647@item -fbranch-target-load-optimize
4648@opindex fbranch-target-load-optimize
4649Perform branch target register load optimization before prologue / epilogue
4650threading.
4651The use of target registers can typically be exposed only during reload,
4652thus hoisting loads out of loops and doing inter-block scheduling needs
4653a separate optimization pass.
4654
4655@item -fbranch-target-load-optimize2
4656@opindex fbranch-target-load-optimize2
4657Perform branch target register load optimization after prologue / epilogue
4658threading.
4659
4660@item --param @var{name}=@var{value}
4661@opindex param
4662In some places, GCC uses various constants to control the amount of
4663optimization that is done.  For example, GCC will not inline functions
4664that contain more that a certain number of instructions.  You can
4665control some of these constants on the command-line using the
4666@option{--param} option.
4667
4668The names of specific parameters, and the meaning of the values, are
4669tied to the internals of the compiler, and are subject to change
4670without notice in future releases.
4671
4672In each case, the @var{value} is an integer.  The allowable choices for
4673@var{name} are given in the following table:
4674
4675@table @gcctabopt
4676@item max-crossjump-edges
4677The maximum number of incoming edges to consider for crossjumping.
4678The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
4679the number of edges incoming to each block.  Increasing values mean
4680more aggressive optimization, making the compile time increase with
4681probably small improvement in executable size.
4682
4683@item max-delay-slot-insn-search
4684The maximum number of instructions to consider when looking for an
4685instruction to fill a delay slot.  If more than this arbitrary number of
4686instructions is searched, the time savings from filling the delay slot
4687will be minimal so stop searching.  Increasing values mean more
4688aggressive optimization, making the compile time increase with probably
4689small improvement in executable run time.
4690
4691@item max-delay-slot-live-search
4692When trying to fill delay slots, the maximum number of instructions to
4693consider when searching for a block with valid live register
4694information.  Increasing this arbitrarily chosen value means more
4695aggressive optimization, increasing the compile time.  This parameter
4696should be removed when the delay slot code is rewritten to maintain the
4697control-flow graph.
4698
4699@item max-gcse-memory
4700The approximate maximum amount of memory that will be allocated in
4701order to perform the global common subexpression elimination
4702optimization.  If more memory than specified is required, the
4703optimization will not be done.
4704
4705@item max-gcse-passes
4706The maximum number of passes of GCSE to run.
4707
4708@item max-pending-list-length
4709The maximum number of pending dependencies scheduling will allow
4710before flushing the current state and starting over.  Large functions
4711with few branches or calls can create excessively large lists which
4712needlessly consume memory and resources.
4713
4714@item max-inline-insns-single
4715Several parameters control the tree inliner used in gcc.
4716This number sets the maximum number of instructions (counted in GCC's
4717internal representation) in a single function that the tree inliner
4718will consider for inlining.  This only affects functions declared
4719inline and methods implemented in a class declaration (C++).
4720The default value is 500.
4721
4722@item max-inline-insns-auto
4723When you use @option{-finline-functions} (included in @option{-O3}),
4724a lot of functions that would otherwise not be considered for inlining
4725by the compiler will be investigated.  To those functions, a different
4726(more restrictive) limit compared to functions declared inline can
4727be applied.
4728The default value is 100.
4729
4730@item large-function-insns
4731The limit specifying really large functions.  For functions greater than this
4732limit inlining is constrained by @option{--param large-function-growth}.
4733This parameter is useful primarily to avoid extreme compilation time caused by non-linear
4734algorithms used by the backend.
4735This parameter is ignored when @option{-funit-at-a-time} is not used.
4736The default value is 3000.
4737
4738@item large-function-growth
4739Specifies maximal growth of large function caused by inlining in percents.
4740This parameter is ignored when @option{-funit-at-a-time} is not used.
4741The default value is 200.
4742
4743@item inline-unit-growth
4744Specifies maximal overall growth of the compilation unit caused by inlining.
4745This parameter is ignored when @option{-funit-at-a-time} is not used.
4746The default value is 150.
4747
4748@item max-inline-insns-rtl
4749For languages that use the RTL inliner (this happens at a later stage
4750than tree inlining), you can set the maximum allowable size (counted
4751in RTL instructions) for the RTL inliner with this parameter.
4752The default value is 600.
4753
4754@item max-unrolled-insns
4755The maximum number of instructions that a loop should have if that loop
4756is unrolled, and if the loop is unrolled, it determines how many times
4757the loop code is unrolled.
4758
4759@item max-average-unrolled-insns
4760The maximum number of instructions biased by probabilities of their execution
4761that a loop should have if that loop is unrolled, and if the loop is unrolled,
4762it determines how many times the loop code is unrolled.
4763
4764@item max-unroll-times
4765The maximum number of unrollings of a single loop.
4766
4767@item max-peeled-insns
4768The maximum number of instructions that a loop should have if that loop
4769is peeled, and if the loop is peeled, it determines how many times
4770the loop code is peeled.
4771
4772@item max-peel-times
4773The maximum number of peelings of a single loop.
4774
4775@item max-completely-peeled-insns
4776The maximum number of insns of a completely peeled loop.
4777
4778@item max-completely-peel-times
4779The maximum number of iterations of a loop to be suitable for complete peeling.
4780
4781@item max-unswitch-insns
4782The maximum number of insns of an unswitched loop.
4783
4784@item max-unswitch-level
4785The maximum number of branches unswitched in a single loop.
4786
4787@item hot-bb-count-fraction
4788Select fraction of the maximal count of repetitions of basic block in program
4789given basic block needs to have to be considered hot.
4790
4791@item hot-bb-frequency-fraction
4792Select fraction of the maximal frequency of executions of basic block in
4793function given basic block needs to have to be considered hot
4794
4795@item tracer-dynamic-coverage
4796@itemx tracer-dynamic-coverage-feedback
4797
4798This value is used to limit superblock formation once the given percentage of
4799executed instructions is covered.  This limits unnecessary code size
4800expansion.
4801
4802The @option{tracer-dynamic-coverage-feedback} is used only when profile
4803feedback is available.  The real profiles (as opposed to statically estimated
4804ones) are much less balanced allowing the threshold to be larger value.
4805
4806@item tracer-max-code-growth
4807Stop tail duplication once code growth has reached given percentage.  This is
4808rather hokey argument, as most of the duplicates will be eliminated later in
4809cross jumping, so it may be set to much higher values than is the desired code
4810growth.
4811
4812@item tracer-min-branch-ratio
4813
4814Stop reverse growth when the reverse probability of best edge is less than this
4815threshold (in percent).
4816
4817@item tracer-min-branch-ratio
4818@itemx tracer-min-branch-ratio-feedback
4819
4820Stop forward growth if the best edge do have probability lower than this
4821threshold.
4822
4823Similarly to @option{tracer-dynamic-coverage} two values are present, one for
4824compilation for profile feedback and one for compilation without.  The value
4825for compilation with profile feedback needs to be more conservative (higher) in
4826order to make tracer effective.
4827
4828@item max-cse-path-length
4829
4830Maximum number of basic blocks on path that cse considers.
4831
4832@item ggc-min-expand
4833
4834GCC uses a garbage collector to manage its own memory allocation.  This
4835parameter specifies the minimum percentage by which the garbage
4836collector's heap should be allowed to expand between collections.
4837Tuning this may improve compilation speed; it has no effect on code
4838generation.
4839
4840The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
4841RAM >= 1GB.  If @code{getrlimit} is available, the notion of "RAM" is
4842the smallest of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If
4843GCC is not able to calculate RAM on a particular platform, the lower
4844bound of 30% is used.  Setting this parameter and
4845@option{ggc-min-heapsize} to zero causes a full collection to occur at
4846every opportunity.  This is extremely slow, but can be useful for
4847debugging.
4848
4849@item ggc-min-heapsize
4850
4851Minimum size of the garbage collector's heap before it begins bothering
4852to collect garbage.  The first collection occurs after the heap expands
4853by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
4854tuning this may improve compilation speed, and has no effect on code
4855generation.
4856
4857The default is RAM/8, with a lower bound of 4096 (four megabytes) and an
4858upper bound of 131072 (128 megabytes).  If @code{getrlimit} is
4859available, the notion of "RAM" is the smallest of actual RAM,
4860RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If GCC is not able to calculate
4861RAM on a particular platform, the lower bound is used.  Setting this
4862parameter very large effectively disables garbage collection.  Setting
4863this parameter and @option{ggc-min-expand} to zero causes a full
4864collection to occur at every opportunity.
4865
4866@item max-reload-search-insns
4867The maximum number of instruction reload should look backward for equivalent
4868register.  Increasing values mean more aggressive optimization, making the
4869compile time increase with probably slightly better performance.  The default
4870value is 100.
4871
4872@item max-cselib-memory-location
4873The maximum number of memory locations cselib should take into acount.
4874Increasing values mean more aggressive optimization, making the compile time
4875increase with probably slightly better performance.  The default value is 500.
4876
4877@item reorder-blocks-duplicate
4878@itemx reorder-blocks-duplicate-feedback
4879
4880Used by basic block reordering pass to decide whether to use unconditional
4881branch or duplicate the code on its destination.  Code is duplicated when its
4882estimated size is smaller than this value multiplied by the estimated size of
4883unconditional jump in the hot spots of the program.
4884
4885The @option{reorder-block-duplicate-feedback} is used only when profile
4886feedback is available and may be set to higher values than
4887@option{reorder-block-duplicate} since information about the hot spots is more
4888accurate.
4889@end table
4890@end table
4891
4892@node Preprocessor Options
4893@section Options Controlling the Preprocessor
4894@cindex preprocessor options
4895@cindex options, preprocessor
4896
4897These options control the C preprocessor, which is run on each C source
4898file before actual compilation.
4899
4900If you use the @option{-E} option, nothing is done except preprocessing.
4901Some of these options make sense only together with @option{-E} because
4902they cause the preprocessor output to be unsuitable for actual
4903compilation.
4904
4905@table @gcctabopt
4906@opindex Wp
4907You can use @option{-Wp,@var{option}} to bypass the compiler driver
4908and pass @var{option} directly through to the preprocessor.  If
4909@var{option} contains commas, it is split into multiple options at the
4910commas.  However, many options are modified, translated or interpreted
4911by the compiler driver before being passed to the preprocessor, and
4912@option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
4913interface is undocumented and subject to change, so whenever possible
4914you should avoid using @option{-Wp} and let the driver handle the
4915options instead.
4916
4917@item -Xpreprocessor @var{option}
4918@opindex preprocessor
4919Pass @var{option} as an option to the preprocessor.  You can use this to
4920supply system-specific preprocessor options which GCC does not know how to
4921recognize.
4922
4923If you want to pass an option that takes an argument, you must use
4924@option{-Xpreprocessor} twice, once for the option and once for the argument.
4925@end table
4926
4927@include cppopts.texi
4928
4929@node Assembler Options
4930@section Passing Options to the Assembler
4931
4932@c prevent bad page break with this line
4933You can pass options to the assembler.
4934
4935@table @gcctabopt
4936@item -Wa,@var{option}
4937@opindex Wa
4938Pass @var{option} as an option to the assembler.  If @var{option}
4939contains commas, it is split into multiple options at the commas.
4940
4941@item -Xassembler @var{option}
4942@opindex Xassembler
4943Pass @var{option} as an option to the assembler.  You can use this to
4944supply system-specific assembler options which GCC does not know how to
4945recognize.
4946
4947If you want to pass an option that takes an argument, you must use
4948@option{-Xassembler} twice, once for the option and once for the argument.
4949
4950@end table
4951
4952@node Link Options
4953@section Options for Linking
4954@cindex link options
4955@cindex options, linking
4956
4957These options come into play when the compiler links object files into
4958an executable output file.  They are meaningless if the compiler is
4959not doing a link step.
4960
4961@table @gcctabopt
4962@cindex file names
4963@item @var{object-file-name}
4964A file name that does not end in a special recognized suffix is
4965considered to name an object file or library.  (Object files are
4966distinguished from libraries by the linker according to the file
4967contents.)  If linking is done, these object files are used as input
4968to the linker.
4969
4970@item -c
4971@itemx -S
4972@itemx -E
4973@opindex c
4974@opindex S
4975@opindex E
4976If any of these options is used, then the linker is not run, and
4977object file names should not be used as arguments.  @xref{Overall
4978Options}.
4979
4980@cindex Libraries
4981@item -l@var{library}
4982@itemx -l @var{library}
4983@opindex l
4984Search the library named @var{library} when linking.  (The second
4985alternative with the library as a separate argument is only for
4986POSIX compliance and is not recommended.)
4987
4988It makes a difference where in the command you write this option; the
4989linker searches and processes libraries and object files in the order they
4990are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
4991after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
4992to functions in @samp{z}, those functions may not be loaded.
4993
4994The linker searches a standard list of directories for the library,
4995which is actually a file named @file{lib@var{library}.a}.  The linker
4996then uses this file as if it had been specified precisely by name.
4997
4998The directories searched include several standard system directories
4999plus any that you specify with @option{-L}.
5000
5001Normally the files found this way are library files---archive files
5002whose members are object files.  The linker handles an archive file by
5003scanning through it for members which define symbols that have so far
5004been referenced but not defined.  But if the file that is found is an
5005ordinary object file, it is linked in the usual fashion.  The only
5006difference between using an @option{-l} option and specifying a file name
5007is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
5008and searches several directories.
5009
5010@item -lobjc
5011@opindex lobjc
5012You need this special case of the @option{-l} option in order to
5013link an Objective-C program.
5014
5015@item -nostartfiles
5016@opindex nostartfiles
5017Do not use the standard system startup files when linking.
5018The standard system libraries are used normally, unless @option{-nostdlib}
5019or @option{-nodefaultlibs} is used.
5020
5021@item -nodefaultlibs
5022@opindex nodefaultlibs
5023Do not use the standard system libraries when linking.
5024Only the libraries you specify will be passed to the linker.
5025The standard startup files are used normally, unless @option{-nostartfiles}
5026is used.  The compiler may generate calls to memcmp, memset, and memcpy
5027for System V (and ISO C) environments or to bcopy and bzero for
5028BSD environments.  These entries are usually resolved by entries in
5029libc.  These entry points should be supplied through some other
5030mechanism when this option is specified.
5031
5032@item -nostdlib
5033@opindex nostdlib
5034Do not use the standard system startup files or libraries when linking.
5035No startup files and only the libraries you specify will be passed to
5036the linker.  The compiler may generate calls to memcmp, memset, and memcpy
5037for System V (and ISO C) environments or to bcopy and bzero for
5038BSD environments.  These entries are usually resolved by entries in
5039libc.  These entry points should be supplied through some other
5040mechanism when this option is specified.
5041
5042@cindex @option{-lgcc}, use with @option{-nostdlib}
5043@cindex @option{-nostdlib} and unresolved references
5044@cindex unresolved references and @option{-nostdlib}
5045@cindex @option{-lgcc}, use with @option{-nodefaultlibs}
5046@cindex @option{-nodefaultlibs} and unresolved references
5047@cindex unresolved references and @option{-nodefaultlibs}
5048One of the standard libraries bypassed by @option{-nostdlib} and
5049@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
5050that GCC uses to overcome shortcomings of particular machines, or special
5051needs for some languages.
5052(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
5053Collection (GCC) Internals},
5054for more discussion of @file{libgcc.a}.)
5055In most cases, you need @file{libgcc.a} even when you want to avoid
5056other standard libraries.  In other words, when you specify @option{-nostdlib}
5057or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
5058This ensures that you have no unresolved references to internal GCC
5059library subroutines.  (For example, @samp{__main}, used to ensure C++
5060constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
5061GNU Compiler Collection (GCC) Internals}.)
5062
5063@item -pie
5064@opindex pie
5065Produce a position independent executable on targets which support it.
5066For predictable results, you must also specify the same set of options
5067that were used to generate code (@option{-fpie}, @option{-fPIE},
5068or model suboptions) when you specify this option.
5069
5070@item -s
5071@opindex s
5072Remove all symbol table and relocation information from the executable.
5073
5074@item -static
5075@opindex static
5076On systems that support dynamic linking, this prevents linking with the shared
5077libraries.  On other systems, this option has no effect.
5078
5079@item -shared
5080@opindex shared
5081Produce a shared object which can then be linked with other objects to
5082form an executable.  Not all systems support this option.  For predictable
5083results, you must also specify the same set of options that were used to
5084generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
5085when you specify this option.@footnote{On some systems, @samp{gcc -shared}
5086needs to build supplementary stub code for constructors to work.  On
5087multi-libbed systems, @samp{gcc -shared} must select the correct support
5088libraries to link against.  Failing to supply the correct flags may lead
5089to subtle defects.  Supplying them in cases where they are not necessary
5090is innocuous.}
5091
5092@item -shared-libgcc
5093@itemx -static-libgcc
5094@opindex shared-libgcc
5095@opindex static-libgcc
5096On systems that provide @file{libgcc} as a shared library, these options
5097force the use of either the shared or static version respectively.
5098If no shared version of @file{libgcc} was built when the compiler was
5099configured, these options have no effect.
5100
5101There are several situations in which an application should use the
5102shared @file{libgcc} instead of the static version.  The most common
5103of these is when the application wishes to throw and catch exceptions
5104across different shared libraries.  In that case, each of the libraries
5105as well as the application itself should use the shared @file{libgcc}.
5106
5107Therefore, the G++ and GCJ drivers automatically add
5108@option{-shared-libgcc} whenever you build a shared library or a main
5109executable, because C++ and Java programs typically use exceptions, so
5110this is the right thing to do.
5111
5112If, instead, you use the GCC driver to create shared libraries, you may
5113find that they will not always be linked with the shared @file{libgcc}.
5114If GCC finds, at its configuration time, that you have a non-GNU linker
5115or a GNU linker that does not support option @option{--eh-frame-hdr},
5116it will link the shared version of @file{libgcc} into shared libraries
5117by default.  Otherwise, it will take advantage of the linker and optimize
5118away the linking with the shared version of @file{libgcc}, linking with
5119the static version of libgcc by default.  This allows exceptions to
5120propagate through such shared libraries, without incurring relocation
5121costs at library load time.
5122
5123However, if a library or main executable is supposed to throw or catch
5124exceptions, you must link it using the G++ or GCJ driver, as appropriate
5125for the languages used in the program, or using the option
5126@option{-shared-libgcc}, such that it is linked with the shared
5127@file{libgcc}.
5128
5129@item -symbolic
5130@opindex symbolic
5131Bind references to global symbols when building a shared object.  Warn
5132about any unresolved references (unless overridden by the link editor
5133option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
5134this option.
5135
5136@item -Xlinker @var{option}
5137@opindex Xlinker
5138Pass @var{option} as an option to the linker.  You can use this to
5139supply system-specific linker options which GCC does not know how to
5140recognize.
5141
5142If you want to pass an option that takes an argument, you must use
5143@option{-Xlinker} twice, once for the option and once for the argument.
5144For example, to pass @option{-assert definitions}, you must write
5145@samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
5146@option{-Xlinker "-assert definitions"}, because this passes the entire
5147string as a single argument, which is not what the linker expects.
5148
5149@item -Wl,@var{option}
5150@opindex Wl
5151Pass @var{option} as an option to the linker.  If @var{option} contains
5152commas, it is split into multiple options at the commas.
5153
5154@item -u @var{symbol}
5155@opindex u
5156Pretend the symbol @var{symbol} is undefined, to force linking of
5157library modules to define it.  You can use @option{-u} multiple times with
5158different symbols to force loading of additional library modules.
5159@end table
5160
5161@node Directory Options
5162@section Options for Directory Search
5163@cindex directory options
5164@cindex options, directory search
5165@cindex search path
5166
5167These options specify directories to search for header files, for
5168libraries and for parts of the compiler:
5169
5170@table @gcctabopt
5171@item -I@var{dir}
5172@opindex I
5173Add the directory @var{dir} to the head of the list of directories to be
5174searched for header files.  This can be used to override a system header
5175file, substituting your own version, since these directories are
5176searched before the system header file directories.  However, you should
5177not use this option to add directories that contain vendor-supplied
5178system header files (use @option{-isystem} for that).  If you use more than
5179one @option{-I} option, the directories are scanned in left-to-right
5180order; the standard system directories come after.
5181
5182If a standard system include directory, or a directory specified with
5183@option{-isystem}, is also specified with @option{-I}, the @option{-I}
5184option will be ignored.  The directory will still be searched but as a
5185system directory at its normal position in the system include chain.
5186This is to ensure that GCC's procedure to fix buggy system headers and
5187the ordering for the include_next directive are not inadvertently changed.
5188If you really need to change the search order for system directories,
5189use the @option{-nostdinc} and/or @option{-isystem} options.
5190
5191@item -I-
5192@opindex I-
5193Any directories you specify with @option{-I} options before the @option{-I-}
5194option are searched only for the case of @samp{#include "@var{file}"};
5195they are not searched for @samp{#include <@var{file}>}.
5196
5197If additional directories are specified with @option{-I} options after
5198the @option{-I-}, these directories are searched for all @samp{#include}
5199directives.  (Ordinarily @emph{all} @option{-I} directories are used
5200this way.)
5201
5202In addition, the @option{-I-} option inhibits the use of the current
5203directory (where the current input file came from) as the first search
5204directory for @samp{#include "@var{file}"}.  There is no way to
5205override this effect of @option{-I-}.  With @option{-I.} you can specify
5206searching the directory which was current when the compiler was
5207invoked.  That is not exactly the same as what the preprocessor does
5208by default, but it is often satisfactory.
5209
5210@option{-I-} does not inhibit the use of the standard system directories
5211for header files.  Thus, @option{-I-} and @option{-nostdinc} are
5212independent.
5213
5214@item -L@var{dir}
5215@opindex L
5216Add directory @var{dir} to the list of directories to be searched
5217for @option{-l}.
5218
5219@item -B@var{prefix}
5220@opindex B
5221This option specifies where to find the executables, libraries,
5222include files, and data files of the compiler itself.
5223
5224The compiler driver program runs one or more of the subprograms
5225@file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
5226@var{prefix} as a prefix for each program it tries to run, both with and
5227without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
5228
5229For each subprogram to be run, the compiler driver first tries the
5230@option{-B} prefix, if any.  If that name is not found, or if @option{-B}
5231was not specified, the driver tries two standard prefixes, which are
5232@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
5233those results in a file name that is found, the unmodified program
5234name is searched for using the directories specified in your
5235@env{PATH} environment variable.
5236
5237The compiler will check to see if the path provided by the @option{-B}
5238refers to a directory, and if necessary it will add a directory
5239separator character at the end of the path.
5240
5241@option{-B} prefixes that effectively specify directory names also apply
5242to libraries in the linker, because the compiler translates these
5243options into @option{-L} options for the linker.  They also apply to
5244includes files in the preprocessor, because the compiler translates these
5245options into @option{-isystem} options for the preprocessor.  In this case,
5246the compiler appends @samp{include} to the prefix.
5247
5248The run-time support file @file{libgcc.a} can also be searched for using
5249the @option{-B} prefix, if needed.  If it is not found there, the two
5250standard prefixes above are tried, and that is all.  The file is left
5251out of the link if it is not found by those means.
5252
5253Another way to specify a prefix much like the @option{-B} prefix is to use
5254the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
5255Variables}.
5256
5257As a special kludge, if the path provided by @option{-B} is
5258@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
52599, then it will be replaced by @file{[dir/]include}.  This is to help
5260with boot-strapping the compiler.
5261
5262@item -specs=@var{file}
5263@opindex specs
5264Process @var{file} after the compiler reads in the standard @file{specs}
5265file, in order to override the defaults that the @file{gcc} driver
5266program uses when determining what switches to pass to @file{cc1},
5267@file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
5268@option{-specs=@var{file}} can be specified on the command line, and they
5269are processed in order, from left to right.
5270@end table
5271
5272@c man end
5273
5274@node Spec Files
5275@section Specifying subprocesses and the switches to pass to them
5276@cindex Spec Files
5277
5278@command{gcc} is a driver program.  It performs its job by invoking a
5279sequence of other programs to do the work of compiling, assembling and
5280linking.  GCC interprets its command-line parameters and uses these to
5281deduce which programs it should invoke, and which command-line options
5282it ought to place on their command lines.  This behavior is controlled
5283by @dfn{spec strings}.  In most cases there is one spec string for each
5284program that GCC can invoke, but a few programs have multiple spec
5285strings to control their behavior.  The spec strings built into GCC can
5286be overridden by using the @option{-specs=} command-line switch to specify
5287a spec file.
5288
5289@dfn{Spec files} are plaintext files that are used to construct spec
5290strings.  They consist of a sequence of directives separated by blank
5291lines.  The type of directive is determined by the first non-whitespace
5292character on the line and it can be one of the following:
5293
5294@table @code
5295@item %@var{command}
5296Issues a @var{command} to the spec file processor.  The commands that can
5297appear here are:
5298
5299@table @code
5300@item %include <@var{file}>
5301@cindex %include
5302Search for @var{file} and insert its text at the current point in the
5303specs file.
5304
5305@item %include_noerr <@var{file}>
5306@cindex %include_noerr
5307Just like @samp{%include}, but do not generate an error message if the include
5308file cannot be found.
5309
5310@item %rename @var{old_name} @var{new_name}
5311@cindex %rename
5312Rename the spec string @var{old_name} to @var{new_name}.
5313
5314@end table
5315
5316@item *[@var{spec_name}]:
5317This tells the compiler to create, override or delete the named spec
5318string.  All lines after this directive up to the next directive or
5319blank line are considered to be the text for the spec string.  If this
5320results in an empty string then the spec will be deleted.  (Or, if the
5321spec did not exist, then nothing will happened.)  Otherwise, if the spec
5322does not currently exist a new spec will be created.  If the spec does
5323exist then its contents will be overridden by the text of this
5324directive, unless the first character of that text is the @samp{+}
5325character, in which case the text will be appended to the spec.
5326
5327@item [@var{suffix}]:
5328Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
5329and up to the next directive or blank line are considered to make up the
5330spec string for the indicated suffix.  When the compiler encounters an
5331input file with the named suffix, it will processes the spec string in
5332order to work out how to compile that file.  For example:
5333
5334@smallexample
5335.ZZ:
5336z-compile -input %i
5337@end smallexample
5338
5339This says that any input file whose name ends in @samp{.ZZ} should be
5340passed to the program @samp{z-compile}, which should be invoked with the
5341command-line switch @option{-input} and with the result of performing the
5342@samp{%i} substitution.  (See below.)
5343
5344As an alternative to providing a spec string, the text that follows a
5345suffix directive can be one of the following:
5346
5347@table @code
5348@item @@@var{language}
5349This says that the suffix is an alias for a known @var{language}.  This is
5350similar to using the @option{-x} command-line switch to GCC to specify a
5351language explicitly.  For example:
5352
5353@smallexample
5354.ZZ:
5355@@c++
5356@end smallexample
5357
5358Says that .ZZ files are, in fact, C++ source files.
5359
5360@item #@var{name}
5361This causes an error messages saying:
5362
5363@smallexample
5364@var{name} compiler not installed on this system.
5365@end smallexample
5366@end table
5367
5368GCC already has an extensive list of suffixes built into it.
5369This directive will add an entry to the end of the list of suffixes, but
5370since the list is searched from the end backwards, it is effectively
5371possible to override earlier entries using this technique.
5372
5373@end table
5374
5375GCC has the following spec strings built into it.  Spec files can
5376override these strings or create their own.  Note that individual
5377targets can also add their own spec strings to this list.
5378
5379@smallexample
5380asm          Options to pass to the assembler
5381asm_final    Options to pass to the assembler post-processor
5382cpp          Options to pass to the C preprocessor
5383cc1          Options to pass to the C compiler
5384cc1plus      Options to pass to the C++ compiler
5385endfile      Object files to include at the end of the link
5386link         Options to pass to the linker
5387lib          Libraries to include on the command line to the linker
5388libgcc       Decides which GCC support library to pass to the linker
5389linker       Sets the name of the linker
5390predefines   Defines to be passed to the C preprocessor
5391signed_char  Defines to pass to CPP to say whether @code{char} is signed
5392             by default
5393startfile    Object files to include at the start of the link
5394@end smallexample
5395
5396Here is a small example of a spec file:
5397
5398@smallexample
5399%rename lib                 old_lib
5400
5401*lib:
5402--start-group -lgcc -lc -leval1 --end-group %(old_lib)
5403@end smallexample
5404
5405This example renames the spec called @samp{lib} to @samp{old_lib} and
5406then overrides the previous definition of @samp{lib} with a new one.
5407The new definition adds in some extra command-line options before
5408including the text of the old definition.
5409
5410@dfn{Spec strings} are a list of command-line options to be passed to their
5411corresponding program.  In addition, the spec strings can contain
5412@samp{%}-prefixed sequences to substitute variable text or to
5413conditionally insert text into the command line.  Using these constructs
5414it is possible to generate quite complex command lines.
5415
5416Here is a table of all defined @samp{%}-sequences for spec
5417strings.  Note that spaces are not generated automatically around the
5418results of expanding these sequences.  Therefore you can concatenate them
5419together or combine them with constant text in a single argument.
5420
5421@table @code
5422@item %%
5423Substitute one @samp{%} into the program name or argument.
5424
5425@item %i
5426Substitute the name of the input file being processed.
5427
5428@item %b
5429Substitute the basename of the input file being processed.
5430This is the substring up to (and not including) the last period
5431and not including the directory.
5432
5433@item %B
5434This is the same as @samp{%b}, but include the file suffix (text after
5435the last period).
5436
5437@item %d
5438Marks the argument containing or following the @samp{%d} as a
5439temporary file name, so that that file will be deleted if GCC exits
5440successfully.  Unlike @samp{%g}, this contributes no text to the
5441argument.
5442
5443@item %g@var{suffix}
5444Substitute a file name that has suffix @var{suffix} and is chosen
5445once per compilation, and mark the argument in the same way as
5446@samp{%d}.  To reduce exposure to denial-of-service attacks, the file
5447name is now chosen in a way that is hard to predict even when previously
5448chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
5449might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
5450the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
5451treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
5452was simply substituted with a file name chosen once per compilation,
5453without regard to any appended suffix (which was therefore treated
5454just like ordinary text), making such attacks more likely to succeed.
5455
5456@item %u@var{suffix}
5457Like @samp{%g}, but generates a new temporary file name even if
5458@samp{%u@var{suffix}} was already seen.
5459
5460@item %U@var{suffix}
5461Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
5462new one if there is no such last file name.  In the absence of any
5463@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
5464the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
5465would involve the generation of two distinct file names, one
5466for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
5467simply substituted with a file name chosen for the previous @samp{%u},
5468without regard to any appended suffix.
5469
5470@item %j@var{suffix}
5471Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
5472writable, and if save-temps is off; otherwise, substitute the name
5473of a temporary file, just like @samp{%u}.  This temporary file is not
5474meant for communication between processes, but rather as a junk
5475disposal mechanism.
5476
5477@item %|@var{suffix}
5478@itemx %m@var{suffix}
5479Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
5480@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
5481all.  These are the two most common ways to instruct a program that it
5482should read from standard input or write to standard output.  If you
5483need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
5484construct: see for example @file{f/lang-specs.h}.
5485
5486@item %.@var{SUFFIX}
5487Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
5488when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
5489terminated by the next space or %.
5490
5491@item %w
5492Marks the argument containing or following the @samp{%w} as the
5493designated output file of this compilation.  This puts the argument
5494into the sequence of arguments that @samp{%o} will substitute later.
5495
5496@item %o
5497Substitutes the names of all the output files, with spaces
5498automatically placed around them.  You should write spaces
5499around the @samp{%o} as well or the results are undefined.
5500@samp{%o} is for use in the specs for running the linker.
5501Input files whose names have no recognized suffix are not compiled
5502at all, but they are included among the output files, so they will
5503be linked.
5504
5505@item %O
5506Substitutes the suffix for object files.  Note that this is
5507handled specially when it immediately follows @samp{%g, %u, or %U},
5508because of the need for those to form complete file names.  The
5509handling is such that @samp{%O} is treated exactly as if it had already
5510been substituted, except that @samp{%g, %u, and %U} do not currently
5511support additional @var{suffix} characters following @samp{%O} as they would
5512following, for example, @samp{.o}.
5513
5514@item %p
5515Substitutes the standard macro predefinitions for the
5516current target machine.  Use this when running @code{cpp}.
5517
5518@item %P
5519Like @samp{%p}, but puts @samp{__} before and after the name of each
5520predefined macro, except for macros that start with @samp{__} or with
5521@samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
5522C@.
5523
5524@item %I
5525Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
5526@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}), and
5527@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
5528as necessary.
5529
5530@item %s
5531Current argument is the name of a library or startup file of some sort.
5532Search for that file in a standard list of directories and substitute
5533the full name found.
5534
5535@item %e@var{str}
5536Print @var{str} as an error message.  @var{str} is terminated by a newline.
5537Use this when inconsistent options are detected.
5538
5539@item %(@var{name})
5540Substitute the contents of spec string @var{name} at this point.
5541
5542@item %[@var{name}]
5543Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
5544
5545@item %x@{@var{option}@}
5546Accumulate an option for @samp{%X}.
5547
5548@item %X
5549Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
5550spec string.
5551
5552@item %Y
5553Output the accumulated assembler options specified by @option{-Wa}.
5554
5555@item %Z
5556Output the accumulated preprocessor options specified by @option{-Wp}.
5557
5558@item %a
5559Process the @code{asm} spec.  This is used to compute the
5560switches to be passed to the assembler.
5561
5562@item %A
5563Process the @code{asm_final} spec.  This is a spec string for
5564passing switches to an assembler post-processor, if such a program is
5565needed.
5566
5567@item %l
5568Process the @code{link} spec.  This is the spec for computing the
5569command line passed to the linker.  Typically it will make use of the
5570@samp{%L %G %S %D and %E} sequences.
5571
5572@item %D
5573Dump out a @option{-L} option for each directory that GCC believes might
5574contain startup files.  If the target supports multilibs then the
5575current multilib directory will be prepended to each of these paths.
5576
5577@item %M
5578Output the multilib directory with directory separators replaced with
5579@samp{_}.  If multilib directories are not set, or the multilib directory is
5580@file{.} then this option emits nothing.
5581
5582@item %L
5583Process the @code{lib} spec.  This is a spec string for deciding which
5584libraries should be included on the command line to the linker.
5585
5586@item %G
5587Process the @code{libgcc} spec.  This is a spec string for deciding
5588which GCC support library should be included on the command line to the linker.
5589
5590@item %S
5591Process the @code{startfile} spec.  This is a spec for deciding which
5592object files should be the first ones passed to the linker.  Typically
5593this might be a file named @file{crt0.o}.
5594
5595@item %E
5596Process the @code{endfile} spec.  This is a spec string that specifies
5597the last object files that will be passed to the linker.
5598
5599@item %C
5600Process the @code{cpp} spec.  This is used to construct the arguments
5601to be passed to the C preprocessor.
5602
5603@item %c
5604Process the @code{signed_char} spec.  This is intended to be used
5605to tell cpp whether a char is signed.  It typically has the definition:
5606@smallexample
5607%@{funsigned-char:-D__CHAR_UNSIGNED__@}
5608@end smallexample
5609
5610@item %1
5611Process the @code{cc1} spec.  This is used to construct the options to be
5612passed to the actual C compiler (@samp{cc1}).
5613
5614@item %2
5615Process the @code{cc1plus} spec.  This is used to construct the options to be
5616passed to the actual C++ compiler (@samp{cc1plus}).
5617
5618@item %*
5619Substitute the variable part of a matched option.  See below.
5620Note that each comma in the substituted string is replaced by
5621a single space.
5622
5623@item %<@code{S}
5624Remove all occurrences of @code{-S} from the command line.  Note---this
5625command is position dependent.  @samp{%} commands in the spec string
5626before this one will see @code{-S}, @samp{%} commands in the spec string
5627after this one will not.
5628
5629@item %:@var{function}(@var{args})
5630Call the named function @var{function}, passing it @var{args}.
5631@var{args} is first processed as a nested spec string, then split
5632into an argument vector in the usual fashion.  The function returns
5633a string which is processed as if it had appeared literally as part
5634of the current spec.
5635
5636The following built-in spec functions are provided:
5637
5638@table @code
5639@item @code{if-exists}
5640The @code{if-exists} spec function takes one argument, an absolute
5641pathname to a file.  If the file exists, @code{if-exists} returns the
5642pathname.  Here is a small example of its usage:
5643
5644@smallexample
5645*startfile:
5646crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
5647@end smallexample
5648
5649@item @code{if-exists-else}
5650The @code{if-exists-else} spec function is similar to the @code{if-exists}
5651spec function, except that it takes two arguments.  The first argument is
5652an absolute pathname to a file.  If the file exists, @code{if-exists-else}
5653returns the pathname.  If it does not exist, it returns the second argument.
5654This way, @code{if-exists-else} can be used to select one file or another,
5655based on the existence of the first.  Here is a small example of its usage:
5656
5657@smallexample
5658*startfile:
5659crt0%O%s %:if-exists(crti%O%s) \
5660%:if-exists-else(crtbeginT%O%s crtbegin%O%s)
5661@end smallexample
5662@end table
5663
5664@item %@{@code{S}@}
5665Substitutes the @code{-S} switch, if that switch was given to GCC@.
5666If that switch was not specified, this substitutes nothing.  Note that
5667the leading dash is omitted when specifying this option, and it is
5668automatically inserted if the substitution is performed.  Thus the spec
5669string @samp{%@{foo@}} would match the command-line option @option{-foo}
5670and would output the command line option @option{-foo}.
5671
5672@item %W@{@code{S}@}
5673Like %@{@code{S}@} but mark last argument supplied within as a file to be
5674deleted on failure.
5675
5676@item %@{@code{S}*@}
5677Substitutes all the switches specified to GCC whose names start
5678with @code{-S}, but which also take an argument.  This is used for
5679switches like @option{-o}, @option{-D}, @option{-I}, etc.
5680GCC considers @option{-o foo} as being
5681one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
5682text, including the space.  Thus two arguments would be generated.
5683
5684@item %@{@code{S}*&@code{T}*@}
5685Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
5686(the order of @code{S} and @code{T} in the spec is not significant).
5687There can be any number of ampersand-separated variables; for each the
5688wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
5689
5690@item %@{@code{S}:@code{X}@}
5691Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.
5692
5693@item %@{!@code{S}:@code{X}@}
5694Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.
5695
5696@item %@{@code{S}*:@code{X}@}
5697Substitutes @code{X} if one or more switches whose names start with
5698@code{-S} are specified to GCC@.  Normally @code{X} is substituted only
5699once, no matter how many such switches appeared.  However, if @code{%*}
5700appears somewhere in @code{X}, then @code{X} will be substituted once
5701for each matching switch, with the @code{%*} replaced by the part of
5702that switch that matched the @code{*}.
5703
5704@item %@{.@code{S}:@code{X}@}
5705Substitutes @code{X}, if processing a file with suffix @code{S}.
5706
5707@item %@{!.@code{S}:@code{X}@}
5708Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
5709
5710@item %@{@code{S}|@code{P}:@code{X}@}
5711Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC@.
5712This may be combined with @samp{!}, @samp{.}, and @code{*} sequences as well,
5713although they have a stronger binding than the @samp{|}.  If @code{%*}
5714appears in @code{X}, all of the alternatives must be starred, and only
5715the first matching alternative is substituted.
5716
5717For example, a spec string like this:
5718
5719@smallexample
5720%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
5721@end smallexample
5722
5723will output the following command-line options from the following input
5724command-line options:
5725
5726@smallexample
5727fred.c        -foo -baz
5728jim.d         -bar -boggle
5729-d fred.c     -foo -baz -boggle
5730-d jim.d      -bar -baz -boggle
5731@end smallexample
5732
5733@item %@{S:X; T:Y; :D@}
5734
5735If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
5736given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
5737be as many clauses as you need.  This may be combined with @code{.},
5738@code{!}, @code{|}, and @code{*} as needed.
5739
5740
5741@end table
5742
5743The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
5744construct may contain other nested @samp{%} constructs or spaces, or
5745even newlines.  They are processed as usual, as described above.
5746Trailing white space in @code{X} is ignored.  White space may also
5747appear anywhere on the left side of the colon in these constructs,
5748except between @code{.} or @code{*} and the corresponding word.
5749
5750The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
5751handled specifically in these constructs.  If another value of
5752@option{-O} or the negated form of a @option{-f}, @option{-m}, or
5753@option{-W} switch is found later in the command line, the earlier
5754switch value is ignored, except with @{@code{S}*@} where @code{S} is
5755just one letter, which passes all matching options.
5756
5757The character @samp{|} at the beginning of the predicate text is used to
5758indicate that a command should be piped to the following command, but
5759only if @option{-pipe} is specified.
5760
5761It is built into GCC which switches take arguments and which do not.
5762(You might think it would be useful to generalize this to allow each
5763compiler's spec to say which switches take arguments.  But this cannot
5764be done in a consistent fashion.  GCC cannot even decide which input
5765files have been specified without knowing which switches take arguments,
5766and it must know which input files to compile in order to tell which
5767compilers to run).
5768
5769GCC also knows implicitly that arguments starting in @option{-l} are to be
5770treated as compiler output files, and passed to the linker in their
5771proper position among the other output files.
5772
5773@c man begin OPTIONS
5774
5775@node Target Options
5776@section Specifying Target Machine and Compiler Version
5777@cindex target options
5778@cindex cross compiling
5779@cindex specifying machine version
5780@cindex specifying compiler version and target machine
5781@cindex compiler version, specifying
5782@cindex target machine, specifying
5783
5784The usual way to run GCC is to run the executable called @file{gcc}, or
5785@file{<machine>-gcc} when cross-compiling, or
5786@file{<machine>-gcc-<version>} to run a version other than the one that
5787was installed last.  Sometimes this is inconvenient, so GCC provides
5788options that will switch to another cross-compiler or version.
5789
5790@table @gcctabopt
5791@item -b @var{machine}
5792@opindex b
5793The argument @var{machine} specifies the target machine for compilation.
5794
5795The value to use for @var{machine} is the same as was specified as the
5796machine type when configuring GCC as a cross-compiler.  For
5797example, if a cross-compiler was configured with @samp{configure
5798i386v}, meaning to compile for an 80386 running System V, then you
5799would specify @option{-b i386v} to run that cross compiler.
5800
5801@item -V @var{version}
5802@opindex V
5803The argument @var{version} specifies which version of GCC to run.
5804This is useful when multiple versions are installed.  For example,
5805@var{version} might be @samp{2.0}, meaning to run GCC version 2.0.
5806@end table
5807
5808The @option{-V} and @option{-b} options work by running the
5809@file{<machine>-gcc-<version>} executable, so there's no real reason to
5810use them if you can just run that directly.
5811
5812@node Submodel Options
5813@section Hardware Models and Configurations
5814@cindex submodel options
5815@cindex specifying hardware config
5816@cindex hardware models and configurations, specifying
5817@cindex machine dependent options
5818
5819Earlier we discussed the standard option @option{-b} which chooses among
5820different installed compilers for completely different target
5821machines, such as VAX vs.@: 68000 vs.@: 80386.
5822
5823In addition, each of these target machine types can have its own
5824special options, starting with @samp{-m}, to choose among various
5825hardware models or configurations---for example, 68010 vs 68020,
5826floating coprocessor or none.  A single installed version of the
5827compiler can compile for any model or configuration, according to the
5828options specified.
5829
5830Some configurations of the compiler also support additional special
5831options, usually for compatibility with other compilers on the same
5832platform.
5833
5834These options are defined by the macro @code{TARGET_SWITCHES} in the
5835machine description.  The default for the options is also defined by
5836that macro, which enables you to change the defaults.
5837
5838@menu
5839* M680x0 Options::
5840* M68hc1x Options::
5841* VAX Options::
5842* SPARC Options::
5843* ARM Options::
5844* MN10300 Options::
5845* M32R/D Options::
5846* RS/6000 and PowerPC Options::
5847* Darwin Options::
5848* MIPS Options::
5849* i386 and x86-64 Options::
5850* HPPA Options::
5851* Intel 960 Options::
5852* DEC Alpha Options::
5853* DEC Alpha/VMS Options::
5854* H8/300 Options::
5855* SH Options::
5856* System V Options::
5857* TMS320C3x/C4x Options::
5858* V850 Options::
5859* ARC Options::
5860* NS32K Options::
5861* AVR Options::
5862* MCore Options::
5863* IA-64 Options::
5864* D30V Options::
5865* S/390 and zSeries Options::
5866* CRIS Options::
5867* MMIX Options::
5868* PDP-11 Options::
5869* Xstormy16 Options::
5870* Xtensa Options::
5871* FRV Options::
5872@end menu
5873
5874@node M680x0 Options
5875@subsection M680x0 Options
5876@cindex M680x0 options
5877
5878These are the @samp{-m} options defined for the 68000 series.  The default
5879values for these options depends on which style of 68000 was selected when
5880the compiler was configured; the defaults for the most common choices are
5881given below.
5882
5883@table @gcctabopt
5884@item -m68000
5885@itemx -mc68000
5886@opindex m68000
5887@opindex mc68000
5888Generate output for a 68000.  This is the default
5889when the compiler is configured for 68000-based systems.
5890
5891Use this option for microcontrollers with a 68000 or EC000 core,
5892including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
5893
5894@item -m68020
5895@itemx -mc68020
5896@opindex m68020
5897@opindex mc68020
5898Generate output for a 68020.  This is the default
5899when the compiler is configured for 68020-based systems.
5900
5901@item -m68881
5902@opindex m68881
5903Generate output containing 68881 instructions for floating point.
5904This is the default for most 68020 systems unless @option{--nfp} was
5905specified when the compiler was configured.
5906
5907@item -m68030
5908@opindex m68030
5909Generate output for a 68030.  This is the default when the compiler is
5910configured for 68030-based systems.
5911
5912@item -m68040
5913@opindex m68040
5914Generate output for a 68040.  This is the default when the compiler is
5915configured for 68040-based systems.
5916
5917This option inhibits the use of 68881/68882 instructions that have to be
5918emulated by software on the 68040.  Use this option if your 68040 does not
5919have code to emulate those instructions.
5920
5921@item -m68060
5922@opindex m68060
5923Generate output for a 68060.  This is the default when the compiler is
5924configured for 68060-based systems.
5925
5926This option inhibits the use of 68020 and 68881/68882 instructions that
5927have to be emulated by software on the 68060.  Use this option if your 68060
5928does not have code to emulate those instructions.
5929
5930@item -mcpu32
5931@opindex mcpu32
5932Generate output for a CPU32.  This is the default
5933when the compiler is configured for CPU32-based systems.
5934
5935Use this option for microcontrollers with a
5936CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
593768336, 68340, 68341, 68349 and 68360.
5938
5939@item -m5200
5940@opindex m5200
5941Generate output for a 520X ``coldfire'' family cpu.  This is the default
5942when the compiler is configured for 520X-based systems.
5943
5944Use this option for microcontroller with a 5200 core, including
5945the MCF5202, MCF5203, MCF5204 and MCF5202.
5946
5947
5948@item -m68020-40
5949@opindex m68020-40
5950Generate output for a 68040, without using any of the new instructions.
5951This results in code which can run relatively efficiently on either a
595268020/68881 or a 68030 or a 68040.  The generated code does use the
595368881 instructions that are emulated on the 68040.
5954
5955@item -m68020-60
5956@opindex m68020-60
5957Generate output for a 68060, without using any of the new instructions.
5958This results in code which can run relatively efficiently on either a
595968020/68881 or a 68030 or a 68040.  The generated code does use the
596068881 instructions that are emulated on the 68060.
5961
5962@item -msoft-float
5963@opindex msoft-float
5964Generate output containing library calls for floating point.
5965@strong{Warning:} the requisite libraries are not available for all m68k
5966targets.  Normally the facilities of the machine's usual C compiler are
5967used, but this can't be done directly in cross-compilation.  You must
5968make your own arrangements to provide suitable library functions for
5969cross-compilation.  The embedded targets @samp{m68k-*-aout} and
5970@samp{m68k-*-coff} do provide software floating point support.
5971
5972@item -mshort
5973@opindex mshort
5974Consider type @code{int} to be 16 bits wide, like @code{short int}.
5975
5976@item -mnobitfield
5977@opindex mnobitfield
5978Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
5979and @option{-m5200} options imply @w{@option{-mnobitfield}}.
5980
5981@item -mbitfield
5982@opindex mbitfield
5983Do use the bit-field instructions.  The @option{-m68020} option implies
5984@option{-mbitfield}.  This is the default if you use a configuration
5985designed for a 68020.
5986
5987@item -mrtd
5988@opindex mrtd
5989Use a different function-calling convention, in which functions
5990that take a fixed number of arguments return with the @code{rtd}
5991instruction, which pops their arguments while returning.  This
5992saves one instruction in the caller since there is no need to pop
5993the arguments there.
5994
5995This calling convention is incompatible with the one normally
5996used on Unix, so you cannot use it if you need to call libraries
5997compiled with the Unix compiler.
5998
5999Also, you must provide function prototypes for all functions that
6000take variable numbers of arguments (including @code{printf});
6001otherwise incorrect code will be generated for calls to those
6002functions.
6003
6004In addition, seriously incorrect code will result if you call a
6005function with too many arguments.  (Normally, extra arguments are
6006harmlessly ignored.)
6007
6008The @code{rtd} instruction is supported by the 68010, 68020, 68030,
600968040, 68060 and CPU32 processors, but not by the 68000 or 5200.
6010
6011@item -malign-int
6012@itemx -mno-align-int
6013@opindex malign-int
6014@opindex mno-align-int
6015Control whether GCC aligns @code{int}, @code{long}, @code{long long},
6016@code{float}, @code{double}, and @code{long double} variables on a 32-bit
6017boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
6018Aligning variables on 32-bit boundaries produces code that runs somewhat
6019faster on processors with 32-bit busses at the expense of more memory.
6020
6021@strong{Warning:} if you use the @option{-malign-int} switch, GCC will
6022align structures containing the above types  differently than
6023most published application binary interface specifications for the m68k.
6024
6025@item -mpcrel
6026@opindex mpcrel
6027Use the pc-relative addressing mode of the 68000 directly, instead of
6028using a global offset table.  At present, this option implies @option{-fpic},
6029allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
6030not presently supported with @option{-mpcrel}, though this could be supported for
603168020 and higher processors.
6032
6033@item -mno-strict-align
6034@itemx -mstrict-align
6035@opindex mno-strict-align
6036@opindex mstrict-align
6037Do not (do) assume that unaligned memory references will be handled by
6038the system.
6039
6040@item -msep-data
6041Generate code that allows the data segment to be located in a different
6042area of memory from the text segment.  This allows for execute in place in
6043an environment without virtual memory management.  This option implies -fPIC.
6044
6045@item -mno-sep-data
6046Generate code that assumes that the data segment follows the text segment.
6047This is the default.
6048
6049@item -mid-shared-library
6050Generate code that supports shared libraries via the library ID method.
6051This allows for execute in place and shared libraries in an environment
6052without virtual memory management.  This option implies -fPIC.
6053
6054@item -mno-id-shared-library
6055Generate code that doesn't assume ID based shared libraries are being used.
6056This is the default.
6057
6058@item -mshared-library-id=n
6059Specified the identification number of the ID based shared library being
6060compiled.  Specifying a value of 0 will generate more compact code, specifying
6061other values will force the allocation of that number to the current
6062library but is no more space or time efficient than omitting this option.
6063
6064@end table
6065
6066@node M68hc1x Options
6067@subsection M68hc1x Options
6068@cindex M68hc1x options
6069
6070These are the @samp{-m} options defined for the 68hc11 and 68hc12
6071microcontrollers.  The default values for these options depends on
6072which style of microcontroller was selected when the compiler was configured;
6073the defaults for the most common choices are given below.
6074
6075@table @gcctabopt
6076@item -m6811
6077@itemx -m68hc11
6078@opindex m6811
6079@opindex m68hc11
6080Generate output for a 68HC11.  This is the default
6081when the compiler is configured for 68HC11-based systems.
6082
6083@item -m6812
6084@itemx -m68hc12
6085@opindex m6812
6086@opindex m68hc12
6087Generate output for a 68HC12.  This is the default
6088when the compiler is configured for 68HC12-based systems.
6089
6090@item -m68S12
6091@itemx -m68hcs12
6092@opindex m68S12
6093@opindex m68hcs12
6094Generate output for a 68HCS12.
6095
6096@item -mauto-incdec
6097@opindex mauto-incdec
6098Enable the use of 68HC12 pre and post auto-increment and auto-decrement
6099addressing modes.
6100
6101@item -minmax
6102@itemx -nominmax
6103@opindex minmax
6104@opindex mnominmax
6105Enable the use of 68HC12 min and max instructions.
6106
6107@item -mlong-calls
6108@itemx -mno-long-calls
6109@opindex mlong-calls
6110@opindex mno-long-calls
6111Treat all calls as being far away (near).  If calls are assumed to be
6112far away, the compiler will use the @code{call} instruction to
6113call a function and the @code{rtc} instruction for returning.
6114
6115@item -mshort
6116@opindex mshort
6117Consider type @code{int} to be 16 bits wide, like @code{short int}.
6118
6119@item -msoft-reg-count=@var{count}
6120@opindex msoft-reg-count
6121Specify the number of pseudo-soft registers which are used for the
6122code generation.  The maximum number is 32.  Using more pseudo-soft
6123register may or may not result in better code depending on the program.
6124The default is 4 for 68HC11 and 2 for 68HC12.
6125
6126@end table
6127
6128@node VAX Options
6129@subsection VAX Options
6130@cindex VAX options
6131
6132These @samp{-m} options are defined for the VAX:
6133
6134@table @gcctabopt
6135@item -munix
6136@opindex munix
6137Do not output certain jump instructions (@code{aobleq} and so on)
6138that the Unix assembler for the VAX cannot handle across long
6139ranges.
6140
6141@item -mgnu
6142@opindex mgnu
6143Do output those jump instructions, on the assumption that you
6144will assemble with the GNU assembler.
6145
6146@item -mg
6147@opindex mg
6148Output code for g-format floating point numbers instead of d-format.
6149@end table
6150
6151@node SPARC Options
6152@subsection SPARC Options
6153@cindex SPARC options
6154
6155These @samp{-m} options are supported on the SPARC:
6156
6157@table @gcctabopt
6158@item -mno-app-regs
6159@itemx -mapp-regs
6160@opindex mno-app-regs
6161@opindex mapp-regs
6162Specify @option{-mapp-regs} to generate output using the global registers
61632 through 4, which the SPARC SVR4 ABI reserves for applications.  This
6164is the default.
6165
6166To be fully SVR4 ABI compliant at the cost of some performance loss,
6167specify @option{-mno-app-regs}.  You should compile libraries and system
6168software with this option.
6169
6170@item -mfpu
6171@itemx -mhard-float
6172@opindex mfpu
6173@opindex mhard-float
6174Generate output containing floating point instructions.  This is the
6175default.
6176
6177@item -mno-fpu
6178@itemx -msoft-float
6179@opindex mno-fpu
6180@opindex msoft-float
6181Generate output containing library calls for floating point.
6182@strong{Warning:} the requisite libraries are not available for all SPARC
6183targets.  Normally the facilities of the machine's usual C compiler are
6184used, but this cannot be done directly in cross-compilation.  You must make
6185your own arrangements to provide suitable library functions for
6186cross-compilation.  The embedded targets @samp{sparc-*-aout} and
6187@samp{sparclite-*-*} do provide software floating point support.
6188
6189@option{-msoft-float} changes the calling convention in the output file;
6190therefore, it is only useful if you compile @emph{all} of a program with
6191this option.  In particular, you need to compile @file{libgcc.a}, the
6192library that comes with GCC, with @option{-msoft-float} in order for
6193this to work.
6194
6195@item -mhard-quad-float
6196@opindex mhard-quad-float
6197Generate output containing quad-word (long double) floating point
6198instructions.
6199
6200@item -msoft-quad-float
6201@opindex msoft-quad-float
6202Generate output containing library calls for quad-word (long double)
6203floating point instructions.  The functions called are those specified
6204in the SPARC ABI@.  This is the default.
6205
6206As of this writing, there are no SPARC implementations that have hardware
6207support for the quad-word floating point instructions.  They all invoke
6208a trap handler for one of these instructions, and then the trap handler
6209emulates the effect of the instruction.  Because of the trap handler overhead,
6210this is much slower than calling the ABI library routines.  Thus the
6211@option{-msoft-quad-float} option is the default.
6212
6213@item -mno-flat
6214@itemx -mflat
6215@opindex mno-flat
6216@opindex mflat
6217With @option{-mflat}, the compiler does not generate save/restore instructions
6218and will use a ``flat'' or single register window calling convention.
6219This model uses %i7 as the frame pointer and is compatible with the normal
6220register window model.  Code from either may be intermixed.
6221The local registers and the input registers (0--5) are still treated as
6222``call saved'' registers and will be saved on the stack as necessary.
6223
6224With @option{-mno-flat} (the default), the compiler emits save/restore
6225instructions (except for leaf functions) and is the normal mode of operation.
6226
6227These options are deprecated and will be deleted in a future GCC release.
6228
6229@item -mno-unaligned-doubles
6230@itemx -munaligned-doubles
6231@opindex mno-unaligned-doubles
6232@opindex munaligned-doubles
6233Assume that doubles have 8 byte alignment.  This is the default.
6234
6235With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
6236alignment only if they are contained in another type, or if they have an
6237absolute address.  Otherwise, it assumes they have 4 byte alignment.
6238Specifying this option avoids some rare compatibility problems with code
6239generated by other compilers.  It is not the default because it results
6240in a performance loss, especially for floating point code.
6241
6242@item -mno-faster-structs
6243@itemx -mfaster-structs
6244@opindex mno-faster-structs
6245@opindex mfaster-structs
6246With @option{-mfaster-structs}, the compiler assumes that structures
6247should have 8 byte alignment.  This enables the use of pairs of
6248@code{ldd} and @code{std} instructions for copies in structure
6249assignment, in place of twice as many @code{ld} and @code{st} pairs.
6250However, the use of this changed alignment directly violates the SPARC
6251ABI@.  Thus, it's intended only for use on targets where the developer
6252acknowledges that their resulting code will not be directly in line with
6253the rules of the ABI@.
6254
6255@item -mimpure-text
6256@opindex mimpure-text
6257@option{-mimpure-text}, used in addition to @option{-shared}, tells
6258the compiler to not pass @option{-z text} to the linker when linking a
6259shared object.  Using this option, you can link position-dependent
6260code into a shared object.
6261
6262@option{-mimpure-text} suppresses the ``relocations remain against
6263allocatable but non-writable sections'' linker error message.
6264However, the necessary relocations will trigger copy-on-write, and the
6265shared object is not actually shared across processes.  Instead of
6266using @option{-mimpure-text}, you should compile all source code with
6267@option{-fpic} or @option{-fPIC}.
6268
6269This option is only available on SunOS and Solaris.
6270
6271@item -mv8
6272@itemx -msparclite
6273@opindex mv8
6274@opindex msparclite
6275These two options select variations on the SPARC architecture.
6276These options are deprecated and will be deleted in a future GCC release.
6277They have been replaced with @option{-mcpu=xxx}.
6278
6279@item -mcypress
6280@itemx -msupersparc
6281@itemx -mf930
6282@itemx -mf934
6283@opindex mcypress
6284@opindex msupersparc
6285@opindex -mf930
6286@opindex -mf934
6287These four options select the processor for which the code is optimized.
6288These options are deprecated and will be deleted in a future GCC release.
6289They have been replaced with @option{-mcpu=xxx}.
6290
6291@item -mcpu=@var{cpu_type}
6292@opindex mcpu
6293Set the instruction set, register set, and instruction scheduling parameters
6294for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
6295@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
6296@samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
6297@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, and
6298@samp{ultrasparc3}.
6299
6300Default instruction scheduling parameters are used for values that select
6301an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
6302@samp{sparclite}, @samp{sparclet}, @samp{v9}.
6303
6304Here is a list of each supported architecture and their supported
6305implementations.
6306
6307@smallexample
6308    v7:             cypress
6309    v8:             supersparc, hypersparc
6310    sparclite:      f930, f934, sparclite86x
6311    sparclet:       tsc701
6312    v9:             ultrasparc, ultrasparc3
6313@end smallexample
6314
6315By default (unless configured otherwise), GCC generates code for the V7
6316variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
6317additionally optimizes it for the Cypress CY7C602 chip, as used in the
6318SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
6319SPARCStation 1, 2, IPX etc.
6320
6321With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
6322architecture.  The only difference from V7 code is that the compiler emits
6323the integer multiply and integer divide instructions which exist in SPARC-V8
6324but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
6325optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
63262000 series.
6327
6328With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
6329the SPARC architecture.  This adds the integer multiply, integer divide step
6330and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
6331With @option{-mcpu=f930}, the compiler additionally optimizes it for the
6332Fujitsu MB86930 chip, which is the original SPARClite, with no FPU.  With
6333@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
6334MB86934 chip, which is the more recent SPARClite with FPU.
6335
6336With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
6337the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
6338integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
6339but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
6340optimizes it for the TEMIC SPARClet chip.
6341
6342With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
6343architecture.  This adds 64-bit integer and floating-point move instructions,
63443 additional floating-point condition code registers and conditional move
6345instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
6346optimizes it for the Sun UltraSPARC I/II chips.  With
6347@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
6348Sun UltraSPARC III chip.
6349
6350@item -mtune=@var{cpu_type}
6351@opindex mtune
6352Set the instruction scheduling parameters for machine type
6353@var{cpu_type}, but do not set the instruction set or register set that the
6354option @option{-mcpu=@var{cpu_type}} would.
6355
6356The same values for @option{-mcpu=@var{cpu_type}} can be used for
6357@option{-mtune=@var{cpu_type}}, but the only useful values are those
6358that select a particular cpu implementation.  Those are @samp{cypress},
6359@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
6360@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, and
6361@samp{ultrasparc3}.
6362
6363@item -mv8plus
6364@itemx -mno-v8plus
6365@opindex mv8plus
6366@opindex mno-v8plus
6367With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI.  The
6368difference from the V8 ABI is that the global and out registers are
6369considered 64-bit wide.  This is enabled by default on Solaris in 32-bit
6370mode for all SPARC-V9 processors.
6371
6372@item -mvis
6373@itemx -mno-vis
6374@opindex mvis
6375@opindex mno-vis
6376With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
6377Visual Instruction Set extensions.  The default is @option{-mno-vis}.
6378@end table
6379
6380These @samp{-m} options are supported in addition to the above
6381on SPARC-V9 processors in 64-bit environments:
6382
6383@table @gcctabopt
6384@item -mlittle-endian
6385@opindex mlittle-endian
6386Generate code for a processor running in little-endian mode. It is only
6387available for a few configurations and most notably not on Solaris.
6388
6389@item -m32
6390@itemx -m64
6391@opindex m32
6392@opindex m64
6393Generate code for a 32-bit or 64-bit environment.
6394The 32-bit environment sets int, long and pointer to 32 bits.
6395The 64-bit environment sets int to 32 bits and long and pointer
6396to 64 bits.
6397
6398@item -mcmodel=medlow
6399@opindex mcmodel=medlow
6400Generate code for the Medium/Low code model: 64-bit addresses, programs
6401must be linked in the low 32 bits of memory.  Programs can be statically
6402or dynamically linked.
6403
6404@item -mcmodel=medmid
6405@opindex mcmodel=medmid
6406Generate code for the Medium/Middle code model: 64-bit addresses, programs
6407must be linked in the low 44 bits of memory, the text and data segments must
6408be less than 2GB in size and the data segment must be located within 2GB of
6409the text segment.
6410
6411@item -mcmodel=medany
6412@opindex mcmodel=medany
6413Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
6414may be linked anywhere in memory, the text and data segments must be less
6415than 2GB in size and the data segment must be located within 2GB of the
6416text segment.
6417
6418@item -mcmodel=embmedany
6419@opindex mcmodel=embmedany
6420Generate code for the Medium/Anywhere code model for embedded systems:
642164-bit addresses, the text and data segments must be less than 2GB in
6422size, both starting anywhere in memory (determined at link time).  The
6423global register %g4 points to the base of the data segment.  Programs
6424are statically linked and PIC is not supported.
6425
6426@item -mstack-bias
6427@itemx -mno-stack-bias
6428@opindex mstack-bias
6429@opindex mno-stack-bias
6430With @option{-mstack-bias}, GCC assumes that the stack pointer, and
6431frame pointer if present, are offset by @minus{}2047 which must be added back
6432when making stack frame references.  This is the default in 64-bit mode.
6433Otherwise, assume no such offset is present.
6434@end table
6435
6436These switches are supported in addition to the above on Solaris:
6437
6438@table @gcctabopt
6439@item -threads
6440@opindex threads
6441Add support for multithreading using the Solaris threads library.  This
6442option sets flags for both the preprocessor and linker.  This option does
6443not affect the thread safety of object code produced by the compiler or
6444that of libraries supplied with it.
6445
6446@item -pthreads
6447@opindex pthreads
6448Add support for multithreading using the POSIX threads library.  This
6449option sets flags for both the preprocessor and linker.  This option does
6450not affect the thread safety of object code produced  by the compiler or
6451that of libraries supplied with it.
6452@end table
6453
6454@node ARM Options
6455@subsection ARM Options
6456@cindex ARM options
6457
6458These @samp{-m} options are defined for Advanced RISC Machines (ARM)
6459architectures:
6460
6461@table @gcctabopt
6462@item -mapcs-frame
6463@opindex mapcs-frame
6464Generate a stack frame that is compliant with the ARM Procedure Call
6465Standard for all functions, even if this is not strictly necessary for
6466correct execution of the code.  Specifying @option{-fomit-frame-pointer}
6467with this option will cause the stack frames not to be generated for
6468leaf functions.  The default is @option{-mno-apcs-frame}.
6469
6470@item -mapcs
6471@opindex mapcs
6472This is a synonym for @option{-mapcs-frame}.
6473
6474@item -mapcs-26
6475@opindex mapcs-26
6476Generate code for a processor running with a 26-bit program counter,
6477and conforming to the function calling standards for the APCS 26-bit
6478option.
6479
6480This option is deprecated.  Future releases of the GCC will only support
6481generating code that runs in apcs-32 mode.
6482
6483@item -mapcs-32
6484@opindex mapcs-32
6485Generate code for a processor running with a 32-bit program counter,
6486and conforming to the function calling standards for the APCS 32-bit
6487option.
6488
6489This flag is deprecated.  Future releases of GCC will make this flag
6490unconditional.
6491
6492@ignore
6493@c not currently implemented
6494@item -mapcs-stack-check
6495@opindex mapcs-stack-check
6496Generate code to check the amount of stack space available upon entry to
6497every function (that actually uses some stack space).  If there is
6498insufficient space available then either the function
6499@samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
6500called, depending upon the amount of stack space required.  The run time
6501system is required to provide these functions.  The default is
6502@option{-mno-apcs-stack-check}, since this produces smaller code.
6503
6504@c not currently implemented
6505@item -mapcs-float
6506@opindex mapcs-float
6507Pass floating point arguments using the float point registers.  This is
6508one of the variants of the APCS@.  This option is recommended if the
6509target hardware has a floating point unit or if a lot of floating point
6510arithmetic is going to be performed by the code.  The default is
6511@option{-mno-apcs-float}, since integer only code is slightly increased in
6512size if @option{-mapcs-float} is used.
6513
6514@c not currently implemented
6515@item -mapcs-reentrant
6516@opindex mapcs-reentrant
6517Generate reentrant, position independent code.  The default is
6518@option{-mno-apcs-reentrant}.
6519@end ignore
6520
6521@item -mthumb-interwork
6522@opindex mthumb-interwork
6523Generate code which supports calling between the ARM and Thumb
6524instruction sets.  Without this option the two instruction sets cannot
6525be reliably used inside one program.  The default is
6526@option{-mno-thumb-interwork}, since slightly larger code is generated
6527when @option{-mthumb-interwork} is specified.
6528
6529@item -mno-sched-prolog
6530@opindex mno-sched-prolog
6531Prevent the reordering of instructions in the function prolog, or the
6532merging of those instruction with the instructions in the function's
6533body.  This means that all functions will start with a recognizable set
6534of instructions (or in fact one of a choice from a small set of
6535different function prologues), and this information can be used to
6536locate the start if functions inside an executable piece of code.  The
6537default is @option{-msched-prolog}.
6538
6539@item -mhard-float
6540@opindex mhard-float
6541Generate output containing floating point instructions.  This is the
6542default.
6543
6544@item -msoft-float
6545@opindex msoft-float
6546Generate output containing library calls for floating point.
6547@strong{Warning:} the requisite libraries are not available for all ARM
6548targets.  Normally the facilities of the machine's usual C compiler are
6549used, but this cannot be done directly in cross-compilation.  You must make
6550your own arrangements to provide suitable library functions for
6551cross-compilation.
6552
6553@option{-msoft-float} changes the calling convention in the output file;
6554therefore, it is only useful if you compile @emph{all} of a program with
6555this option.  In particular, you need to compile @file{libgcc.a}, the
6556library that comes with GCC, with @option{-msoft-float} in order for
6557this to work.
6558
6559@item -mlittle-endian
6560@opindex mlittle-endian
6561Generate code for a processor running in little-endian mode.  This is
6562the default for all standard configurations.
6563
6564@item -mbig-endian
6565@opindex mbig-endian
6566Generate code for a processor running in big-endian mode; the default is
6567to compile code for a little-endian processor.
6568
6569@item -mwords-little-endian
6570@opindex mwords-little-endian
6571This option only applies when generating code for big-endian processors.
6572Generate code for a little-endian word order but a big-endian byte
6573order.  That is, a byte order of the form @samp{32107654}.  Note: this
6574option should only be used if you require compatibility with code for
6575big-endian ARM processors generated by versions of the compiler prior to
65762.8.
6577
6578@item -malignment-traps
6579@opindex malignment-traps
6580Generate code that will not trap if the MMU has alignment traps enabled.
6581On ARM architectures prior to ARMv4, there were no instructions to
6582access half-word objects stored in memory.  However, when reading from
6583memory a feature of the ARM architecture allows a word load to be used,
6584even if the address is unaligned, and the processor core will rotate the
6585data as it is being loaded.  This option tells the compiler that such
6586misaligned accesses will cause a MMU trap and that it should instead
6587synthesize the access as a series of byte accesses.  The compiler can
6588still use word accesses to load half-word data if it knows that the
6589address is aligned to a word boundary.
6590
6591This option has no effect when compiling for ARM architecture 4 or later,
6592since these processors have instructions to directly access half-word
6593objects in memory.
6594
6595@item -mno-alignment-traps
6596@opindex mno-alignment-traps
6597Generate code that assumes that the MMU will not trap unaligned
6598accesses.  This produces better code when the target instruction set
6599does not have half-word memory operations (i.e.@: implementations prior to
6600ARMv4).
6601
6602Note that you cannot use this option to access unaligned word objects,
6603since the processor will only fetch one 32-bit aligned object from
6604memory.
6605
6606The default setting is @option{-malignment-traps}, since this produces
6607code that will also run on processors implementing ARM architecture
6608version 6 or later.
6609
6610This option is deprecated and will be removed in the next release of GCC.
6611
6612@item -mcpu=@var{name}
6613@opindex mcpu
6614This specifies the name of the target ARM processor.  GCC uses this name
6615to determine what kind of instructions it can emit when generating
6616assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
6617@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
6618@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
6619@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
6620@samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
6621@samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm8},
6622@samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
6623@samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
6624@samp{arm920t}, @samp{arm926ejs}, @samp{arm940t}, @samp{arm9tdmi},
6625@samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ejs},
6626@samp{arm1136js}, @samp{arm1136jfs} ,@samp{xscale}, @samp{iwmmxt},
6627@samp{ep9312}.
6628
6629@itemx -mtune=@var{name}
6630@opindex mtune
6631This option is very similar to the @option{-mcpu=} option, except that
6632instead of specifying the actual target processor type, and hence
6633restricting which instructions can be used, it specifies that GCC should
6634tune the performance of the code as if the target were of the type
6635specified in this option, but still choosing the instructions that it
6636will generate based on the cpu specified by a @option{-mcpu=} option.
6637For some ARM implementations better performance can be obtained by using
6638this option.
6639
6640@item -march=@var{name}
6641@opindex march
6642This specifies the name of the target ARM architecture.  GCC uses this
6643name to determine what kind of instructions it can emit when generating
6644assembly code.  This option can be used in conjunction with or instead
6645of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
6646@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
6647@samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6j},
6648@samp{iwmmxt}, @samp{ep9312}.
6649
6650@item -mfpe=@var{number}
6651@itemx -mfp=@var{number}
6652@opindex mfpe
6653@opindex mfp
6654This specifies the version of the floating point emulation available on
6655the target.  Permissible values are 2 and 3.  @option{-mfp=} is a synonym
6656for @option{-mfpe=}, for compatibility with older versions of GCC@.
6657
6658@item -mstructure-size-boundary=@var{n}
6659@opindex mstructure-size-boundary
6660The size of all structures and unions will be rounded up to a multiple
6661of the number of bits set by this option.  Permissible values are 8 and
666232.  The default value varies for different toolchains.  For the COFF
6663targeted toolchain the default value is 8.  Specifying the larger number
6664can produce faster, more efficient code, but can also increase the size
6665of the program.  The two values are potentially incompatible.  Code
6666compiled with one value cannot necessarily expect to work with code or
6667libraries compiled with the other value, if they exchange information
6668using structures or unions.
6669
6670@item -mabort-on-noreturn
6671@opindex mabort-on-noreturn
6672Generate a call to the function @code{abort} at the end of a
6673@code{noreturn} function.  It will be executed if the function tries to
6674return.
6675
6676@item -mlong-calls
6677@itemx -mno-long-calls
6678@opindex mlong-calls
6679@opindex mno-long-calls
6680Tells the compiler to perform function calls by first loading the
6681address of the function into a register and then performing a subroutine
6682call on this register.  This switch is needed if the target function
6683will lie outside of the 64 megabyte addressing range of the offset based
6684version of subroutine call instruction.
6685
6686Even if this switch is enabled, not all function calls will be turned
6687into long calls.  The heuristic is that static functions, functions
6688which have the @samp{short-call} attribute, functions that are inside
6689the scope of a @samp{#pragma no_long_calls} directive and functions whose
6690definitions have already been compiled within the current compilation
6691unit, will not be turned into long calls.  The exception to this rule is
6692that weak function definitions, functions with the @samp{long-call}
6693attribute or the @samp{section} attribute, and functions that are within
6694the scope of a @samp{#pragma long_calls} directive, will always be
6695turned into long calls.
6696
6697This feature is not enabled by default.  Specifying
6698@option{-mno-long-calls} will restore the default behavior, as will
6699placing the function calls within the scope of a @samp{#pragma
6700long_calls_off} directive.  Note these switches have no effect on how
6701the compiler generates code to handle function calls via function
6702pointers.
6703
6704@item -mnop-fun-dllimport
6705@opindex mnop-fun-dllimport
6706Disable support for the @code{dllimport} attribute.
6707
6708@item -msingle-pic-base
6709@opindex msingle-pic-base
6710Treat the register used for PIC addressing as read-only, rather than
6711loading it in the prologue for each function.  The run-time system is
6712responsible for initializing this register with an appropriate value
6713before execution begins.
6714
6715@item -mpic-register=@var{reg}
6716@opindex mpic-register
6717Specify the register to be used for PIC addressing.  The default is R10
6718unless stack-checking is enabled, when R9 is used.
6719
6720@item -mcirrus-fix-invalid-insns
6721@opindex mcirrus-fix-invalid-insns
6722@opindex mno-cirrus-fix-invalid-insns
6723Insert NOPs into the instruction stream to in order to work around
6724problems with invalid Maverick instruction combinations.  This option
6725is only valid if the @option{-mcpu=ep9312} option has been used to
6726enable generation of instructions for the Cirrus Maverick floating
6727point co-processor.  This option is not enabled by default, since the
6728problem is only present in older Maverick implementations.  The default
6729can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
6730switch.
6731
6732@item -mpoke-function-name
6733@opindex mpoke-function-name
6734Write the name of each function into the text section, directly
6735preceding the function prologue.  The generated code is similar to this:
6736
6737@smallexample
6738     t0
6739         .ascii "arm_poke_function_name", 0
6740         .align
6741     t1
6742         .word 0xff000000 + (t1 - t0)
6743     arm_poke_function_name
6744         mov     ip, sp
6745         stmfd   sp!, @{fp, ip, lr, pc@}
6746         sub     fp, ip, #4
6747@end smallexample
6748
6749When performing a stack backtrace, code can inspect the value of
6750@code{pc} stored at @code{fp + 0}.  If the trace function then looks at
6751location @code{pc - 12} and the top 8 bits are set, then we know that
6752there is a function name embedded immediately preceding this location
6753and has length @code{((pc[-3]) & 0xff000000)}.
6754
6755@item -mthumb
6756@opindex mthumb
6757Generate code for the 16-bit Thumb instruction set.  The default is to
6758use the 32-bit ARM instruction set.
6759
6760@item -mtpcs-frame
6761@opindex mtpcs-frame
6762Generate a stack frame that is compliant with the Thumb Procedure Call
6763Standard for all non-leaf functions.  (A leaf function is one that does
6764not call any other functions.)  The default is @option{-mno-tpcs-frame}.
6765
6766@item -mtpcs-leaf-frame
6767@opindex mtpcs-leaf-frame
6768Generate a stack frame that is compliant with the Thumb Procedure Call
6769Standard for all leaf functions.  (A leaf function is one that does
6770not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
6771
6772@item -mcallee-super-interworking
6773@opindex mcallee-super-interworking
6774Gives all externally visible functions in the file being compiled an ARM
6775instruction set header which switches to Thumb mode before executing the
6776rest of the function.  This allows these functions to be called from
6777non-interworking code.
6778
6779@item -mcaller-super-interworking
6780@opindex mcaller-super-interworking
6781Allows calls via function pointers (including virtual functions) to
6782execute correctly regardless of whether the target code has been
6783compiled for interworking or not.  There is a small overhead in the cost
6784of executing a function pointer if this option is enabled.
6785
6786@end table
6787
6788@node MN10300 Options
6789@subsection MN10300 Options
6790@cindex MN10300 options
6791
6792These @option{-m} options are defined for Matsushita MN10300 architectures:
6793
6794@table @gcctabopt
6795@item -mmult-bug
6796@opindex mmult-bug
6797Generate code to avoid bugs in the multiply instructions for the MN10300
6798processors.  This is the default.
6799
6800@item -mno-mult-bug
6801@opindex mno-mult-bug
6802Do not generate code to avoid bugs in the multiply instructions for the
6803MN10300 processors.
6804
6805@item -mam33
6806@opindex mam33
6807Generate code which uses features specific to the AM33 processor.
6808
6809@item -mno-am33
6810@opindex mno-am33
6811Do not generate code which uses features specific to the AM33 processor.  This
6812is the default.
6813
6814@item -mno-crt0
6815@opindex mno-crt0
6816Do not link in the C run-time initialization object file.
6817
6818@item -mrelax
6819@opindex mrelax
6820Indicate to the linker that it should perform a relaxation optimization pass
6821to shorten branches, calls and absolute memory addresses.  This option only
6822has an effect when used on the command line for the final link step.
6823
6824This option makes symbolic debugging impossible.
6825@end table
6826
6827
6828@node M32R/D Options
6829@subsection M32R/D Options
6830@cindex M32R/D options
6831
6832These @option{-m} options are defined for Renesas M32R/D architectures:
6833
6834@table @gcctabopt
6835@item -m32r2
6836@opindex m32r2
6837Generate code for the M32R/2@.
6838
6839@item -m32rx
6840@opindex m32rx
6841Generate code for the M32R/X@.
6842
6843@item -m32r
6844@opindex m32r
6845Generate code for the M32R@.  This is the default.
6846
6847@item -mmodel=small
6848@opindex mmodel=small
6849Assume all objects live in the lower 16MB of memory (so that their addresses
6850can be loaded with the @code{ld24} instruction), and assume all subroutines
6851are reachable with the @code{bl} instruction.
6852This is the default.
6853
6854The addressability of a particular object can be set with the
6855@code{model} attribute.
6856
6857@item -mmodel=medium
6858@opindex mmodel=medium
6859Assume objects may be anywhere in the 32-bit address space (the compiler
6860will generate @code{seth/add3} instructions to load their addresses), and
6861assume all subroutines are reachable with the @code{bl} instruction.
6862
6863@item -mmodel=large
6864@opindex mmodel=large
6865Assume objects may be anywhere in the 32-bit address space (the compiler
6866will generate @code{seth/add3} instructions to load their addresses), and
6867assume subroutines may not be reachable with the @code{bl} instruction
6868(the compiler will generate the much slower @code{seth/add3/jl}
6869instruction sequence).
6870
6871@item -msdata=none
6872@opindex msdata=none
6873Disable use of the small data area.  Variables will be put into
6874one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
6875@code{section} attribute has been specified).
6876This is the default.
6877
6878The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
6879Objects may be explicitly put in the small data area with the
6880@code{section} attribute using one of these sections.
6881
6882@item -msdata=sdata
6883@opindex msdata=sdata
6884Put small global and static data in the small data area, but do not
6885generate special code to reference them.
6886
6887@item -msdata=use
6888@opindex msdata=use
6889Put small global and static data in the small data area, and generate
6890special instructions to reference them.
6891
6892@item -G @var{num}
6893@opindex G
6894@cindex smaller data references
6895Put global and static objects less than or equal to @var{num} bytes
6896into the small data or bss sections instead of the normal data or bss
6897sections.  The default value of @var{num} is 8.
6898The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
6899for this option to have any effect.
6900
6901All modules should be compiled with the same @option{-G @var{num}} value.
6902Compiling with different values of @var{num} may or may not work; if it
6903doesn't the linker will give an error message---incorrect code will not be
6904generated.
6905
6906@item -mdebug
6907@opindex mdebug
6908Makes the M32R specific code in the compiler display some statistics
6909that might help in debugging programs.
6910
6911@item -malign-loops
6912@opindex malign-loops
6913Align all loops to a 32-byte boundary.
6914
6915@item -mno-align-loops
6916@opindex mno-align-loops
6917Do not enforce a 32-byte alignment for loops.  This is the default.
6918
6919@item -missue-rate=@var{number}
6920@opindex missue-rate=@var{number}
6921Issue @var{number} instructions per cycle.  @var{number} can only be 1
6922or 2.
6923
6924@item -mbranch-cost=@var{number}
6925@opindex mbranch-cost=@var{number}
6926@var{number} can only be 1 or 2.  If it is 1 then branches will be
6927preferred over conditional code, if it is 2, then the opposite will
6928apply.
6929
6930@item -mflush-trap=@var{number}
6931@opindex mflush-trap=@var{number}
6932Specifies the trap number to use to flush the cache.  The default is
693312.  Valid numbers are between 0 and 15 inclusive.
6934
6935@item -mno-flush-trap
6936@opindex mno-flush-trap
6937Specifies that the cache cannot be flushed by using a trap.
6938
6939@item -mflush-func=@var{name}
6940@opindex mflush-func=@var{name}
6941Specifies the name of the operating system function to call to flush
6942the cache.  The default is @emph{_flush_cache}, but a function call
6943will only be used if a trap is not available.
6944
6945@item -mno-flush-func
6946@opindex mno-flush-func
6947Indicates that there is no OS function for flushing the cache.
6948
6949@end table
6950
6951@node RS/6000 and PowerPC Options
6952@subsection IBM RS/6000 and PowerPC Options
6953@cindex RS/6000 and PowerPC Options
6954@cindex IBM RS/6000 and PowerPC Options
6955
6956These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
6957@table @gcctabopt
6958@item -mpower
6959@itemx -mno-power
6960@itemx -mpower2
6961@itemx -mno-power2
6962@itemx -mpowerpc
6963@itemx -mno-powerpc
6964@itemx -mpowerpc-gpopt
6965@itemx -mno-powerpc-gpopt
6966@itemx -mpowerpc-gfxopt
6967@itemx -mno-powerpc-gfxopt
6968@itemx -mpowerpc64
6969@itemx -mno-powerpc64
6970@opindex mpower
6971@opindex mno-power
6972@opindex mpower2
6973@opindex mno-power2
6974@opindex mpowerpc
6975@opindex mno-powerpc
6976@opindex mpowerpc-gpopt
6977@opindex mno-powerpc-gpopt
6978@opindex mpowerpc-gfxopt
6979@opindex mno-powerpc-gfxopt
6980@opindex mpowerpc64
6981@opindex mno-powerpc64
6982GCC supports two related instruction set architectures for the
6983RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
6984instructions supported by the @samp{rios} chip set used in the original
6985RS/6000 systems and the @dfn{PowerPC} instruction set is the
6986architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
6987the IBM 4xx microprocessors.
6988
6989Neither architecture is a subset of the other.  However there is a
6990large common subset of instructions supported by both.  An MQ
6991register is included in processors supporting the POWER architecture.
6992
6993You use these options to specify which instructions are available on the
6994processor you are using.  The default value of these options is
6995determined when configuring GCC@.  Specifying the
6996@option{-mcpu=@var{cpu_type}} overrides the specification of these
6997options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
6998rather than the options listed above.
6999
7000The @option{-mpower} option allows GCC to generate instructions that
7001are found only in the POWER architecture and to use the MQ register.
7002Specifying @option{-mpower2} implies @option{-power} and also allows GCC
7003to generate instructions that are present in the POWER2 architecture but
7004not the original POWER architecture.
7005
7006The @option{-mpowerpc} option allows GCC to generate instructions that
7007are found only in the 32-bit subset of the PowerPC architecture.
7008Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
7009GCC to use the optional PowerPC architecture instructions in the
7010General Purpose group, including floating-point square root.  Specifying
7011@option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
7012use the optional PowerPC architecture instructions in the Graphics
7013group, including floating-point select.
7014
7015The @option{-mpowerpc64} option allows GCC to generate the additional
701664-bit instructions that are found in the full PowerPC64 architecture
7017and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
7018@option{-mno-powerpc64}.
7019
7020If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
7021will use only the instructions in the common subset of both
7022architectures plus some special AIX common-mode calls, and will not use
7023the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
7024permits GCC to use any instruction from either architecture and to
7025allow use of the MQ register; specify this for the Motorola MPC601.
7026
7027@item -mnew-mnemonics
7028@itemx -mold-mnemonics
7029@opindex mnew-mnemonics
7030@opindex mold-mnemonics
7031Select which mnemonics to use in the generated assembler code.  With
7032@option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
7033the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
7034assembler mnemonics defined for the POWER architecture.  Instructions
7035defined in only one architecture have only one mnemonic; GCC uses that
7036mnemonic irrespective of which of these options is specified.
7037
7038GCC defaults to the mnemonics appropriate for the architecture in
7039use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
7040value of these option.  Unless you are building a cross-compiler, you
7041should normally not specify either @option{-mnew-mnemonics} or
7042@option{-mold-mnemonics}, but should instead accept the default.
7043
7044@item -mcpu=@var{cpu_type}
7045@opindex mcpu
7046Set architecture type, register usage, choice of mnemonics, and
7047instruction scheduling parameters for machine type @var{cpu_type}.
7048Supported values for @var{cpu_type} are @samp{401}, @samp{403},
7049@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505},
7050@samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604},
7051@samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400},
7052@samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
7053@samp{860}, @samp{970}, @samp{common}, @samp{ec603e}, @samp{G3},
7054@samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
7055@samp{power4}, @samp{power5}, @samp{powerpc}, @samp{powerpc64},
7056@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64a}.
7057
7058@option{-mcpu=common} selects a completely generic processor.  Code
7059generated under this option will run on any POWER or PowerPC processor.
7060GCC will use only the instructions in the common subset of both
7061architectures, and will not use the MQ register.  GCC assumes a generic
7062processor model for scheduling purposes.
7063
7064@option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
7065@option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
7066PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
7067types, with an appropriate, generic processor model assumed for
7068scheduling purposes.
7069
7070The other options specify a specific processor.  Code generated under
7071those options will run best on that processor, and may not run at all on
7072others.
7073
7074The @option{-mcpu} options automatically enable or disable the
7075following options: @option{-maltivec}, @option{-mhard-float},
7076@option{-mmfcrf}, @option{-mmultiple}, @option{-mnew-mnemonics},
7077@option{-mpower}, @option{-mpower2}, @option{-mpowerpc64},
7078@option{-mpowerpc-gpopt}, @option{-mpowerpc-gfxopt},
7079@option{-mstring}.  The particular options set for any particular CPU
7080will vary between compiler versions, depending on what setting seems
7081to produce optimal code for that CPU; it doesn't necessarily reflect
7082the actual hardware's capabilities.  If you wish to set an individual
7083option to a particular value, you may specify it after the
7084@option{-mcpu} option, like @samp{-mcpu=970 -mno-altivec}.
7085
7086On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
7087not enabled or disabled by the @option{-mcpu} option at present, since
7088AIX does not have full support for these options.  You may still
7089enable or disable them individually if you're sure it'll work in your
7090environment.
7091
7092@item -mtune=@var{cpu_type}
7093@opindex mtune
7094Set the instruction scheduling parameters for machine type
7095@var{cpu_type}, but do not set the architecture type, register usage, or
7096choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
7097values for @var{cpu_type} are used for @option{-mtune} as for
7098@option{-mcpu}.  If both are specified, the code generated will use the
7099architecture, registers, and mnemonics set by @option{-mcpu}, but the
7100scheduling parameters set by @option{-mtune}.
7101
7102@item -maltivec
7103@itemx -mno-altivec
7104@opindex maltivec
7105@opindex mno-altivec
7106These switches enable or disable the use of built-in functions that
7107allow access to the AltiVec instruction set.  You may also need to set
7108@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
7109enhancements.
7110
7111@item -mabi=spe
7112@opindex mabi=spe
7113Extend the current ABI with SPE ABI extensions.  This does not change
7114the default ABI, instead it adds the SPE ABI extensions to the current
7115ABI@.
7116
7117@item -mabi=no-spe
7118@opindex mabi=no-spe
7119Disable Booke SPE ABI extensions for the current ABI.
7120
7121@item -misel=@var{yes/no}
7122@itemx -misel
7123@opindex misel
7124This switch enables or disables the generation of ISEL instructions.
7125
7126@item -mspe=@var{yes/no}
7127@itemx -mspe
7128@opindex mspe
7129This switch enables or disables the generation of SPE simd
7130instructions.
7131
7132@item -mfloat-gprs=@var{yes/no}
7133@itemx -mfloat-gprs
7134@opindex mfloat-gprs
7135This switch enables or disables the generation of floating point
7136operations on the general purpose registers for architectures that
7137support it.  This option is currently only available on the MPC8540.
7138
7139@item -mfull-toc
7140@itemx -mno-fp-in-toc
7141@itemx -mno-sum-in-toc
7142@itemx -mminimal-toc
7143@opindex mfull-toc
7144@opindex mno-fp-in-toc
7145@opindex mno-sum-in-toc
7146@opindex mminimal-toc
7147Modify generation of the TOC (Table Of Contents), which is created for
7148every executable file.  The @option{-mfull-toc} option is selected by
7149default.  In that case, GCC will allocate at least one TOC entry for
7150each unique non-automatic variable reference in your program.  GCC
7151will also place floating-point constants in the TOC@.  However, only
715216,384 entries are available in the TOC@.
7153
7154If you receive a linker error message that saying you have overflowed
7155the available TOC space, you can reduce the amount of TOC space used
7156with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
7157@option{-mno-fp-in-toc} prevents GCC from putting floating-point
7158constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
7159generate code to calculate the sum of an address and a constant at
7160run-time instead of putting that sum into the TOC@.  You may specify one
7161or both of these options.  Each causes GCC to produce very slightly
7162slower and larger code at the expense of conserving TOC space.
7163
7164If you still run out of space in the TOC even when you specify both of
7165these options, specify @option{-mminimal-toc} instead.  This option causes
7166GCC to make only one TOC entry for every file.  When you specify this
7167option, GCC will produce code that is slower and larger but which
7168uses extremely little TOC space.  You may wish to use this option
7169only on files that contain less frequently executed code.
7170
7171@item -maix64
7172@itemx -maix32
7173@opindex maix64
7174@opindex maix32
7175Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
7176@code{long} type, and the infrastructure needed to support them.
7177Specifying @option{-maix64} implies @option{-mpowerpc64} and
7178@option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
7179implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
7180
7181@item -mxl-call
7182@itemx -mno-xl-call
7183@opindex mxl-call
7184@opindex mno-xl-call
7185On AIX, pass floating-point arguments to prototyped functions beyond the
7186register save area (RSA) on the stack in addition to argument FPRs.  The
7187AIX calling convention was extended but not initially documented to
7188handle an obscure K&R C case of calling a function that takes the
7189address of its arguments with fewer arguments than declared.  AIX XL
7190compilers access floating point arguments which do not fit in the
7191RSA from the stack when a subroutine is compiled without
7192optimization.  Because always storing floating-point arguments on the
7193stack is inefficient and rarely needed, this option is not enabled by
7194default and only is necessary when calling subroutines compiled by AIX
7195XL compilers without optimization.
7196
7197@item -mpe
7198@opindex mpe
7199Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
7200application written to use message passing with special startup code to
7201enable the application to run.  The system must have PE installed in the
7202standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
7203must be overridden with the @option{-specs=} option to specify the
7204appropriate directory location.  The Parallel Environment does not
7205support threads, so the @option{-mpe} option and the @option{-pthread}
7206option are incompatible.
7207
7208@item -malign-natural
7209@itemx -malign-power
7210@opindex malign-natural
7211@opindex malign-power
7212On AIX, Darwin, and 64-bit PowerPC GNU/Linux, the option
7213@option{-malign-natural} overrides the ABI-defined alignment of larger
7214types, such as floating-point doubles, on their natural size-based boundary.
7215The option @option{-malign-power} instructs GCC to follow the ABI-specified
7216alignment rules.  GCC defaults to the standard alignment defined in the ABI.
7217
7218@item -msoft-float
7219@itemx -mhard-float
7220@opindex msoft-float
7221@opindex mhard-float
7222Generate code that does not use (uses) the floating-point register set.
7223Software floating point emulation is provided if you use the
7224@option{-msoft-float} option, and pass the option to GCC when linking.
7225
7226@item -mmultiple
7227@itemx -mno-multiple
7228@opindex mmultiple
7229@opindex mno-multiple
7230Generate code that uses (does not use) the load multiple word
7231instructions and the store multiple word instructions.  These
7232instructions are generated by default on POWER systems, and not
7233generated on PowerPC systems.  Do not use @option{-mmultiple} on little
7234endian PowerPC systems, since those instructions do not work when the
7235processor is in little endian mode.  The exceptions are PPC740 and
7236PPC750 which permit the instructions usage in little endian mode.
7237
7238@item -mstring
7239@itemx -mno-string
7240@opindex mstring
7241@opindex mno-string
7242Generate code that uses (does not use) the load string instructions
7243and the store string word instructions to save multiple registers and
7244do small block moves.  These instructions are generated by default on
7245POWER systems, and not generated on PowerPC systems.  Do not use
7246@option{-mstring} on little endian PowerPC systems, since those
7247instructions do not work when the processor is in little endian mode.
7248The exceptions are PPC740 and PPC750 which permit the instructions
7249usage in little endian mode.
7250
7251@item -mupdate
7252@itemx -mno-update
7253@opindex mupdate
7254@opindex mno-update
7255Generate code that uses (does not use) the load or store instructions
7256that update the base register to the address of the calculated memory
7257location.  These instructions are generated by default.  If you use
7258@option{-mno-update}, there is a small window between the time that the
7259stack pointer is updated and the address of the previous frame is
7260stored, which means code that walks the stack frame across interrupts or
7261signals may get corrupted data.
7262
7263@item -mfused-madd
7264@itemx -mno-fused-madd
7265@opindex mfused-madd
7266@opindex mno-fused-madd
7267Generate code that uses (does not use) the floating point multiply and
7268accumulate instructions.  These instructions are generated by default if
7269hardware floating is used.
7270
7271@item -mno-bit-align
7272@itemx -mbit-align
7273@opindex mno-bit-align
7274@opindex mbit-align
7275On System V.4 and embedded PowerPC systems do not (do) force structures
7276and unions that contain bit-fields to be aligned to the base type of the
7277bit-field.
7278
7279For example, by default a structure containing nothing but 8
7280@code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
7281boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
7282the structure would be aligned to a 1 byte boundary and be one byte in
7283size.
7284
7285@item -mno-strict-align
7286@itemx -mstrict-align
7287@opindex mno-strict-align
7288@opindex mstrict-align
7289On System V.4 and embedded PowerPC systems do not (do) assume that
7290unaligned memory references will be handled by the system.
7291
7292@item -mrelocatable
7293@itemx -mno-relocatable
7294@opindex mrelocatable
7295@opindex mno-relocatable
7296On embedded PowerPC systems generate code that allows (does not allow)
7297the program to be relocated to a different address at runtime.  If you
7298use @option{-mrelocatable} on any module, all objects linked together must
7299be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
7300
7301@item -mrelocatable-lib
7302@itemx -mno-relocatable-lib
7303@opindex mrelocatable-lib
7304@opindex mno-relocatable-lib
7305On embedded PowerPC systems generate code that allows (does not allow)
7306the program to be relocated to a different address at runtime.  Modules
7307compiled with @option{-mrelocatable-lib} can be linked with either modules
7308compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
7309with modules compiled with the @option{-mrelocatable} options.
7310
7311@item -mno-toc
7312@itemx -mtoc
7313@opindex mno-toc
7314@opindex mtoc
7315On System V.4 and embedded PowerPC systems do not (do) assume that
7316register 2 contains a pointer to a global area pointing to the addresses
7317used in the program.
7318
7319@item -mlittle
7320@itemx -mlittle-endian
7321@opindex mlittle
7322@opindex mlittle-endian
7323On System V.4 and embedded PowerPC systems compile code for the
7324processor in little endian mode.  The @option{-mlittle-endian} option is
7325the same as @option{-mlittle}.
7326
7327@item -mbig
7328@itemx -mbig-endian
7329@opindex mbig
7330@opindex mbig-endian
7331On System V.4 and embedded PowerPC systems compile code for the
7332processor in big endian mode.  The @option{-mbig-endian} option is
7333the same as @option{-mbig}.
7334
7335@item -mdynamic-no-pic
7336@opindex mdynamic-no-pic
7337On Darwin and Mac OS X systems, compile code so that it is not
7338relocatable, but that its external references are relocatable.  The
7339resulting code is suitable for applications, but not shared
7340libraries.
7341
7342@item -mprioritize-restricted-insns=@var{priority}
7343@opindex mprioritize-restricted-insns
7344This option controls the priority that is assigned to
7345dispatch-slot restricted instructions during the second scheduling
7346pass.  The argument @var{priority} takes the value @var{0/1/2} to assign
7347@var{no/highest/second-highest} priority to dispatch slot restricted
7348instructions.
7349
7350@item -msched-costly-dep=@var{dependence_type}
7351@opindex msched-costly-dep
7352This option controls which dependences are considered costly
7353by the target during instruction scheduling.  The argument
7354@var{dependence_type} takes one of the following values:
7355@var{no}: no dependence is costly,
7356@var{all}: all dependences are costly,
7357@var{true_store_to_load}: a true dependence from store to load is costly,
7358@var{store_to_load}: any dependence from store to load is costly,
7359@var{number}: any dependence which latency >= @var{number} is costly.
7360
7361@item -minsert-sched-nops=@var{scheme}
7362@opindex minsert-sched-nops
7363This option controls which nop insertion scheme will be used during
7364the second scheduling pass. The argument @var{scheme} takes one of the
7365following values:
7366@var{no}: Don't insert nops.
7367@var{pad}: Pad with nops any dispatch group which has vacant issue slots,
7368according to the scheduler's grouping.
7369@var{regroup_exact}: Insert nops to force costly dependent insns into
7370separate groups.  Insert exactly as many nops as needed to force an insn
7371to a new group, according to the estimated processor grouping.
7372@var{number}: Insert nops to force costly dependent insns into
7373separate groups.  Insert @var{number} nops to force an insn to a new group.
7374
7375@item -mcall-sysv
7376@opindex mcall-sysv
7377On System V.4 and embedded PowerPC systems compile code using calling
7378conventions that adheres to the March 1995 draft of the System V
7379Application Binary Interface, PowerPC processor supplement.  This is the
7380default unless you configured GCC using @samp{powerpc-*-eabiaix}.
7381
7382@item -mcall-sysv-eabi
7383@opindex mcall-sysv-eabi
7384Specify both @option{-mcall-sysv} and @option{-meabi} options.
7385
7386@item -mcall-sysv-noeabi
7387@opindex mcall-sysv-noeabi
7388Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
7389
7390@item -mcall-solaris
7391@opindex mcall-solaris
7392On System V.4 and embedded PowerPC systems compile code for the Solaris
7393operating system.
7394
7395@item -mcall-linux
7396@opindex mcall-linux
7397On System V.4 and embedded PowerPC systems compile code for the
7398Linux-based GNU system.
7399
7400@item -mcall-gnu
7401@opindex mcall-gnu
7402On System V.4 and embedded PowerPC systems compile code for the
7403Hurd-based GNU system.
7404
7405@item -mcall-netbsd
7406@opindex mcall-netbsd
7407On System V.4 and embedded PowerPC systems compile code for the
7408NetBSD operating system.
7409
7410@item -maix-struct-return
7411@opindex maix-struct-return
7412Return all structures in memory (as specified by the AIX ABI)@.
7413
7414@item -msvr4-struct-return
7415@opindex msvr4-struct-return
7416Return structures smaller than 8 bytes in registers (as specified by the
7417SVR4 ABI)@.
7418
7419@item -mabi=altivec
7420@opindex mabi=altivec
7421Extend the current ABI with AltiVec ABI extensions.  This does not
7422change the default ABI, instead it adds the AltiVec ABI extensions to
7423the current ABI@.
7424
7425@item -mabi=no-altivec
7426@opindex mabi=no-altivec
7427Disable AltiVec ABI extensions for the current ABI.
7428
7429@item -mprototype
7430@itemx -mno-prototype
7431@opindex mprototype
7432@opindex mno-prototype
7433On System V.4 and embedded PowerPC systems assume that all calls to
7434variable argument functions are properly prototyped.  Otherwise, the
7435compiler must insert an instruction before every non prototyped call to
7436set or clear bit 6 of the condition code register (@var{CR}) to
7437indicate whether floating point values were passed in the floating point
7438registers in case the function takes a variable arguments.  With
7439@option{-mprototype}, only calls to prototyped variable argument functions
7440will set or clear the bit.
7441
7442@item -msim
7443@opindex msim
7444On embedded PowerPC systems, assume that the startup module is called
7445@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
7446@file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
7447configurations.
7448
7449@item -mmvme
7450@opindex mmvme
7451On embedded PowerPC systems, assume that the startup module is called
7452@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
7453@file{libc.a}.
7454
7455@item -mads
7456@opindex mads
7457On embedded PowerPC systems, assume that the startup module is called
7458@file{crt0.o} and the standard C libraries are @file{libads.a} and
7459@file{libc.a}.
7460
7461@item -myellowknife
7462@opindex myellowknife
7463On embedded PowerPC systems, assume that the startup module is called
7464@file{crt0.o} and the standard C libraries are @file{libyk.a} and
7465@file{libc.a}.
7466
7467@item -mvxworks
7468@opindex mvxworks
7469On System V.4 and embedded PowerPC systems, specify that you are
7470compiling for a VxWorks system.
7471
7472@item -mwindiss
7473@opindex mwindiss
7474Specify that you are compiling for the WindISS simulation environment.
7475
7476@item -memb
7477@opindex memb
7478On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
7479header to indicate that @samp{eabi} extended relocations are used.
7480
7481@item -meabi
7482@itemx -mno-eabi
7483@opindex meabi
7484@opindex mno-eabi
7485On System V.4 and embedded PowerPC systems do (do not) adhere to the
7486Embedded Applications Binary Interface (eabi) which is a set of
7487modifications to the System V.4 specifications.  Selecting @option{-meabi}
7488means that the stack is aligned to an 8 byte boundary, a function
7489@code{__eabi} is called to from @code{main} to set up the eabi
7490environment, and the @option{-msdata} option can use both @code{r2} and
7491@code{r13} to point to two separate small data areas.  Selecting
7492@option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
7493do not call an initialization function from @code{main}, and the
7494@option{-msdata} option will only use @code{r13} to point to a single
7495small data area.  The @option{-meabi} option is on by default if you
7496configured GCC using one of the @samp{powerpc*-*-eabi*} options.
7497
7498@item -msdata=eabi
7499@opindex msdata=eabi
7500On System V.4 and embedded PowerPC systems, put small initialized
7501@code{const} global and static data in the @samp{.sdata2} section, which
7502is pointed to by register @code{r2}.  Put small initialized
7503non-@code{const} global and static data in the @samp{.sdata} section,
7504which is pointed to by register @code{r13}.  Put small uninitialized
7505global and static data in the @samp{.sbss} section, which is adjacent to
7506the @samp{.sdata} section.  The @option{-msdata=eabi} option is
7507incompatible with the @option{-mrelocatable} option.  The
7508@option{-msdata=eabi} option also sets the @option{-memb} option.
7509
7510@item -msdata=sysv
7511@opindex msdata=sysv
7512On System V.4 and embedded PowerPC systems, put small global and static
7513data in the @samp{.sdata} section, which is pointed to by register
7514@code{r13}.  Put small uninitialized global and static data in the
7515@samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
7516The @option{-msdata=sysv} option is incompatible with the
7517@option{-mrelocatable} option.
7518
7519@item -msdata=default
7520@itemx -msdata
7521@opindex msdata=default
7522@opindex msdata
7523On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
7524compile code the same as @option{-msdata=eabi}, otherwise compile code the
7525same as @option{-msdata=sysv}.
7526
7527@item -msdata-data
7528@opindex msdata-data
7529On System V.4 and embedded PowerPC systems, put small global and static
7530data in the @samp{.sdata} section.  Put small uninitialized global and
7531static data in the @samp{.sbss} section.  Do not use register @code{r13}
7532to address small data however.  This is the default behavior unless
7533other @option{-msdata} options are used.
7534
7535@item -msdata=none
7536@itemx -mno-sdata
7537@opindex msdata=none
7538@opindex mno-sdata
7539On embedded PowerPC systems, put all initialized global and static data
7540in the @samp{.data} section, and all uninitialized data in the
7541@samp{.bss} section.
7542
7543@item -G @var{num}
7544@opindex G
7545@cindex smaller data references (PowerPC)
7546@cindex .sdata/.sdata2 references (PowerPC)
7547On embedded PowerPC systems, put global and static items less than or
7548equal to @var{num} bytes into the small data or bss sections instead of
7549the normal data or bss section.  By default, @var{num} is 8.  The
7550@option{-G @var{num}} switch is also passed to the linker.
7551All modules should be compiled with the same @option{-G @var{num}} value.
7552
7553@item -mregnames
7554@itemx -mno-regnames
7555@opindex mregnames
7556@opindex mno-regnames
7557On System V.4 and embedded PowerPC systems do (do not) emit register
7558names in the assembly language output using symbolic forms.
7559
7560@item -mlongcall
7561@itemx -mno-longcall
7562@opindex mlongcall
7563@opindex mno-longcall
7564Default to making all function calls via pointers, so that functions
7565which reside further than 64 megabytes (67,108,864 bytes) from the
7566current location can be called.  This setting can be overridden by the
7567@code{shortcall} function attribute, or by @code{#pragma longcall(0)}.
7568
7569Some linkers are capable of detecting out-of-range calls and generating
7570glue code on the fly.  On these systems, long calls are unnecessary and
7571generate slower code.  As of this writing, the AIX linker can do this,
7572as can the GNU linker for PowerPC/64.  It is planned to add this feature
7573to the GNU linker for 32-bit PowerPC systems as well.
7574
7575On Mach-O (Darwin) systems, this option directs the compiler emit to
7576the glue for every direct call, and the Darwin linker decides whether
7577to use or discard it.
7578
7579In the future, we may cause GCC to ignore all longcall specifications
7580when the linker is known to generate glue.
7581
7582@item -pthread
7583@opindex pthread
7584Adds support for multithreading with the @dfn{pthreads} library.
7585This option sets flags for both the preprocessor and linker.
7586
7587@end table
7588
7589@node Darwin Options
7590@subsection Darwin Options
7591@cindex Darwin options
7592
7593These options are defined for all architectures running the Darwin operating
7594system.  They are useful for compatibility with other Mac OS compilers.
7595
7596@table @gcctabopt
7597@item -all_load
7598@opindex all_load
7599Loads all members of static archive libraries.
7600See man ld(1) for more information.
7601
7602@item -arch_errors_fatal
7603@opindex arch_errors_fatal
7604Cause the errors having to do with files that have the wrong architecture
7605to be fatal.
7606
7607@item -bind_at_load
7608@opindex bind_at_load
7609Causes the output file to be marked such that the dynamic linker will
7610bind all undefined references when the file is loaded or launched.
7611
7612@item -bundle
7613@opindex bundle
7614Produce a Mach-o bundle format file.
7615See man ld(1) for more information.
7616
7617@item -bundle_loader @var{executable}
7618@opindex bundle_loader
7619This specifies the @var{executable} that will be loading the build
7620output file being linked. See man ld(1) for more information.
7621
7622@item -allowable_client  @var{client_name}
7623@itemx -arch_only
7624
7625@itemx -client_name
7626@itemx -compatibility_version
7627@itemx -current_version
7628@itemx -dependency-file
7629@itemx -dylib_file
7630@itemx -dylinker_install_name
7631@itemx -dynamic
7632@itemx -dynamiclib
7633@itemx -exported_symbols_list
7634@itemx -filelist
7635@itemx -flat_namespace
7636@itemx -force_cpusubtype_ALL
7637@itemx -force_flat_namespace
7638@itemx -headerpad_max_install_names
7639@itemx -image_base
7640@itemx -init
7641@itemx -install_name
7642@itemx -keep_private_externs
7643@itemx -multi_module
7644@itemx -multiply_defined
7645@itemx -multiply_defined_unused
7646@itemx -noall_load
7647@itemx -nofixprebinding
7648@itemx -nomultidefs
7649@itemx -noprebind
7650@itemx -noseglinkedit
7651@itemx -pagezero_size
7652@itemx -prebind
7653@itemx -prebind_all_twolevel_modules
7654@itemx -private_bundle
7655@itemx -read_only_relocs
7656@itemx -sectalign
7657@itemx -sectobjectsymbols
7658@itemx -whyload
7659@itemx -seg1addr
7660@itemx -sectcreate
7661@itemx -sectobjectsymbols
7662@itemx -sectorder
7663@itemx -seg_addr_table
7664@itemx -seg_addr_table_filename
7665@itemx -seglinkedit
7666@itemx -segprot
7667@itemx -segs_read_only_addr
7668@itemx -segs_read_write_addr
7669@itemx -single_module
7670@itemx -static
7671@itemx -sub_library
7672@itemx -sub_umbrella
7673@itemx -twolevel_namespace
7674@itemx -umbrella
7675@itemx -undefined
7676@itemx -unexported_symbols_list
7677@itemx -weak_reference_mismatches
7678@itemx -whatsloaded
7679
7680@opindex allowable_client
7681@opindex arch_only
7682@opindex client_name
7683@opindex compatibility_version
7684@opindex current_version
7685@opindex dependency-file
7686@opindex dylib_file
7687@opindex dylinker_install_name
7688@opindex dynamic
7689@opindex dynamiclib
7690@opindex exported_symbols_list
7691@opindex filelist
7692@opindex flat_namespace
7693@opindex force_cpusubtype_ALL
7694@opindex force_flat_namespace
7695@opindex headerpad_max_install_names
7696@opindex image_base
7697@opindex init
7698@opindex install_name
7699@opindex keep_private_externs
7700@opindex multi_module
7701@opindex multiply_defined
7702@opindex multiply_defined_unused
7703@opindex noall_load
7704@opindex nofixprebinding
7705@opindex nomultidefs
7706@opindex noprebind
7707@opindex noseglinkedit
7708@opindex pagezero_size
7709@opindex prebind
7710@opindex prebind_all_twolevel_modules
7711@opindex private_bundle
7712@opindex read_only_relocs
7713@opindex sectalign
7714@opindex sectobjectsymbols
7715@opindex whyload
7716@opindex seg1addr
7717@opindex sectcreate
7718@opindex sectobjectsymbols
7719@opindex sectorder
7720@opindex seg_addr_table
7721@opindex seg_addr_table_filename
7722@opindex seglinkedit
7723@opindex segprot
7724@opindex segs_read_only_addr
7725@opindex segs_read_write_addr
7726@opindex single_module
7727@opindex static
7728@opindex sub_library
7729@opindex sub_umbrella
7730@opindex twolevel_namespace
7731@opindex umbrella
7732@opindex undefined
7733@opindex unexported_symbols_list
7734@opindex weak_reference_mismatches
7735@opindex whatsloaded
7736
7737These options are available for Darwin linker. Darwin linker man page
7738describes them in detail.
7739@end table
7740
7741
7742@node MIPS Options
7743@subsection MIPS Options
7744@cindex MIPS options
7745
7746@table @gcctabopt
7747
7748@item -EB
7749@opindex EB
7750Generate big-endian code.
7751
7752@item -EL
7753@opindex EL
7754Generate little-endian code.  This is the default for @samp{mips*el-*-*}
7755configurations.
7756
7757@item -march=@var{arch}
7758@opindex march
7759Generate code that will run on @var{arch}, which can be the name of a
7760generic MIPS ISA, or the name of a particular processor.
7761The ISA names are:
7762@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
7763@samp{mips32}, @samp{mips32r2}, and @samp{mips64}.
7764The processor names are:
7765@samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc},
7766@samp{m4k},
7767@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
7768@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, @samp{rm7000},
7769@samp{rm9000},
7770@samp{orion},
7771@samp{sb1},
7772@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4300},
7773@samp{vr5000}, @samp{vr5400} and @samp{vr5500}.
7774The special value @samp{from-abi} selects the
7775most compatible architecture for the selected ABI (that is,
7776@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
7777
7778In processor names, a final @samp{000} can be abbreviated as @samp{k}
7779(for example, @samp{-march=r2k}).  Prefixes are optional, and
7780@samp{vr} may be written @samp{r}.
7781
7782GCC defines two macros based on the value of this option.  The first
7783is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
7784a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
7785where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
7786For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
7787to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.
7788
7789Note that the @samp{_MIPS_ARCH} macro uses the processor names given
7790above.  In other words, it will have the full prefix and will not
7791abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
7792the macro names the resolved architecture (either @samp{"mips1"} or
7793@samp{"mips3"}).  It names the default architecture when no
7794@option{-march} option is given.
7795
7796@item -mtune=@var{arch}
7797@opindex mtune
7798Optimize for @var{arch}.  Among other things, this option controls
7799the way instructions are scheduled, and the perceived cost of arithmetic
7800operations.  The list of @var{arch} values is the same as for
7801@option{-march}.
7802
7803When this option is not used, GCC will optimize for the processor
7804specified by @option{-march}.  By using @option{-march} and
7805@option{-mtune} together, it is possible to generate code that will
7806run on a family of processors, but optimize the code for one
7807particular member of that family.
7808
7809@samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
7810@samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
7811@samp{-march} ones described above.
7812
7813@item -mips1
7814@opindex mips1
7815Equivalent to @samp{-march=mips1}.
7816
7817@item -mips2
7818@opindex mips2
7819Equivalent to @samp{-march=mips2}.
7820
7821@item -mips3
7822@opindex mips3
7823Equivalent to @samp{-march=mips3}.
7824
7825@item -mips4
7826@opindex mips4
7827Equivalent to @samp{-march=mips4}.
7828
7829@item -mips32
7830@opindex mips32
7831Equivalent to @samp{-march=mips32}.
7832
7833@item -mips32r2
7834@opindex mips32r2
7835Equivalent to @samp{-march=mips32r2}.
7836
7837@item -mips64
7838@opindex mips64
7839Equivalent to @samp{-march=mips64}.
7840
7841@item -mips16
7842@itemx -mno-mips16
7843@opindex mips16
7844@opindex mno-mips16
7845Use (do not use) the MIPS16 ISA.
7846
7847@item -mabi=32
7848@itemx -mabi=o64
7849@itemx -mabi=n32
7850@itemx -mabi=64
7851@itemx -mabi=eabi
7852@opindex mabi=32
7853@opindex mabi=o64
7854@opindex mabi=n32
7855@opindex mabi=64
7856@opindex mabi=eabi
7857Generate code for the given ABI@.
7858
7859Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
7860generates 64-bit code when you select a 64-bit architecture, but you
7861can use @option{-mgp32} to get 32-bit code instead.
7862
7863@item -mabicalls
7864@itemx -mno-abicalls
7865@opindex mabicalls
7866@opindex mno-abicalls
7867Generate (do not generate) SVR4-style position-independent code.
7868@option{-mabicalls} is the default for SVR4-based systems.
7869
7870@item -mxgot
7871@itemx -mno-xgot
7872@opindex mxgot
7873@opindex mno-xgot
7874Lift (do not lift) the usual restrictions on the size of the global
7875offset table.
7876
7877GCC normally uses a single instruction to load values from the GOT.
7878While this is relatively efficient, it will only work if the GOT
7879is smaller than about 64k.  Anything larger will cause the linker
7880to report an error such as:
7881
7882@cindex relocation truncated to fit (MIPS)
7883@smallexample
7884relocation truncated to fit: R_MIPS_GOT16 foobar
7885@end smallexample
7886
7887If this happens, you should recompile your code with @option{-mxgot}.
7888It should then work with very large GOTs, although it will also be
7889less efficient, since it will take three instructions to fetch the
7890value of a global symbol.
7891
7892Note that some linkers can create multiple GOTs.  If you have such a
7893linker, you should only need to use @option{-mxgot} when a single object
7894file accesses more than 64k's worth of GOT entries.  Very few do.
7895
7896These options have no effect unless GCC is generating position
7897independent code.
7898
7899@item -membedded-pic
7900@itemx -mno-embedded-pic
7901@opindex membedded-pic
7902@opindex mno-embedded-pic
7903Generate (do not generate) position-independent code suitable for some
7904embedded systems.  All calls are made using PC relative addresses, and
7905all data is addressed using the $gp register.  No more than 65536
7906bytes of global data may be used.  This requires GNU as and GNU ld,
7907which do most of the work.
7908
7909@item -mgp32
7910@opindex mgp32
7911Assume that general-purpose registers are 32 bits wide.
7912
7913@item -mgp64
7914@opindex mgp64
7915Assume that general-purpose registers are 64 bits wide.
7916
7917@item -mfp32
7918@opindex mfp32
7919Assume that floating-point registers are 32 bits wide.
7920
7921@item -mfp64
7922@opindex mfp64
7923Assume that floating-point registers are 64 bits wide.
7924
7925@item -mhard-float
7926@opindex mhard-float
7927Use floating-point coprocessor instructions.
7928
7929@item -msoft-float
7930@opindex msoft-float
7931Do not use floating-point coprocessor instructions.  Implement
7932floating-point calculations using library calls instead.
7933
7934@item -msingle-float
7935@opindex msingle-float
7936Assume that the floating-point coprocessor only supports single-precision
7937operations.
7938
7939@itemx -mdouble-float
7940@opindex mdouble-float
7941Assume that the floating-point coprocessor supports double-precision
7942operations.  This is the default.
7943
7944@item -mint64
7945@opindex mint64
7946Force @code{int} and @code{long} types to be 64 bits wide.  See
7947@option{-mlong32} for an explanation of the default and the way
7948that the pointer size is determined.
7949
7950@item -mlong64
7951@opindex mlong64
7952Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
7953an explanation of the default and the way that the pointer size is
7954determined.
7955
7956@item -mlong32
7957@opindex mlong32
7958Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
7959
7960The default size of @code{int}s, @code{long}s and pointers depends on
7961the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
7962uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
796332-bit @code{long}s.  Pointers are the same size as @code{long}s,
7964or the same size as integer registers, whichever is smaller.
7965
7966@item -G @var{num}
7967@opindex G
7968@cindex smaller data references (MIPS)
7969@cindex gp-relative references (MIPS)
7970Put global and static items less than or equal to @var{num} bytes into
7971the small data or bss section instead of the normal data or bss section.
7972This allows the data to be accessed using a single instruction.
7973
7974All modules should be compiled with the same @option{-G @var{num}}
7975value.
7976
7977@item -membedded-data
7978@itemx -mno-embedded-data
7979@opindex membedded-data
7980@opindex mno-embedded-data
7981Allocate variables to the read-only data section first if possible, then
7982next in the small data section if possible, otherwise in data.  This gives
7983slightly slower code than the default, but reduces the amount of RAM required
7984when executing, and thus may be preferred for some embedded systems.
7985
7986@item -muninit-const-in-rodata
7987@itemx -mno-uninit-const-in-rodata
7988@opindex muninit-const-in-rodata
7989@opindex mno-uninit-const-in-rodata
7990Put uninitialized @code{const} variables in the read-only data section.
7991This option is only meaningful in conjunction with @option{-membedded-data}.
7992
7993@item -msplit-addresses
7994@itemx -mno-split-addresses
7995@opindex msplit-addresses
7996@opindex mno-split-addresses
7997Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
7998relocation operators.  This option has been superceded by
7999@option{-mexplicit-relocs} but is retained for backwards compatibility.
8000
8001@item -mexplicit-relocs
8002@itemx -mno-explicit-relocs
8003@opindex mexplicit-relocs
8004@opindex mno-explicit-relocs
8005Use (do not use) assembler relocation operators when dealing with symbolic
8006addresses.  The alternative, selected by @option{-mno-explicit-relocs},
8007is to use assembler macros instead.
8008
8009@option{-mexplicit-relocs} is usually the default if GCC was
8010configured to use an assembler that supports relocation operators.
8011However, there are two exceptions:
8012
8013@itemize @bullet
8014@item
8015GCC is not yet able to generate explicit relocations for the combination
8016of @option{-mabi=64} and @option{-mno-abicalls}.  This will be addressed
8017in a future release.
8018
8019@item
8020The combination of @option{-mabicalls} and @option{-fno-unit-at-a-time}
8021implies @option{-mno-explicit-relocs} unless explicitly overridden.
8022This is because, when generating abicalls, the choice of relocation
8023depends on whether a symbol is local or global.  In some rare cases,
8024GCC will not be able to decide this until the whole compilation unit
8025has been read.
8026@end itemize
8027
8028@item -mrnames
8029@itemx -mno-rnames
8030@opindex mrnames
8031@opindex mno-rnames
8032Generate (do not generate) code that refers to registers using their
8033software names.  The default is @option{-mno-rnames}, which tells GCC
8034to use hardware names like @samp{$4} instead of software names like
8035@samp{a0}.  The only assembler known to support @option{-rnames} is
8036the Algorithmics assembler.
8037
8038@item -mcheck-zero-division
8039@itemx -mno-check-zero-division
8040@opindex mcheck-zero-division
8041@opindex mno-check-zero-division
8042Trap (do not trap) on integer division by zero.  The default is
8043@option{-mcheck-zero-division}.
8044
8045@item -mmemcpy
8046@itemx -mno-memcpy
8047@opindex mmemcpy
8048@opindex mno-memcpy
8049Force (do not force) the use of @code{memcpy()} for non-trivial block
8050moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
8051most constant-sized copies.
8052
8053@item -mlong-calls
8054@itemx -mno-long-calls
8055@opindex mlong-calls
8056@opindex mno-long-calls
8057Disable (do not disable) use of the @code{jal} instruction.  Calling
8058functions using @code{jal} is more efficient but requires the caller
8059and callee to be in the same 256 megabyte segment.
8060
8061This option has no effect on abicalls code.  The default is
8062@option{-mno-long-calls}.
8063
8064@item -mmad
8065@itemx -mno-mad
8066@opindex mmad
8067@opindex mno-mad
8068Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
8069instructions, as provided by the R4650 ISA.
8070
8071@item -mfused-madd
8072@itemx -mno-fused-madd
8073@opindex mfused-madd
8074@opindex mno-fused-madd
8075Enable (disable) use of the floating point multiply-accumulate
8076instructions, when they are available.  The default is
8077@option{-mfused-madd}.
8078
8079When multiply-accumulate instructions are used, the intermediate
8080product is calculated to infinite precision and is not subject to
8081the FCSR Flush to Zero bit.  This may be undesirable in some
8082circumstances.
8083
8084@item -nocpp
8085@opindex nocpp
8086Tell the MIPS assembler to not run its preprocessor over user
8087assembler files (with a @samp{.s} suffix) when assembling them.
8088
8089@item -mfix-sb1
8090@itemx -mno-fix-sb1
8091@opindex mfix-sb1
8092Work around certain SB-1 CPU core errata.
8093(This flag currently works around the SB-1 revision 2
8094``F1'' and ``F2'' floating point errata.)
8095
8096@item -mflush-func=@var{func}
8097@itemx -mno-flush-func
8098@opindex mflush-func
8099Specifies the function to call to flush the I and D caches, or to not
8100call any such function.  If called, the function must take the same
8101arguments as the common @code{_flush_func()}, that is, the address of the
8102memory range for which the cache is being flushed, the size of the
8103memory range, and the number 3 (to flush both caches).  The default
8104depends on the target GCC was configured for, but commonly is either
8105@samp{_flush_func} or @samp{__cpu_flush}.
8106
8107@item -mbranch-likely
8108@itemx -mno-branch-likely
8109@opindex mbranch-likely
8110@opindex mno-branch-likely
8111Enable or disable use of Branch Likely instructions, regardless of the
8112default for the selected architecture.  By default, Branch Likely
8113instructions may be generated if they are supported by the selected
8114architecture.  An exception is for the MIPS32 and MIPS64 architectures
8115and processors which implement those architectures; for those, Branch
8116Likely instructions will not be generated by default because the MIPS32
8117and MIPS64 architectures specifically deprecate their use.
8118@end table
8119
8120@node i386 and x86-64 Options
8121@subsection Intel 386 and AMD x86-64 Options
8122@cindex i386 Options
8123@cindex x86-64 Options
8124@cindex Intel 386 Options
8125@cindex AMD x86-64 Options
8126
8127These @samp{-m} options are defined for the i386 and x86-64 family of
8128computers:
8129
8130@table @gcctabopt
8131@item -mtune=@var{cpu-type}
8132@opindex mtune
8133Tune to @var{cpu-type} everything applicable about the generated code, except
8134for the ABI and the set of available instructions.  The choices for
8135@var{cpu-type} are:
8136@table @emph
8137@item i386
8138Original Intel's i386 CPU.
8139@item i486
8140Intel's i486 CPU.  (No scheduling is implemented for this chip.)
8141@item i586, pentium
8142Intel Pentium CPU with no MMX support.
8143@item pentium-mmx
8144Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
8145@item i686, pentiumpro
8146Intel PentiumPro CPU.
8147@item pentium2
8148Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
8149@item pentium3, pentium3m
8150Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
8151support.
8152@item pentium-m
8153Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
8154support.  Used by Centrino notebooks.
8155@item pentium4, pentium4m
8156Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
8157@item prescott
8158Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
8159set support.
8160@item nocona
8161Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
8162SSE2 and SSE3 instruction set support.
8163@item k6
8164AMD K6 CPU with MMX instruction set support.
8165@item k6-2, k6-3
8166Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support.
8167@item athlon, athlon-tbird
8168AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions
8169support.
8170@item athlon-4, athlon-xp, athlon-mp
8171Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE
8172instruction set support.
8173@item k8, opteron, athlon64, athlon-fx
8174AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets
8175MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
8176@item winchip-c6
8177IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
8178set support.
8179@item winchip2
8180IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!
8181instruction set support.
8182@item c3
8183Via C3 CPU with MMX and 3dNOW!  instruction set support.  (No scheduling is
8184implemented for this chip.)
8185@item c3-2
8186Via C3-2 CPU with MMX and SSE instruction set support.  (No scheduling is
8187implemented for this chip.)
8188@end table
8189
8190While picking a specific @var{cpu-type} will schedule things appropriately
8191for that particular chip, the compiler will not generate any code that
8192does not run on the i386 without the @option{-march=@var{cpu-type}} option
8193being used.
8194
8195@item -march=@var{cpu-type}
8196@opindex march
8197Generate instructions for the machine type @var{cpu-type}.  The choices
8198for @var{cpu-type} are the same as for @option{-mtune}.  Moreover,
8199specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.
8200
8201@item -mcpu=@var{cpu-type}
8202@opindex mcpu
8203A deprecated synonym for @option{-mtune}.
8204
8205@item -m386
8206@itemx -m486
8207@itemx -mpentium
8208@itemx -mpentiumpro
8209@opindex m386
8210@opindex m486
8211@opindex mpentium
8212@opindex mpentiumpro
8213These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486},
8214@option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively.
8215These synonyms are deprecated.
8216
8217@item -mfpmath=@var{unit}
8218@opindex march
8219Generate floating point arithmetics for selected unit @var{unit}.  The choices
8220for @var{unit} are:
8221
8222@table @samp
8223@item 387
8224Use the standard 387 floating point coprocessor present majority of chips and
8225emulated otherwise.  Code compiled with this option will run almost everywhere.
8226The temporary results are computed in 80bit precision instead of precision
8227specified by the type resulting in slightly different results compared to most
8228of other chips. See @option{-ffloat-store} for more detailed description.
8229
8230This is the default choice for i386 compiler.
8231
8232@item sse
8233Use scalar floating point instructions present in the SSE instruction set.
8234This instruction set is supported by Pentium3 and newer chips, in the AMD line
8235by Athlon-4, Athlon-xp and Athlon-mp chips.  The earlier version of SSE
8236instruction set supports only single precision arithmetics, thus the double and
8237extended precision arithmetics is still done using 387.  Later version, present
8238only in Pentium4 and the future AMD x86-64 chips supports double precision
8239arithmetics too.
8240
8241For i387 you need to use @option{-march=@var{cpu-type}}, @option{-msse} or
8242@option{-msse2} switches to enable SSE extensions and make this option
8243effective.  For x86-64 compiler, these extensions are enabled by default.
8244
8245The resulting code should be considerably faster in the majority of cases and avoid
8246the numerical instability problems of 387 code, but may break some existing
8247code that expects temporaries to be 80bit.
8248
8249This is the default choice for the x86-64 compiler.
8250
8251@item sse,387
8252Attempt to utilize both instruction sets at once.  This effectively double the
8253amount of available registers and on chips with separate execution units for
8254387 and SSE the execution resources too.  Use this option with care, as it is
8255still experimental, because the GCC register allocator does not model separate
8256functional units well resulting in instable performance.
8257@end table
8258
8259@item -masm=@var{dialect}
8260@opindex masm=@var{dialect}
8261Output asm instructions using selected @var{dialect}. Supported choices are
8262@samp{intel} or @samp{att} (the default one).
8263
8264@item -mieee-fp
8265@itemx -mno-ieee-fp
8266@opindex mieee-fp
8267@opindex mno-ieee-fp
8268Control whether or not the compiler uses IEEE floating point
8269comparisons.  These handle correctly the case where the result of a
8270comparison is unordered.
8271
8272@item -msoft-float
8273@opindex msoft-float
8274Generate output containing library calls for floating point.
8275@strong{Warning:} the requisite libraries are not part of GCC@.
8276Normally the facilities of the machine's usual C compiler are used, but
8277this can't be done directly in cross-compilation.  You must make your
8278own arrangements to provide suitable library functions for
8279cross-compilation.
8280
8281On machines where a function returns floating point results in the 80387
8282register stack, some floating point opcodes may be emitted even if
8283@option{-msoft-float} is used.
8284
8285@item -mno-fp-ret-in-387
8286@opindex mno-fp-ret-in-387
8287Do not use the FPU registers for return values of functions.
8288
8289The usual calling convention has functions return values of types
8290@code{float} and @code{double} in an FPU register, even if there
8291is no FPU@.  The idea is that the operating system should emulate
8292an FPU@.
8293
8294The option @option{-mno-fp-ret-in-387} causes such values to be returned
8295in ordinary CPU registers instead.
8296
8297@item -mno-fancy-math-387
8298@opindex mno-fancy-math-387
8299Some 387 emulators do not support the @code{sin}, @code{cos} and
8300@code{sqrt} instructions for the 387.  Specify this option to avoid
8301generating those instructions.  This option is the default on FreeBSD,
8302OpenBSD and NetBSD@.  This option is overridden when @option{-march}
8303indicates that the target cpu will always have an FPU and so the
8304instruction will not need emulation.  As of revision 2.6.1, these
8305instructions are not generated unless you also use the
8306@option{-funsafe-math-optimizations} switch.
8307
8308@item -malign-double
8309@itemx -mno-align-double
8310@opindex malign-double
8311@opindex mno-align-double
8312Control whether GCC aligns @code{double}, @code{long double}, and
8313@code{long long} variables on a two word boundary or a one word
8314boundary.  Aligning @code{double} variables on a two word boundary will
8315produce code that runs somewhat faster on a @samp{Pentium} at the
8316expense of more memory.
8317
8318@strong{Warning:} if you use the @option{-malign-double} switch,
8319structures containing the above types will be aligned differently than
8320the published application binary interface specifications for the 386
8321and will not be binary compatible with structures in code compiled
8322without that switch.
8323
8324@item -m96bit-long-double
8325@itemx -m128bit-long-double
8326@opindex m96bit-long-double
8327@opindex m128bit-long-double
8328These switches control the size of @code{long double} type. The i386
8329application binary interface specifies the size to be 96 bits,
8330so @option{-m96bit-long-double} is the default in 32 bit mode.
8331
8332Modern architectures (Pentium and newer) would prefer @code{long double}
8333to be aligned to an 8 or 16 byte boundary.  In arrays or structures
8334conforming to the ABI, this would not be possible.  So specifying a
8335@option{-m128bit-long-double} will align @code{long double}
8336to a 16 byte boundary by padding the @code{long double} with an additional
833732 bit zero.
8338
8339In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
8340its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
8341
8342Notice that neither of these options enable any extra precision over the x87
8343standard of 80 bits for a @code{long double}.
8344
8345@strong{Warning:} if you override the default value for your target ABI, the
8346structures and arrays containing @code{long double} variables will change
8347their size as well as function calling convention for function taking
8348@code{long double} will be modified.  Hence they will not be binary
8349compatible with arrays or structures in code compiled without that switch.
8350
8351
8352@item -msvr3-shlib
8353@itemx -mno-svr3-shlib
8354@opindex msvr3-shlib
8355@opindex mno-svr3-shlib
8356Control whether GCC places uninitialized local variables into the
8357@code{bss} or @code{data} segments.  @option{-msvr3-shlib} places them
8358into @code{bss}.  These options are meaningful only on System V Release 3.
8359
8360@item -mrtd
8361@opindex mrtd
8362Use a different function-calling convention, in which functions that
8363take a fixed number of arguments return with the @code{ret} @var{num}
8364instruction, which pops their arguments while returning.  This saves one
8365instruction in the caller since there is no need to pop the arguments
8366there.
8367
8368You can specify that an individual function is called with this calling
8369sequence with the function attribute @samp{stdcall}.  You can also
8370override the @option{-mrtd} option by using the function attribute
8371@samp{cdecl}.  @xref{Function Attributes}.
8372
8373@strong{Warning:} this calling convention is incompatible with the one
8374normally used on Unix, so you cannot use it if you need to call
8375libraries compiled with the Unix compiler.
8376
8377Also, you must provide function prototypes for all functions that
8378take variable numbers of arguments (including @code{printf});
8379otherwise incorrect code will be generated for calls to those
8380functions.
8381
8382In addition, seriously incorrect code will result if you call a
8383function with too many arguments.  (Normally, extra arguments are
8384harmlessly ignored.)
8385
8386@item -mregparm=@var{num}
8387@opindex mregparm
8388Control how many registers are used to pass integer arguments.  By
8389default, no registers are used to pass arguments, and at most 3
8390registers can be used.  You can control this behavior for a specific
8391function by using the function attribute @samp{regparm}.
8392@xref{Function Attributes}.
8393
8394@strong{Warning:} if you use this switch, and
8395@var{num} is nonzero, then you must build all modules with the same
8396value, including any libraries.  This includes the system libraries and
8397startup modules.
8398
8399@item -mpreferred-stack-boundary=@var{num}
8400@opindex mpreferred-stack-boundary
8401Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
8402byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
8403the default is 4 (16 bytes or 128 bits), except when optimizing for code
8404size (@option{-Os}), in which case the default is the minimum correct
8405alignment (4 bytes for x86, and 8 bytes for x86-64).
8406
8407On Pentium and PentiumPro, @code{double} and @code{long double} values
8408should be aligned to an 8 byte boundary (see @option{-malign-double}) or
8409suffer significant run time performance penalties.  On Pentium III, the
8410Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
8411penalties if it is not 16 byte aligned.
8412
8413To ensure proper alignment of this values on the stack, the stack boundary
8414must be as aligned as that required by any value stored on the stack.
8415Further, every function must be generated such that it keeps the stack
8416aligned.  Thus calling a function compiled with a higher preferred
8417stack boundary from a function compiled with a lower preferred stack
8418boundary will most likely misalign the stack.  It is recommended that
8419libraries that use callbacks always use the default setting.
8420
8421This extra alignment does consume extra stack space, and generally
8422increases code size.  Code that is sensitive to stack space usage, such
8423as embedded systems and operating system kernels, may want to reduce the
8424preferred alignment to @option{-mpreferred-stack-boundary=2}.
8425
8426@item -mmmx
8427@itemx -mno-mmx
8428@item -msse
8429@itemx -mno-sse
8430@item -msse2
8431@itemx -mno-sse2
8432@item -msse3
8433@itemx -mno-sse3
8434@item -m3dnow
8435@itemx -mno-3dnow
8436@opindex mmmx
8437@opindex mno-mmx
8438@opindex msse
8439@opindex mno-sse
8440@opindex m3dnow
8441@opindex mno-3dnow
8442These switches enable or disable the use of built-in functions that allow
8443direct access to the MMX, SSE, SSE2, SSE3 and 3Dnow extensions of the
8444instruction set.
8445
8446@xref{X86 Built-in Functions}, for details of the functions enabled
8447and disabled by these switches.
8448
8449To have SSE/SSE2 instructions generated automatically from floating-point
8450code, see @option{-mfpmath=sse}.
8451
8452@item -mpush-args
8453@itemx -mno-push-args
8454@opindex mpush-args
8455@opindex mno-push-args
8456Use PUSH operations to store outgoing parameters.  This method is shorter
8457and usually equally fast as method using SUB/MOV operations and is enabled
8458by default.  In some cases disabling it may improve performance because of
8459improved scheduling and reduced dependencies.
8460
8461@item -maccumulate-outgoing-args
8462@opindex maccumulate-outgoing-args
8463If enabled, the maximum amount of space required for outgoing arguments will be
8464computed in the function prologue.  This is faster on most modern CPUs
8465because of reduced dependencies, improved scheduling and reduced stack usage
8466when preferred stack boundary is not equal to 2.  The drawback is a notable
8467increase in code size.  This switch implies @option{-mno-push-args}.
8468
8469@item -mthreads
8470@opindex mthreads
8471Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
8472on thread-safe exception handling must compile and link all code with the
8473@option{-mthreads} option.  When compiling, @option{-mthreads} defines
8474@option{-D_MT}; when linking, it links in a special thread helper library
8475@option{-lmingwthrd} which cleans up per thread exception handling data.
8476
8477@item -mno-align-stringops
8478@opindex mno-align-stringops
8479Do not align destination of inlined string operations.  This switch reduces
8480code size and improves performance in case the destination is already aligned,
8481but GCC doesn't know about it.
8482
8483@item -minline-all-stringops
8484@opindex minline-all-stringops
8485By default GCC inlines string operations only when destination is known to be
8486aligned at least to 4 byte boundary.  This enables more inlining, increase code
8487size, but may improve performance of code that depends on fast memcpy, strlen
8488and memset for short lengths.
8489
8490@item -momit-leaf-frame-pointer
8491@opindex momit-leaf-frame-pointer
8492Don't keep the frame pointer in a register for leaf functions.  This
8493avoids the instructions to save, set up and restore frame pointers and
8494makes an extra register available in leaf functions.  The option
8495@option{-fomit-frame-pointer} removes the frame pointer for all functions
8496which might make debugging harder.
8497
8498@item -mtls-direct-seg-refs
8499@itemx -mno-tls-direct-seg-refs
8500@opindex mtls-direct-seg-refs
8501Controls whether TLS variables may be accessed with offsets from the
8502TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
8503or whether the thread base pointer must be added.  Whether or not this
8504is legal depends on the operating system, and whether it maps the
8505segment to cover the entire TLS area.
8506
8507For systems that use GNU libc, the default is on.
8508@end table
8509
8510These @samp{-m} switches are supported in addition to the above
8511on AMD x86-64 processors in 64-bit environments.
8512
8513@table @gcctabopt
8514@item -m32
8515@itemx -m64
8516@opindex m32
8517@opindex m64
8518Generate code for a 32-bit or 64-bit environment.
8519The 32-bit environment sets int, long and pointer to 32 bits and
8520generates code that runs on any i386 system.
8521The 64-bit environment sets int to 32 bits and long and pointer
8522to 64 bits and generates code for AMD's x86-64 architecture.
8523
8524@item -mno-red-zone
8525@opindex no-red-zone
8526Do not use a so called red zone for x86-64 code.  The red zone is mandated
8527by the x86-64 ABI, it is a 128-byte area beyond the location of the
8528stack pointer that will not be modified by signal or interrupt handlers
8529and therefore can be used for temporary data without adjusting the stack
8530pointer.  The flag @option{-mno-red-zone} disables this red zone.
8531
8532@item -mcmodel=small
8533@opindex mcmodel=small
8534Generate code for the small code model: the program and its symbols must
8535be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
8536Programs can be statically or dynamically linked.  This is the default
8537code model.
8538
8539@item -mcmodel=kernel
8540@opindex mcmodel=kernel
8541Generate code for the kernel code model.  The kernel runs in the
8542negative 2 GB of the address space.
8543This model has to be used for Linux kernel code.
8544
8545@item -mcmodel=medium
8546@opindex mcmodel=medium
8547Generate code for the medium model: The program is linked in the lower 2
8548GB of the address space but symbols can be located anywhere in the
8549address space.  Programs can be statically or dynamically linked, but
8550building of shared libraries are not supported with the medium model.
8551
8552@item -mcmodel=large
8553@opindex mcmodel=large
8554Generate code for the large model: This model makes no assumptions
8555about addresses and sizes of sections.  Currently GCC does not implement
8556this model.
8557@end table
8558
8559@node HPPA Options
8560@subsection HPPA Options
8561@cindex HPPA Options
8562
8563These @samp{-m} options are defined for the HPPA family of computers:
8564
8565@table @gcctabopt
8566@item -march=@var{architecture-type}
8567@opindex march
8568Generate code for the specified architecture.  The choices for
8569@var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
85701.1, and @samp{2.0} for PA 2.0 processors.  Refer to
8571@file{/usr/lib/sched.models} on an HP-UX system to determine the proper
8572architecture option for your machine.  Code compiled for lower numbered
8573architectures will run on higher numbered architectures, but not the
8574other way around.
8575
8576PA 2.0 support currently requires gas snapshot 19990413 or later.  The
8577next release of binutils (current is 2.9.1) will probably contain PA 2.0
8578support.
8579
8580@item -mpa-risc-1-0
8581@itemx -mpa-risc-1-1
8582@itemx -mpa-risc-2-0
8583@opindex mpa-risc-1-0
8584@opindex mpa-risc-1-1
8585@opindex mpa-risc-2-0
8586Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
8587
8588@item -mbig-switch
8589@opindex mbig-switch
8590Generate code suitable for big switch tables.  Use this option only if
8591the assembler/linker complain about out of range branches within a switch
8592table.
8593
8594@item -mjump-in-delay
8595@opindex mjump-in-delay
8596Fill delay slots of function calls with unconditional jump instructions
8597by modifying the return pointer for the function call to be the target
8598of the conditional jump.
8599
8600@item -mdisable-fpregs
8601@opindex mdisable-fpregs
8602Prevent floating point registers from being used in any manner.  This is
8603necessary for compiling kernels which perform lazy context switching of
8604floating point registers.  If you use this option and attempt to perform
8605floating point operations, the compiler will abort.
8606
8607@item -mdisable-indexing
8608@opindex mdisable-indexing
8609Prevent the compiler from using indexing address modes.  This avoids some
8610rather obscure problems when compiling MIG generated code under MACH@.
8611
8612@item -mno-space-regs
8613@opindex mno-space-regs
8614Generate code that assumes the target has no space registers.  This allows
8615GCC to generate faster indirect calls and use unscaled index address modes.
8616
8617Such code is suitable for level 0 PA systems and kernels.
8618
8619@item -mfast-indirect-calls
8620@opindex mfast-indirect-calls
8621Generate code that assumes calls never cross space boundaries.  This
8622allows GCC to emit code which performs faster indirect calls.
8623
8624This option will not work in the presence of shared libraries or nested
8625functions.
8626
8627@item -mlong-load-store
8628@opindex mlong-load-store
8629Generate 3-instruction load and store sequences as sometimes required by
8630the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
8631the HP compilers.
8632
8633@item -mportable-runtime
8634@opindex mportable-runtime
8635Use the portable calling conventions proposed by HP for ELF systems.
8636
8637@item -mgas
8638@opindex mgas
8639Enable the use of assembler directives only GAS understands.
8640
8641@item -mschedule=@var{cpu-type}
8642@opindex mschedule
8643Schedule code according to the constraints for the machine type
8644@var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
8645@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
8646to @file{/usr/lib/sched.models} on an HP-UX system to determine the
8647proper scheduling option for your machine.  The default scheduling is
8648@samp{8000}.
8649
8650@item -mlinker-opt
8651@opindex mlinker-opt
8652Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
8653debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
8654linkers in which they give bogus error messages when linking some programs.
8655
8656@item -msoft-float
8657@opindex msoft-float
8658Generate output containing library calls for floating point.
8659@strong{Warning:} the requisite libraries are not available for all HPPA
8660targets.  Normally the facilities of the machine's usual C compiler are
8661used, but this cannot be done directly in cross-compilation.  You must make
8662your own arrangements to provide suitable library functions for
8663cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
8664does provide software floating point support.
8665
8666@option{-msoft-float} changes the calling convention in the output file;
8667therefore, it is only useful if you compile @emph{all} of a program with
8668this option.  In particular, you need to compile @file{libgcc.a}, the
8669library that comes with GCC, with @option{-msoft-float} in order for
8670this to work.
8671
8672@item -msio
8673@opindex msio
8674Generate the predefine, @code{_SIO}, for server IO.  The default is
8675@option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
8676@code{__hp9000s700__} and @code{_WSIO}, for workstation IO.  These
8677options are available under HP-UX and HI-UX.
8678
8679@item -mgnu-ld
8680@opindex gnu-ld
8681Use GNU ld specific options.  This passes @option{-shared} to ld when
8682building a shared library.  It is the default when GCC is configured,
8683explicitly or implicitly, with the GNU linker.  This option does not
8684have any affect on which ld is called, it only changes what parameters
8685are passed to that ld.  The ld that is called is determined by the
8686@option{--with-ld} configure option, GCC's program search path, and
8687finally by the user's @env{PATH}.  The linker used by GCC can be printed
8688using @samp{which `gcc -print-prog-name=ld`}.
8689
8690@item -mhp-ld
8691@opindex hp-ld
8692Use HP ld specific options.  This passes @option{-b} to ld when building
8693a shared library and passes @option{+Accept TypeMismatch} to ld on all
8694links.  It is the default when GCC is configured, explicitly or
8695implicitly, with the HP linker.  This option does not have any affect on
8696which ld is called, it only changes what parameters are passed to that
8697ld.  The ld that is called is determined by the @option{--with-ld}
8698configure option, GCC's program search path, and finally by the user's
8699@env{PATH}.  The linker used by GCC can be printed using @samp{which
8700`gcc -print-prog-name=ld`}.
8701
8702@item -mlong-calls
8703@opindex mno-long-calls
8704Generate code that uses long call sequences.  This ensures that a call
8705is always able to reach linker generated stubs.  The default is to generate
8706long calls only when the distance from the call site to the beginning
8707of the function or translation unit, as the case may be, exceeds a
8708predefined limit set by the branch type being used.  The limits for
8709normal calls are 7,600,000 and 240,000 bytes, respectively for the
8710PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
8711240,000 bytes.
8712
8713Distances are measured from the beginning of functions when using the
8714@option{-ffunction-sections} option, or when using the @option{-mgas}
8715and @option{-mno-portable-runtime} options together under HP-UX with
8716the SOM linker.
8717
8718It is normally not desirable to use this option as it will degrade
8719performance.  However, it may be useful in large applications,
8720particularly when partial linking is used to build the application.
8721
8722The types of long calls used depends on the capabilities of the
8723assembler and linker, and the type of code being generated.  The
8724impact on systems that support long absolute calls, and long pic
8725symbol-difference or pc-relative calls should be relatively small.
8726However, an indirect call is used on 32-bit ELF systems in pic code
8727and it is quite long.
8728
8729@item -nolibdld
8730@opindex nolibdld
8731Suppress the generation of link options to search libdld.sl when the
8732@option{-static} option is specified on HP-UX 10 and later.
8733
8734@item -static
8735@opindex static
8736The HP-UX implementation of setlocale in libc has a dependency on
8737libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
8738when the @option{-static} option is specified, special link options
8739are needed to resolve this dependency.
8740
8741On HP-UX 10 and later, the GCC driver adds the necessary options to
8742link with libdld.sl when the @option{-static} option is specified.
8743This causes the resulting binary to be dynamic.  On the 64-bit port,
8744the linkers generate dynamic binaries by default in any case.  The
8745@option{-nolibdld} option can be used to prevent the GCC driver from
8746adding these link options.
8747
8748@item -threads
8749@opindex threads
8750Add support for multithreading with the @dfn{dce thread} library
8751under HP-UX.  This option sets flags for both the preprocessor and
8752linker.
8753@end table
8754
8755@node Intel 960 Options
8756@subsection Intel 960 Options
8757
8758These @samp{-m} options are defined for the Intel 960 implementations:
8759
8760@table @gcctabopt
8761@item -m@var{cpu-type}
8762@opindex mka
8763@opindex mkb
8764@opindex mmc
8765@opindex mca
8766@opindex mcf
8767@opindex msa
8768@opindex msb
8769Assume the defaults for the machine type @var{cpu-type} for some of
8770the other options, including instruction scheduling, floating point
8771support, and addressing modes.  The choices for @var{cpu-type} are
8772@samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
8773@samp{sa}, and @samp{sb}.
8774The default is
8775@samp{kb}.
8776
8777@item -mnumerics
8778@itemx -msoft-float
8779@opindex mnumerics
8780@opindex msoft-float
8781The @option{-mnumerics} option indicates that the processor does support
8782floating-point instructions.  The @option{-msoft-float} option indicates
8783that floating-point support should not be assumed.
8784
8785@item -mleaf-procedures
8786@itemx -mno-leaf-procedures
8787@opindex mleaf-procedures
8788@opindex mno-leaf-procedures
8789Do (or do not) attempt to alter leaf procedures to be callable with the
8790@code{bal} instruction as well as @code{call}.  This will result in more
8791efficient code for explicit calls when the @code{bal} instruction can be
8792substituted by the assembler or linker, but less efficient code in other
8793cases, such as calls via function pointers, or using a linker that doesn't
8794support this optimization.
8795
8796@item -mtail-call
8797@itemx -mno-tail-call
8798@opindex mtail-call
8799@opindex mno-tail-call
8800Do (or do not) make additional attempts (beyond those of the
8801machine-independent portions of the compiler) to optimize tail-recursive
8802calls into branches.  You may not want to do this because the detection of
8803cases where this is not valid is not totally complete.  The default is
8804@option{-mno-tail-call}.
8805
8806@item -mcomplex-addr
8807@itemx -mno-complex-addr
8808@opindex mcomplex-addr
8809@opindex mno-complex-addr
8810Assume (or do not assume) that the use of a complex addressing mode is a
8811win on this implementation of the i960.  Complex addressing modes may not
8812be worthwhile on the K-series, but they definitely are on the C-series.
8813The default is currently @option{-mcomplex-addr} for all processors except
8814the CB and CC@.
8815
8816@item -mcode-align
8817@itemx -mno-code-align
8818@opindex mcode-align
8819@opindex mno-code-align
8820Align code to 8-byte boundaries for faster fetching (or don't bother).
8821Currently turned on by default for C-series implementations only.
8822
8823@ignore
8824@item -mclean-linkage
8825@itemx -mno-clean-linkage
8826@opindex mclean-linkage
8827@opindex mno-clean-linkage
8828These options are not fully implemented.
8829@end ignore
8830
8831@item -mic-compat
8832@itemx -mic2.0-compat
8833@itemx -mic3.0-compat
8834@opindex mic-compat
8835@opindex mic2.0-compat
8836@opindex mic3.0-compat
8837Enable compatibility with iC960 v2.0 or v3.0.
8838
8839@item -masm-compat
8840@itemx -mintel-asm
8841@opindex masm-compat
8842@opindex mintel-asm
8843Enable compatibility with the iC960 assembler.
8844
8845@item -mstrict-align
8846@itemx -mno-strict-align
8847@opindex mstrict-align
8848@opindex mno-strict-align
8849Do not permit (do permit) unaligned accesses.
8850
8851@item -mold-align
8852@opindex mold-align
8853Enable structure-alignment compatibility with Intel's gcc release version
88541.3 (based on gcc 1.37).  This option implies @option{-mstrict-align}.
8855
8856@item -mlong-double-64
8857@opindex mlong-double-64
8858Implement type @samp{long double} as 64-bit floating point numbers.
8859Without the option @samp{long double} is implemented by 80-bit
8860floating point numbers.  The only reason we have it because there is
8861no 128-bit @samp{long double} support in @samp{fp-bit.c} yet.  So it
8862is only useful for people using soft-float targets.  Otherwise, we
8863should recommend against use of it.
8864
8865@end table
8866
8867@node DEC Alpha Options
8868@subsection DEC Alpha Options
8869
8870These @samp{-m} options are defined for the DEC Alpha implementations:
8871
8872@table @gcctabopt
8873@item -mno-soft-float
8874@itemx -msoft-float
8875@opindex mno-soft-float
8876@opindex msoft-float
8877Use (do not use) the hardware floating-point instructions for
8878floating-point operations.  When @option{-msoft-float} is specified,
8879functions in @file{libgcc.a} will be used to perform floating-point
8880operations.  Unless they are replaced by routines that emulate the
8881floating-point operations, or compiled in such a way as to call such
8882emulations routines, these routines will issue floating-point
8883operations.   If you are compiling for an Alpha without floating-point
8884operations, you must ensure that the library is built so as not to call
8885them.
8886
8887Note that Alpha implementations without floating-point operations are
8888required to have floating-point registers.
8889
8890@item -mfp-reg
8891@itemx -mno-fp-regs
8892@opindex mfp-reg
8893@opindex mno-fp-regs
8894Generate code that uses (does not use) the floating-point register set.
8895@option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
8896register set is not used, floating point operands are passed in integer
8897registers as if they were integers and floating-point results are passed
8898in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
8899so any function with a floating-point argument or return value called by code
8900compiled with @option{-mno-fp-regs} must also be compiled with that
8901option.
8902
8903A typical use of this option is building a kernel that does not use,
8904and hence need not save and restore, any floating-point registers.
8905
8906@item -mieee
8907@opindex mieee
8908The Alpha architecture implements floating-point hardware optimized for
8909maximum performance.  It is mostly compliant with the IEEE floating
8910point standard.  However, for full compliance, software assistance is
8911required.  This option generates code fully IEEE compliant code
8912@emph{except} that the @var{inexact-flag} is not maintained (see below).
8913If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
8914defined during compilation.  The resulting code is less efficient but is
8915able to correctly support denormalized numbers and exceptional IEEE
8916values such as not-a-number and plus/minus infinity.  Other Alpha
8917compilers call this option @option{-ieee_with_no_inexact}.
8918
8919@item -mieee-with-inexact
8920@opindex mieee-with-inexact
8921This is like @option{-mieee} except the generated code also maintains
8922the IEEE @var{inexact-flag}.  Turning on this option causes the
8923generated code to implement fully-compliant IEEE math.  In addition to
8924@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
8925macro.  On some Alpha implementations the resulting code may execute
8926significantly slower than the code generated by default.  Since there is
8927very little code that depends on the @var{inexact-flag}, you should
8928normally not specify this option.  Other Alpha compilers call this
8929option @option{-ieee_with_inexact}.
8930
8931@item -mfp-trap-mode=@var{trap-mode}
8932@opindex mfp-trap-mode
8933This option controls what floating-point related traps are enabled.
8934Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
8935The trap mode can be set to one of four values:
8936
8937@table @samp
8938@item n
8939This is the default (normal) setting.  The only traps that are enabled
8940are the ones that cannot be disabled in software (e.g., division by zero
8941trap).
8942
8943@item u
8944In addition to the traps enabled by @samp{n}, underflow traps are enabled
8945as well.
8946
8947@item su
8948Like @samp{su}, but the instructions are marked to be safe for software
8949completion (see Alpha architecture manual for details).
8950
8951@item sui
8952Like @samp{su}, but inexact traps are enabled as well.
8953@end table
8954
8955@item -mfp-rounding-mode=@var{rounding-mode}
8956@opindex mfp-rounding-mode
8957Selects the IEEE rounding mode.  Other Alpha compilers call this option
8958@option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
8959of:
8960
8961@table @samp
8962@item n
8963Normal IEEE rounding mode.  Floating point numbers are rounded towards
8964the nearest machine number or towards the even machine number in case
8965of a tie.
8966
8967@item m
8968Round towards minus infinity.
8969
8970@item c
8971Chopped rounding mode.  Floating point numbers are rounded towards zero.
8972
8973@item d
8974Dynamic rounding mode.  A field in the floating point control register
8975(@var{fpcr}, see Alpha architecture reference manual) controls the
8976rounding mode in effect.  The C library initializes this register for
8977rounding towards plus infinity.  Thus, unless your program modifies the
8978@var{fpcr}, @samp{d} corresponds to round towards plus infinity.
8979@end table
8980
8981@item -mtrap-precision=@var{trap-precision}
8982@opindex mtrap-precision
8983In the Alpha architecture, floating point traps are imprecise.  This
8984means without software assistance it is impossible to recover from a
8985floating trap and program execution normally needs to be terminated.
8986GCC can generate code that can assist operating system trap handlers
8987in determining the exact location that caused a floating point trap.
8988Depending on the requirements of an application, different levels of
8989precisions can be selected:
8990
8991@table @samp
8992@item p
8993Program precision.  This option is the default and means a trap handler
8994can only identify which program caused a floating point exception.
8995
8996@item f
8997Function precision.  The trap handler can determine the function that
8998caused a floating point exception.
8999
9000@item i
9001Instruction precision.  The trap handler can determine the exact
9002instruction that caused a floating point exception.
9003@end table
9004
9005Other Alpha compilers provide the equivalent options called
9006@option{-scope_safe} and @option{-resumption_safe}.
9007
9008@item -mieee-conformant
9009@opindex mieee-conformant
9010This option marks the generated code as IEEE conformant.  You must not
9011use this option unless you also specify @option{-mtrap-precision=i} and either
9012@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
9013is to emit the line @samp{.eflag 48} in the function prologue of the
9014generated assembly file.  Under DEC Unix, this has the effect that
9015IEEE-conformant math library routines will be linked in.
9016
9017@item -mbuild-constants
9018@opindex mbuild-constants
9019Normally GCC examines a 32- or 64-bit integer constant to
9020see if it can construct it from smaller constants in two or three
9021instructions.  If it cannot, it will output the constant as a literal and
9022generate code to load it from the data segment at runtime.
9023
9024Use this option to require GCC to construct @emph{all} integer constants
9025using code, even if it takes more instructions (the maximum is six).
9026
9027You would typically use this option to build a shared library dynamic
9028loader.  Itself a shared library, it must relocate itself in memory
9029before it can find the variables and constants in its own data segment.
9030
9031@item -malpha-as
9032@itemx -mgas
9033@opindex malpha-as
9034@opindex mgas
9035Select whether to generate code to be assembled by the vendor-supplied
9036assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
9037
9038@item -mbwx
9039@itemx -mno-bwx
9040@itemx -mcix
9041@itemx -mno-cix
9042@itemx -mfix
9043@itemx -mno-fix
9044@itemx -mmax
9045@itemx -mno-max
9046@opindex mbwx
9047@opindex mno-bwx
9048@opindex mcix
9049@opindex mno-cix
9050@opindex mfix
9051@opindex mno-fix
9052@opindex mmax
9053@opindex mno-max
9054Indicate whether GCC should generate code to use the optional BWX,
9055CIX, FIX and MAX instruction sets.  The default is to use the instruction
9056sets supported by the CPU type specified via @option{-mcpu=} option or that
9057of the CPU on which GCC was built if none was specified.
9058
9059@item -mfloat-vax
9060@itemx -mfloat-ieee
9061@opindex mfloat-vax
9062@opindex mfloat-ieee
9063Generate code that uses (does not use) VAX F and G floating point
9064arithmetic instead of IEEE single and double precision.
9065
9066@item -mexplicit-relocs
9067@itemx -mno-explicit-relocs
9068@opindex mexplicit-relocs
9069@opindex mno-explicit-relocs
9070Older Alpha assemblers provided no way to generate symbol relocations
9071except via assembler macros.  Use of these macros does not allow
9072optimal instruction scheduling.  GNU binutils as of version 2.12
9073supports a new syntax that allows the compiler to explicitly mark
9074which relocations should apply to which instructions.  This option
9075is mostly useful for debugging, as GCC detects the capabilities of
9076the assembler when it is built and sets the default accordingly.
9077
9078@item -msmall-data
9079@itemx -mlarge-data
9080@opindex msmall-data
9081@opindex mlarge-data
9082When @option{-mexplicit-relocs} is in effect, static data is
9083accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
9084is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
9085(the @code{.sdata} and @code{.sbss} sections) and are accessed via
908616-bit relocations off of the @code{$gp} register.  This limits the
9087size of the small data area to 64KB, but allows the variables to be
9088directly accessed via a single instruction.
9089
9090The default is @option{-mlarge-data}.  With this option the data area
9091is limited to just below 2GB.  Programs that require more than 2GB of
9092data must use @code{malloc} or @code{mmap} to allocate the data in the
9093heap instead of in the program's data segment.
9094
9095When generating code for shared libraries, @option{-fpic} implies
9096@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
9097
9098@item -msmall-text
9099@itemx -mlarge-text
9100@opindex msmall-text
9101@opindex mlarge-text
9102When @option{-msmall-text} is used, the compiler assumes that the
9103code of the entire program (or shared library) fits in 4MB, and is
9104thus reachable with a branch instruction.  When @option{-msmall-data}
9105is used, the compiler can assume that all local symbols share the
9106same @code{$gp} value, and thus reduce the number of instructions
9107required for a function call from 4 to 1.
9108
9109The default is @option{-mlarge-text}.
9110
9111@item -mcpu=@var{cpu_type}
9112@opindex mcpu
9113Set the instruction set and instruction scheduling parameters for
9114machine type @var{cpu_type}.  You can specify either the @samp{EV}
9115style name or the corresponding chip number.  GCC supports scheduling
9116parameters for the EV4, EV5 and EV6 family of processors and will
9117choose the default values for the instruction set from the processor
9118you specify.  If you do not specify a processor type, GCC will default
9119to the processor on which the compiler was built.
9120
9121Supported values for @var{cpu_type} are
9122
9123@table @samp
9124@item ev4
9125@itemx ev45
9126@itemx 21064
9127Schedules as an EV4 and has no instruction set extensions.
9128
9129@item ev5
9130@itemx 21164
9131Schedules as an EV5 and has no instruction set extensions.
9132
9133@item ev56
9134@itemx 21164a
9135Schedules as an EV5 and supports the BWX extension.
9136
9137@item pca56
9138@itemx 21164pc
9139@itemx 21164PC
9140Schedules as an EV5 and supports the BWX and MAX extensions.
9141
9142@item ev6
9143@itemx 21264
9144Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
9145
9146@item ev67
9147@itemx 21264a
9148Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
9149@end table
9150
9151@item -mtune=@var{cpu_type}
9152@opindex mtune
9153Set only the instruction scheduling parameters for machine type
9154@var{cpu_type}.  The instruction set is not changed.
9155
9156@item -mmemory-latency=@var{time}
9157@opindex mmemory-latency
9158Sets the latency the scheduler should assume for typical memory
9159references as seen by the application.  This number is highly
9160dependent on the memory access patterns used by the application
9161and the size of the external cache on the machine.
9162
9163Valid options for @var{time} are
9164
9165@table @samp
9166@item @var{number}
9167A decimal number representing clock cycles.
9168
9169@item L1
9170@itemx L2
9171@itemx L3
9172@itemx main
9173The compiler contains estimates of the number of clock cycles for
9174``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
9175(also called Dcache, Scache, and Bcache), as well as to main memory.
9176Note that L3 is only valid for EV5.
9177
9178@end table
9179@end table
9180
9181@node DEC Alpha/VMS Options
9182@subsection DEC Alpha/VMS Options
9183
9184These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
9185
9186@table @gcctabopt
9187@item -mvms-return-codes
9188@opindex mvms-return-codes
9189Return VMS condition codes from main.  The default is to return POSIX
9190style condition (e.g.@ error) codes.
9191@end table
9192
9193@node H8/300 Options
9194@subsection H8/300 Options
9195
9196These @samp{-m} options are defined for the H8/300 implementations:
9197
9198@table @gcctabopt
9199@item -mrelax
9200@opindex mrelax
9201Shorten some address references at link time, when possible; uses the
9202linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
9203ld, Using ld}, for a fuller description.
9204
9205@item -mh
9206@opindex mh
9207Generate code for the H8/300H@.
9208
9209@item -ms
9210@opindex ms
9211Generate code for the H8S@.
9212
9213@item -mn
9214@opindex mn
9215Generate code for the H8S and H8/300H in the normal mode.  This switch
9216must be used either with -mh or -ms.
9217
9218@item -ms2600
9219@opindex ms2600
9220Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
9221
9222@item -mint32
9223@opindex mint32
9224Make @code{int} data 32 bits by default.
9225
9226@item -malign-300
9227@opindex malign-300
9228On the H8/300H and H8S, use the same alignment rules as for the H8/300.
9229The default for the H8/300H and H8S is to align longs and floats on 4
9230byte boundaries.
9231@option{-malign-300} causes them to be aligned on 2 byte boundaries.
9232This option has no effect on the H8/300.
9233@end table
9234
9235@node SH Options
9236@subsection SH Options
9237
9238These @samp{-m} options are defined for the SH implementations:
9239
9240@table @gcctabopt
9241@item -m1
9242@opindex m1
9243Generate code for the SH1.
9244
9245@item -m2
9246@opindex m2
9247Generate code for the SH2.
9248
9249@item -m2e
9250Generate code for the SH2e.
9251
9252@item -m3
9253@opindex m3
9254Generate code for the SH3.
9255
9256@item -m3e
9257@opindex m3e
9258Generate code for the SH3e.
9259
9260@item -m4-nofpu
9261@opindex m4-nofpu
9262Generate code for the SH4 without a floating-point unit.
9263
9264@item -m4-single-only
9265@opindex m4-single-only
9266Generate code for the SH4 with a floating-point unit that only
9267supports single-precision arithmetic.
9268
9269@item -m4-single
9270@opindex m4-single
9271Generate code for the SH4 assuming the floating-point unit is in
9272single-precision mode by default.
9273
9274@item -m4
9275@opindex m4
9276Generate code for the SH4.
9277
9278@item -mb
9279@opindex mb
9280Compile code for the processor in big endian mode.
9281
9282@item -ml
9283@opindex ml
9284Compile code for the processor in little endian mode.
9285
9286@item -mdalign
9287@opindex mdalign
9288Align doubles at 64-bit boundaries.  Note that this changes the calling
9289conventions, and thus some functions from the standard C library will
9290not work unless you recompile it first with @option{-mdalign}.
9291
9292@item -mrelax
9293@opindex mrelax
9294Shorten some address references at link time, when possible; uses the
9295linker option @option{-relax}.
9296
9297@item -mbigtable
9298@opindex mbigtable
9299Use 32-bit offsets in @code{switch} tables.  The default is to use
930016-bit offsets.
9301
9302@item -mfmovd
9303@opindex mfmovd
9304Enable the use of the instruction @code{fmovd}.
9305
9306@item -mhitachi
9307@opindex mhitachi
9308Comply with the calling conventions defined by Renesas.
9309
9310@item -mnomacsave
9311@opindex mnomacsave
9312Mark the @code{MAC} register as call-clobbered, even if
9313@option{-mhitachi} is given.
9314
9315@item -mieee
9316@opindex mieee
9317Increase IEEE-compliance of floating-point code.
9318
9319@item -misize
9320@opindex misize
9321Dump instruction size and location in the assembly code.
9322
9323@item -mpadstruct
9324@opindex mpadstruct
9325This option is deprecated.  It pads structures to multiple of 4 bytes,
9326which is incompatible with the SH ABI@.
9327
9328@item -mspace
9329@opindex mspace
9330Optimize for space instead of speed.  Implied by @option{-Os}.
9331
9332@item -mprefergot
9333@opindex mprefergot
9334When generating position-independent code, emit function calls using
9335the Global Offset Table instead of the Procedure Linkage Table.
9336
9337@item -musermode
9338@opindex musermode
9339Generate a library function call to invalidate instruction cache
9340entries, after fixing up a trampoline.  This library function call
9341doesn't assume it can write to the whole memory address space.  This
9342is the default when the target is @code{sh-*-linux*}.
9343@end table
9344
9345@node System V Options
9346@subsection Options for System V
9347
9348These additional options are available on System V Release 4 for
9349compatibility with other compilers on those systems:
9350
9351@table @gcctabopt
9352@item -G
9353@opindex G
9354Create a shared object.
9355It is recommended that @option{-symbolic} or @option{-shared} be used instead.
9356
9357@item -Qy
9358@opindex Qy
9359Identify the versions of each tool used by the compiler, in a
9360@code{.ident} assembler directive in the output.
9361
9362@item -Qn
9363@opindex Qn
9364Refrain from adding @code{.ident} directives to the output file (this is
9365the default).
9366
9367@item -YP,@var{dirs}
9368@opindex YP
9369Search the directories @var{dirs}, and no others, for libraries
9370specified with @option{-l}.
9371
9372@item -Ym,@var{dir}
9373@opindex Ym
9374Look in the directory @var{dir} to find the M4 preprocessor.
9375The assembler uses this option.
9376@c This is supposed to go with a -Yd for predefined M4 macro files, but
9377@c the generic assembler that comes with Solaris takes just -Ym.
9378@end table
9379
9380@node TMS320C3x/C4x Options
9381@subsection TMS320C3x/C4x Options
9382@cindex TMS320C3x/C4x Options
9383
9384These @samp{-m} options are defined for TMS320C3x/C4x implementations:
9385
9386@table @gcctabopt
9387
9388@item -mcpu=@var{cpu_type}
9389@opindex mcpu
9390Set the instruction set, register set, and instruction scheduling
9391parameters for machine type @var{cpu_type}.  Supported values for
9392@var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
9393@samp{c44}.  The default is @samp{c40} to generate code for the
9394TMS320C40.
9395
9396@item -mbig-memory
9397@itemx -mbig
9398@itemx -msmall-memory
9399@itemx -msmall
9400@opindex mbig-memory
9401@opindex mbig
9402@opindex msmall-memory
9403@opindex msmall
9404Generates code for the big or small memory model.  The small memory
9405model assumed that all data fits into one 64K word page.  At run-time
9406the data page (DP) register must be set to point to the 64K page
9407containing the .bss and .data program sections.  The big memory model is
9408the default and requires reloading of the DP register for every direct
9409memory access.
9410
9411@item -mbk
9412@itemx -mno-bk
9413@opindex mbk
9414@opindex mno-bk
9415Allow (disallow) allocation of general integer operands into the block
9416count register BK@.
9417
9418@item -mdb
9419@itemx -mno-db
9420@opindex mdb
9421@opindex mno-db
9422Enable (disable) generation of code using decrement and branch,
9423DBcond(D), instructions.  This is enabled by default for the C4x.  To be
9424on the safe side, this is disabled for the C3x, since the maximum
9425iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than
9426@math{2^{23}} times on the C3x?).  Note that GCC will try to reverse a loop so
9427that it can utilize the decrement and branch instruction, but will give
9428up if there is more than one memory reference in the loop.  Thus a loop
9429where the loop counter is decremented can generate slightly more
9430efficient code, in cases where the RPTB instruction cannot be utilized.
9431
9432@item -mdp-isr-reload
9433@itemx -mparanoid
9434@opindex mdp-isr-reload
9435@opindex mparanoid
9436Force the DP register to be saved on entry to an interrupt service
9437routine (ISR), reloaded to point to the data section, and restored on
9438exit from the ISR@.  This should not be required unless someone has
9439violated the small memory model by modifying the DP register, say within
9440an object library.
9441
9442@item -mmpyi
9443@itemx -mno-mpyi
9444@opindex mmpyi
9445@opindex mno-mpyi
9446For the C3x use the 24-bit MPYI instruction for integer multiplies
9447instead of a library call to guarantee 32-bit results.  Note that if one
9448of the operands is a constant, then the multiplication will be performed
9449using shifts and adds.  If the @option{-mmpyi} option is not specified for the C3x,
9450then squaring operations are performed inline instead of a library call.
9451
9452@item -mfast-fix
9453@itemx -mno-fast-fix
9454@opindex mfast-fix
9455@opindex mno-fast-fix
9456The C3x/C4x FIX instruction to convert a floating point value to an
9457integer value chooses the nearest integer less than or equal to the
9458floating point value rather than to the nearest integer.  Thus if the
9459floating point number is negative, the result will be incorrectly
9460truncated an additional code is necessary to detect and correct this
9461case.  This option can be used to disable generation of the additional
9462code required to correct the result.
9463
9464@item -mrptb
9465@itemx -mno-rptb
9466@opindex mrptb
9467@opindex mno-rptb
9468Enable (disable) generation of repeat block sequences using the RPTB
9469instruction for zero overhead looping.  The RPTB construct is only used
9470for innermost loops that do not call functions or jump across the loop
9471boundaries.  There is no advantage having nested RPTB loops due to the
9472overhead required to save and restore the RC, RS, and RE registers.
9473This is enabled by default with @option{-O2}.
9474
9475@item -mrpts=@var{count}
9476@itemx -mno-rpts
9477@opindex mrpts
9478@opindex mno-rpts
9479Enable (disable) the use of the single instruction repeat instruction
9480RPTS@.  If a repeat block contains a single instruction, and the loop
9481count can be guaranteed to be less than the value @var{count}, GCC will
9482emit a RPTS instruction instead of a RPTB@.  If no value is specified,
9483then a RPTS will be emitted even if the loop count cannot be determined
9484at compile time.  Note that the repeated instruction following RPTS does
9485not have to be reloaded from memory each iteration, thus freeing up the
9486CPU buses for operands.  However, since interrupts are blocked by this
9487instruction, it is disabled by default.
9488
9489@item -mloop-unsigned
9490@itemx -mno-loop-unsigned
9491@opindex mloop-unsigned
9492@opindex mno-loop-unsigned
9493The maximum iteration count when using RPTS and RPTB (and DB on the C40)
9494is @math{2^{31} + 1} since these instructions test if the iteration count is
9495negative to terminate the loop.  If the iteration count is unsigned
9496there is a possibility than the @math{2^{31} + 1} maximum iteration count may be
9497exceeded.  This switch allows an unsigned iteration count.
9498
9499@item -mti
9500@opindex mti
9501Try to emit an assembler syntax that the TI assembler (asm30) is happy
9502with.  This also enforces compatibility with the API employed by the TI
9503C3x C compiler.  For example, long doubles are passed as structures
9504rather than in floating point registers.
9505
9506@item -mregparm
9507@itemx -mmemparm
9508@opindex mregparm
9509@opindex mmemparm
9510Generate code that uses registers (stack) for passing arguments to functions.
9511By default, arguments are passed in registers where possible rather
9512than by pushing arguments on to the stack.
9513
9514@item -mparallel-insns
9515@itemx -mno-parallel-insns
9516@opindex mparallel-insns
9517@opindex mno-parallel-insns
9518Allow the generation of parallel instructions.  This is enabled by
9519default with @option{-O2}.
9520
9521@item -mparallel-mpy
9522@itemx -mno-parallel-mpy
9523@opindex mparallel-mpy
9524@opindex mno-parallel-mpy
9525Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
9526provided @option{-mparallel-insns} is also specified.  These instructions have
9527tight register constraints which can pessimize the code generation
9528of large functions.
9529
9530@end table
9531
9532@node V850 Options
9533@subsection V850 Options
9534@cindex V850 Options
9535
9536These @samp{-m} options are defined for V850 implementations:
9537
9538@table @gcctabopt
9539@item -mlong-calls
9540@itemx -mno-long-calls
9541@opindex mlong-calls
9542@opindex mno-long-calls
9543Treat all calls as being far away (near).  If calls are assumed to be
9544far away, the compiler will always load the functions address up into a
9545register, and call indirect through the pointer.
9546
9547@item -mno-ep
9548@itemx -mep
9549@opindex mno-ep
9550@opindex mep
9551Do not optimize (do optimize) basic blocks that use the same index
9552pointer 4 or more times to copy pointer into the @code{ep} register, and
9553use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
9554option is on by default if you optimize.
9555
9556@item -mno-prolog-function
9557@itemx -mprolog-function
9558@opindex mno-prolog-function
9559@opindex mprolog-function
9560Do not use (do use) external functions to save and restore registers
9561at the prologue and epilogue of a function.  The external functions
9562are slower, but use less code space if more than one function saves
9563the same number of registers.  The @option{-mprolog-function} option
9564is on by default if you optimize.
9565
9566@item -mspace
9567@opindex mspace
9568Try to make the code as small as possible.  At present, this just turns
9569on the @option{-mep} and @option{-mprolog-function} options.
9570
9571@item -mtda=@var{n}
9572@opindex mtda
9573Put static or global variables whose size is @var{n} bytes or less into
9574the tiny data area that register @code{ep} points to.  The tiny data
9575area can hold up to 256 bytes in total (128 bytes for byte references).
9576
9577@item -msda=@var{n}
9578@opindex msda
9579Put static or global variables whose size is @var{n} bytes or less into
9580the small data area that register @code{gp} points to.  The small data
9581area can hold up to 64 kilobytes.
9582
9583@item -mzda=@var{n}
9584@opindex mzda
9585Put static or global variables whose size is @var{n} bytes or less into
9586the first 32 kilobytes of memory.
9587
9588@item -mv850
9589@opindex mv850
9590Specify that the target processor is the V850.
9591
9592@item -mbig-switch
9593@opindex mbig-switch
9594Generate code suitable for big switch tables.  Use this option only if
9595the assembler/linker complain about out of range branches within a switch
9596table.
9597
9598@item -mapp-regs
9599@opindex mapp-regs
9600This option will cause r2 and r5 to be used in the code generated by
9601the compiler.  This setting is the default.
9602
9603@item -mno-app-regs
9604@opindex mno-app-regs
9605This option will cause r2 and r5 to be treated as fixed registers.
9606
9607@item -mv850e1
9608@opindex mv850e1
9609Specify that the target processor is the V850E1.  The preprocessor
9610constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
9611this option is used.
9612
9613@item -mv850e
9614@opindex mv850e
9615Specify that the target processor is the V850E.  The preprocessor
9616constant @samp{__v850e__} will be defined if this option is used.
9617
9618If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
9619are defined then a default target processor will be chosen and the
9620relevant @samp{__v850*__} preprocessor constant will be defined.
9621
9622The preprocessor constants @samp{__v850} and @samp{__v851__} are always
9623defined, regardless of which processor variant is the target.
9624
9625@item -mdisable-callt
9626@opindex mdisable-callt
9627This option will suppress generation of the CALLT instruction for the
9628v850e and v850e1 flavors of the v850 architecture.  The default is
9629@option{-mno-disable-callt} which allows the CALLT instruction to be used.
9630
9631@end table
9632
9633@node ARC Options
9634@subsection ARC Options
9635@cindex ARC Options
9636
9637These options are defined for ARC implementations:
9638
9639@table @gcctabopt
9640@item -EL
9641@opindex EL
9642Compile code for little endian mode.  This is the default.
9643
9644@item -EB
9645@opindex EB
9646Compile code for big endian mode.
9647
9648@item -mmangle-cpu
9649@opindex mmangle-cpu
9650Prepend the name of the cpu to all public symbol names.
9651In multiple-processor systems, there are many ARC variants with different
9652instruction and register set characteristics.  This flag prevents code
9653compiled for one cpu to be linked with code compiled for another.
9654No facility exists for handling variants that are ``almost identical''.
9655This is an all or nothing option.
9656
9657@item -mcpu=@var{cpu}
9658@opindex mcpu
9659Compile code for ARC variant @var{cpu}.
9660Which variants are supported depend on the configuration.
9661All variants support @option{-mcpu=base}, this is the default.
9662
9663@item -mtext=@var{text-section}
9664@itemx -mdata=@var{data-section}
9665@itemx -mrodata=@var{readonly-data-section}
9666@opindex mtext
9667@opindex mdata
9668@opindex mrodata
9669Put functions, data, and readonly data in @var{text-section},
9670@var{data-section}, and @var{readonly-data-section} respectively
9671by default.  This can be overridden with the @code{section} attribute.
9672@xref{Variable Attributes}.
9673
9674@end table
9675
9676@node NS32K Options
9677@subsection NS32K Options
9678@cindex NS32K options
9679
9680These are the @samp{-m} options defined for the 32000 series.  The default
9681values for these options depends on which style of 32000 was selected when
9682the compiler was configured; the defaults for the most common choices are
9683given below.
9684
9685@table @gcctabopt
9686@item -m32032
9687@itemx -m32032
9688@opindex m32032
9689@opindex m32032
9690Generate output for a 32032.  This is the default
9691when the compiler is configured for 32032 and 32016 based systems.
9692
9693@item -m32332
9694@itemx -m32332
9695@opindex m32332
9696@opindex m32332
9697Generate output for a 32332.  This is the default
9698when the compiler is configured for 32332-based systems.
9699
9700@item -m32532
9701@itemx -m32532
9702@opindex m32532
9703@opindex m32532
9704Generate output for a 32532.  This is the default
9705when the compiler is configured for 32532-based systems.
9706
9707@item -m32081
9708@opindex m32081
9709Generate output containing 32081 instructions for floating point.
9710This is the default for all systems.
9711
9712@item -m32381
9713@opindex m32381
9714Generate output containing 32381 instructions for floating point.  This
9715also implies @option{-m32081}.  The 32381 is only compatible with the 32332
9716and 32532 cpus.  This is the default for the pc532-netbsd configuration.
9717
9718@item -mmulti-add
9719@opindex mmulti-add
9720Try and generate multiply-add floating point instructions @code{polyF}
9721and @code{dotF}.  This option is only available if the @option{-m32381}
9722option is in effect.  Using these instructions requires changes to
9723register allocation which generally has a negative impact on
9724performance.  This option should only be enabled when compiling code
9725particularly likely to make heavy use of multiply-add instructions.
9726
9727@item -mnomulti-add
9728@opindex mnomulti-add
9729Do not try and generate multiply-add floating point instructions
9730@code{polyF} and @code{dotF}.  This is the default on all platforms.
9731
9732@item -msoft-float
9733@opindex msoft-float
9734Generate output containing library calls for floating point.
9735@strong{Warning:} the requisite libraries may not be available.
9736
9737@item -mieee-compare
9738@itemx -mno-ieee-compare
9739@opindex mieee-compare
9740@opindex mno-ieee-compare
9741Control whether or not the compiler uses IEEE floating point
9742comparisons.  These handle correctly the case where the result of a
9743comparison is unordered.
9744@strong{Warning:} the requisite kernel support may not be available.
9745
9746@item -mnobitfield
9747@opindex mnobitfield
9748Do not use the bit-field instructions.  On some machines it is faster to
9749use shifting and masking operations.  This is the default for the pc532.
9750
9751@item -mbitfield
9752@opindex mbitfield
9753Do use the bit-field instructions.  This is the default for all platforms
9754except the pc532.
9755
9756@item -mrtd
9757@opindex mrtd
9758Use a different function-calling convention, in which functions
9759that take a fixed number of arguments return pop their
9760arguments on return with the @code{ret} instruction.
9761
9762This calling convention is incompatible with the one normally
9763used on Unix, so you cannot use it if you need to call libraries
9764compiled with the Unix compiler.
9765
9766Also, you must provide function prototypes for all functions that
9767take variable numbers of arguments (including @code{printf});
9768otherwise incorrect code will be generated for calls to those
9769functions.
9770
9771In addition, seriously incorrect code will result if you call a
9772function with too many arguments.  (Normally, extra arguments are
9773harmlessly ignored.)
9774
9775This option takes its name from the 680x0 @code{rtd} instruction.
9776
9777
9778@item -mregparam
9779@opindex mregparam
9780Use a different function-calling convention where the first two arguments
9781are passed in registers.
9782
9783This calling convention is incompatible with the one normally
9784used on Unix, so you cannot use it if you need to call libraries
9785compiled with the Unix compiler.
9786
9787@item -mnoregparam
9788@opindex mnoregparam
9789Do not pass any arguments in registers.  This is the default for all
9790targets.
9791
9792@item -msb
9793@opindex msb
9794It is OK to use the sb as an index register which is always loaded with
9795zero.  This is the default for the pc532-netbsd target.
9796
9797@item -mnosb
9798@opindex mnosb
9799The sb register is not available for use or has not been initialized to
9800zero by the run time system.  This is the default for all targets except
9801the pc532-netbsd.  It is also implied whenever @option{-mhimem} or
9802@option{-fpic} is set.
9803
9804@item -mhimem
9805@opindex mhimem
9806Many ns32000 series addressing modes use displacements of up to 512MB@.
9807If an address is above 512MB then displacements from zero can not be used.
9808This option causes code to be generated which can be loaded above 512MB@.
9809This may be useful for operating systems or ROM code.
9810
9811@item -mnohimem
9812@opindex mnohimem
9813Assume code will be loaded in the first 512MB of virtual address space.
9814This is the default for all platforms.
9815
9816
9817@end table
9818
9819@node AVR Options
9820@subsection AVR Options
9821@cindex AVR Options
9822
9823These options are defined for AVR implementations:
9824
9825@table @gcctabopt
9826@item -mmcu=@var{mcu}
9827@opindex mmcu
9828Specify ATMEL AVR instruction set or MCU type.
9829
9830Instruction set avr1 is for the minimal AVR core, not supported by the C
9831compiler, only for assembler programs (MCU types: at90s1200, attiny10,
9832attiny11, attiny12, attiny15, attiny28).
9833
9834Instruction set avr2 (default) is for the classic AVR core with up to
98358K program memory space (MCU types: at90s2313, at90s2323, attiny22,
9836at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
9837at90c8534, at90s8535).
9838
9839Instruction set avr3 is for the classic AVR core with up to 128K program
9840memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).
9841
9842Instruction set avr4 is for the enhanced AVR core with up to 8K program
9843memory space (MCU types: atmega8, atmega83, atmega85).
9844
9845Instruction set avr5 is for the enhanced AVR core with up to 128K program
9846memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
9847atmega64, atmega128, at43usb355, at94k).
9848
9849@item -msize
9850@opindex msize
9851Output instruction sizes to the asm file.
9852
9853@item -minit-stack=@var{N}
9854@opindex minit-stack
9855Specify the initial stack address, which may be a symbol or numeric value,
9856@samp{__stack} is the default.
9857
9858@item -mno-interrupts
9859@opindex mno-interrupts
9860Generated code is not compatible with hardware interrupts.
9861Code size will be smaller.
9862
9863@item -mcall-prologues
9864@opindex mcall-prologues
9865Functions prologues/epilogues expanded as call to appropriate
9866subroutines.  Code size will be smaller.
9867
9868@item -mno-tablejump
9869@opindex mno-tablejump
9870Do not generate tablejump insns which sometimes increase code size.
9871
9872@item -mtiny-stack
9873@opindex mtiny-stack
9874Change only the low 8 bits of the stack pointer.
9875@end table
9876
9877@node MCore Options
9878@subsection MCore Options
9879@cindex MCore options
9880
9881These are the @samp{-m} options defined for the Motorola M*Core
9882processors.
9883
9884@table @gcctabopt
9885
9886@item -mhardlit
9887@itemx -mno-hardlit
9888@opindex mhardlit
9889@opindex mno-hardlit
9890Inline constants into the code stream if it can be done in two
9891instructions or less.
9892
9893@item -mdiv
9894@itemx -mno-div
9895@opindex mdiv
9896@opindex mno-div
9897Use the divide instruction.  (Enabled by default).
9898
9899@item -mrelax-immediate
9900@itemx -mno-relax-immediate
9901@opindex mrelax-immediate
9902@opindex mno-relax-immediate
9903Allow arbitrary sized immediates in bit operations.
9904
9905@item -mwide-bitfields
9906@itemx -mno-wide-bitfields
9907@opindex mwide-bitfields
9908@opindex mno-wide-bitfields
9909Always treat bit-fields as int-sized.
9910
9911@item -m4byte-functions
9912@itemx -mno-4byte-functions
9913@opindex m4byte-functions
9914@opindex mno-4byte-functions
9915Force all functions to be aligned to a four byte boundary.
9916
9917@item -mcallgraph-data
9918@itemx -mno-callgraph-data
9919@opindex mcallgraph-data
9920@opindex mno-callgraph-data
9921Emit callgraph information.
9922
9923@item -mslow-bytes
9924@itemx -mno-slow-bytes
9925@opindex mslow-bytes
9926@opindex mno-slow-bytes
9927Prefer word access when reading byte quantities.
9928
9929@item -mlittle-endian
9930@itemx -mbig-endian
9931@opindex mlittle-endian
9932@opindex mbig-endian
9933Generate code for a little endian target.
9934
9935@item -m210
9936@itemx -m340
9937@opindex m210
9938@opindex m340
9939Generate code for the 210 processor.
9940@end table
9941
9942@node IA-64 Options
9943@subsection IA-64 Options
9944@cindex IA-64 Options
9945
9946These are the @samp{-m} options defined for the Intel IA-64 architecture.
9947
9948@table @gcctabopt
9949@item -mbig-endian
9950@opindex mbig-endian
9951Generate code for a big endian target.  This is the default for HP-UX@.
9952
9953@item -mlittle-endian
9954@opindex mlittle-endian
9955Generate code for a little endian target.  This is the default for AIX5
9956and GNU/Linux.
9957
9958@item -mgnu-as
9959@itemx -mno-gnu-as
9960@opindex mgnu-as
9961@opindex mno-gnu-as
9962Generate (or don't) code for the GNU assembler.  This is the default.
9963@c Also, this is the default if the configure option @option{--with-gnu-as}
9964@c is used.
9965
9966@item -mgnu-ld
9967@itemx -mno-gnu-ld
9968@opindex mgnu-ld
9969@opindex mno-gnu-ld
9970Generate (or don't) code for the GNU linker.  This is the default.
9971@c Also, this is the default if the configure option @option{--with-gnu-ld}
9972@c is used.
9973
9974@item -mno-pic
9975@opindex mno-pic
9976Generate code that does not use a global pointer register.  The result
9977is not position independent code, and violates the IA-64 ABI@.
9978
9979@item -mvolatile-asm-stop
9980@itemx -mno-volatile-asm-stop
9981@opindex mvolatile-asm-stop
9982@opindex mno-volatile-asm-stop
9983Generate (or don't) a stop bit immediately before and after volatile asm
9984statements.
9985
9986@item -mb-step
9987@opindex mb-step
9988Generate code that works around Itanium B step errata.
9989
9990@item -mregister-names
9991@itemx -mno-register-names
9992@opindex mregister-names
9993@opindex mno-register-names
9994Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
9995the stacked registers.  This may make assembler output more readable.
9996
9997@item -mno-sdata
9998@itemx -msdata
9999@opindex mno-sdata
10000@opindex msdata
10001Disable (or enable) optimizations that use the small data section.  This may
10002be useful for working around optimizer bugs.
10003
10004@item -mconstant-gp
10005@opindex mconstant-gp
10006Generate code that uses a single constant global pointer value.  This is
10007useful when compiling kernel code.
10008
10009@item -mauto-pic
10010@opindex mauto-pic
10011Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
10012This is useful when compiling firmware code.
10013
10014@item -minline-float-divide-min-latency
10015@opindex minline-float-divide-min-latency
10016Generate code for inline divides of floating point values
10017using the minimum latency algorithm.
10018
10019@item -minline-float-divide-max-throughput
10020@opindex minline-float-divide-max-throughput
10021Generate code for inline divides of floating point values
10022using the maximum throughput algorithm.
10023
10024@item -minline-int-divide-min-latency
10025@opindex minline-int-divide-min-latency
10026Generate code for inline divides of integer values
10027using the minimum latency algorithm.
10028
10029@item -minline-int-divide-max-throughput
10030@opindex minline-int-divide-max-throughput
10031Generate code for inline divides of integer values
10032using the maximum throughput algorithm.
10033
10034@item -mno-dwarf2-asm
10035@itemx -mdwarf2-asm
10036@opindex mno-dwarf2-asm
10037@opindex mdwarf2-asm
10038Don't (or do) generate assembler code for the DWARF2 line number debugging
10039info.  This may be useful when not using the GNU assembler.
10040
10041@item -mfixed-range=@var{register-range}
10042@opindex mfixed-range
10043Generate code treating the given register range as fixed registers.
10044A fixed register is one that the register allocator can not use.  This is
10045useful when compiling kernel code.  A register range is specified as
10046two registers separated by a dash.  Multiple register ranges can be
10047specified separated by a comma.
10048
10049@item -mearly-stop-bits
10050@itemx -mno-early-stop-bits
10051@opindex mearly-stop-bits
10052@opindex mno-early-stop-bits
10053Allow stop bits to be placed earlier than immediately preceding the
10054instruction that triggered the stop bit.  This can improve instruction
10055scheduling, but does not always do so.
10056@end table
10057
10058@node D30V Options
10059@subsection D30V Options
10060@cindex D30V Options
10061
10062These @samp{-m} options are defined for D30V implementations:
10063
10064@table @gcctabopt
10065@item -mextmem
10066@opindex mextmem
10067Link the @samp{.text}, @samp{.data}, @samp{.bss}, @samp{.strings},
10068@samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections into external
10069memory, which starts at location @code{0x80000000}.
10070
10071@item -mextmemory
10072@opindex mextmemory
10073Same as the @option{-mextmem} switch.
10074
10075@item -monchip
10076@opindex monchip
10077Link the @samp{.text} section into onchip text memory, which starts at
10078location @code{0x0}.  Also link @samp{.data}, @samp{.bss},
10079@samp{.strings}, @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections
10080into onchip data memory, which starts at location @code{0x20000000}.
10081
10082@item -mno-asm-optimize
10083@itemx -masm-optimize
10084@opindex mno-asm-optimize
10085@opindex masm-optimize
10086Disable (enable) passing @option{-O} to the assembler when optimizing.
10087The assembler uses the @option{-O} option to automatically parallelize
10088adjacent short instructions where possible.
10089
10090@item -mbranch-cost=@var{n}
10091@opindex mbranch-cost
10092Increase the internal costs of branches to @var{n}.  Higher costs means
10093that the compiler will issue more instructions to avoid doing a branch.
10094The default is 2.
10095
10096@item -mcond-exec=@var{n}
10097@opindex mcond-exec
10098Specify the maximum number of conditionally executed instructions that
10099replace a branch.  The default is 4.
10100@end table
10101
10102@node S/390 and zSeries Options
10103@subsection S/390 and zSeries Options
10104@cindex S/390 and zSeries Options
10105
10106These are the @samp{-m} options defined for the S/390 and zSeries architecture.
10107
10108@table @gcctabopt
10109@item -mhard-float
10110@itemx -msoft-float
10111@opindex mhard-float
10112@opindex msoft-float
10113Use (do not use) the hardware floating-point instructions and registers
10114for floating-point operations.  When @option{-msoft-float} is specified,
10115functions in @file{libgcc.a} will be used to perform floating-point
10116operations.  When @option{-mhard-float} is specified, the compiler
10117generates IEEE floating-point instructions.  This is the default.
10118
10119@item -mbackchain
10120@itemx -mno-backchain
10121@opindex mbackchain
10122@opindex mno-backchain
10123Generate (or do not generate) code which maintains an explicit
10124backchain within the stack frame that points to the caller's frame.
10125This may be needed to allow debugging using tools that do not understand
10126DWARF-2 call frame information.  The default is not to generate the
10127backchain.
10128
10129@item -msmall-exec
10130@itemx -mno-small-exec
10131@opindex msmall-exec
10132@opindex mno-small-exec
10133Generate (or do not generate) code using the @code{bras} instruction
10134to do subroutine calls.
10135This only works reliably if the total executable size does not
10136exceed 64k.  The default is to use the @code{basr} instruction instead,
10137which does not have this limitation.
10138
10139@item -m64
10140@itemx -m31
10141@opindex m64
10142@opindex m31
10143When @option{-m31} is specified, generate code compliant to the
10144GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
10145code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
10146particular to generate 64-bit instructions.  For the @samp{s390}
10147targets, the default is @option{-m31}, while the @samp{s390x}
10148targets default to @option{-m64}.
10149
10150@item -mzarch
10151@itemx -mesa
10152@opindex mzarch
10153@opindex mesa
10154When @option{-mzarch} is specified, generate code using the
10155instructions available on z/Architecture.
10156When @option{-mesa} is specified, generate code using the
10157instructions available on ESA/390. Note that @option{-mesa} is
10158not possible with @option{-m64}.
10159When generating code compliant to the GNU/Linux for S/390 ABI,
10160the default is @option{-mesa}.  When generating code compliant
10161to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
10162
10163@item -mmvcle
10164@itemx -mno-mvcle
10165@opindex mmvcle
10166@opindex mno-mvcle
10167Generate (or do not generate) code using the @code{mvcle} instruction
10168to perform block moves.  When @option{-mno-mvcle} is specified,
10169use a @code{mvc} loop instead.  This is the default.
10170
10171@item -mdebug
10172@itemx -mno-debug
10173@opindex mdebug
10174@opindex mno-debug
10175Print (or do not print) additional debug information when compiling.
10176The default is to not print debug information.
10177
10178@item -march=@var{cpu-type}
10179@opindex march
10180Generate code that will run on @var{cpu-type}, which is the name of a system
10181representing a certain processor type. Possible values for
10182@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}.
10183When generating code using the instructions available on z/Architecture,
10184the default is @option{-march=z900}.  Otherwise, the default is
10185@option{-march=g5}.
10186
10187@item -mtune=@var{cpu-type}
10188@opindex mtune
10189Tune to @var{cpu-type} everything applicable about the generated code,
10190except for the ABI and the set of available instructions.
10191The list of @var{cpu-type} values is the same as for @option{-march}.
10192The default is the value used for @option{-march}.
10193
10194@item -mfused-madd
10195@itemx -mno-fused-madd
10196@opindex mfused-madd
10197@opindex mno-fused-madd
10198Generate code that uses (does not use) the floating point multiply and
10199accumulate instructions.  These instructions are generated by default if
10200hardware floating point is used.
10201@end table
10202
10203@node CRIS Options
10204@subsection CRIS Options
10205@cindex CRIS Options
10206
10207These options are defined specifically for the CRIS ports.
10208
10209@table @gcctabopt
10210@item -march=@var{architecture-type}
10211@itemx -mcpu=@var{architecture-type}
10212@opindex march
10213@opindex mcpu
10214Generate code for the specified architecture.  The choices for
10215@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
10216respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX.
10217Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
10218@samp{v10}.
10219
10220@item -mtune=@var{architecture-type}
10221@opindex mtune
10222Tune to @var{architecture-type} everything applicable about the generated
10223code, except for the ABI and the set of available instructions.  The
10224choices for @var{architecture-type} are the same as for
10225@option{-march=@var{architecture-type}}.
10226
10227@item -mmax-stack-frame=@var{n}
10228@opindex mmax-stack-frame
10229Warn when the stack frame of a function exceeds @var{n} bytes.
10230
10231@item -melinux-stacksize=@var{n}
10232@opindex melinux-stacksize
10233Only available with the @samp{cris-axis-aout} target.  Arranges for
10234indications in the program to the kernel loader that the stack of the
10235program should be set to @var{n} bytes.
10236
10237@item -metrax4
10238@itemx -metrax100
10239@opindex metrax4
10240@opindex metrax100
10241The options @option{-metrax4} and @option{-metrax100} are synonyms for
10242@option{-march=v3} and @option{-march=v8} respectively.
10243
10244@item -mmul-bug-workaround
10245@itemx -mno-mul-bug-workaround
10246@opindex mmul-bug-workaround
10247@opindex mno-mul-bug-workaround
10248Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
10249models where it applies.  This option is active by default.
10250
10251@item -mpdebug
10252@opindex mpdebug
10253Enable CRIS-specific verbose debug-related information in the assembly
10254code.  This option also has the effect to turn off the @samp{#NO_APP}
10255formatted-code indicator to the assembler at the beginning of the
10256assembly file.
10257
10258@item -mcc-init
10259@opindex mcc-init
10260Do not use condition-code results from previous instruction; always emit
10261compare and test instructions before use of condition codes.
10262
10263@item -mno-side-effects
10264@opindex mno-side-effects
10265Do not emit instructions with side-effects in addressing modes other than
10266post-increment.
10267
10268@item -mstack-align
10269@itemx -mno-stack-align
10270@itemx -mdata-align
10271@itemx -mno-data-align
10272@itemx -mconst-align
10273@itemx -mno-const-align
10274@opindex mstack-align
10275@opindex mno-stack-align
10276@opindex mdata-align
10277@opindex mno-data-align
10278@opindex mconst-align
10279@opindex mno-const-align
10280These options (no-options) arranges (eliminate arrangements) for the
10281stack-frame, individual data and constants to be aligned for the maximum
10282single data access size for the chosen CPU model.  The default is to
10283arrange for 32-bit alignment.  ABI details such as structure layout are
10284not affected by these options.
10285
10286@item -m32-bit
10287@itemx -m16-bit
10288@itemx -m8-bit
10289@opindex m32-bit
10290@opindex m16-bit
10291@opindex m8-bit
10292Similar to the stack- data- and const-align options above, these options
10293arrange for stack-frame, writable data and constants to all be 32-bit,
1029416-bit or 8-bit aligned.  The default is 32-bit alignment.
10295
10296@item -mno-prologue-epilogue
10297@itemx -mprologue-epilogue
10298@opindex mno-prologue-epilogue
10299@opindex mprologue-epilogue
10300With @option{-mno-prologue-epilogue}, the normal function prologue and
10301epilogue that sets up the stack-frame are omitted and no return
10302instructions or return sequences are generated in the code.  Use this
10303option only together with visual inspection of the compiled code: no
10304warnings or errors are generated when call-saved registers must be saved,
10305or storage for local variable needs to be allocated.
10306
10307@item -mno-gotplt
10308@itemx -mgotplt
10309@opindex mno-gotplt
10310@opindex mgotplt
10311With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
10312instruction sequences that load addresses for functions from the PLT part
10313of the GOT rather than (traditional on other architectures) calls to the
10314PLT.  The default is @option{-mgotplt}.
10315
10316@item -maout
10317@opindex maout
10318Legacy no-op option only recognized with the cris-axis-aout target.
10319
10320@item -melf
10321@opindex melf
10322Legacy no-op option only recognized with the cris-axis-elf and
10323cris-axis-linux-gnu targets.
10324
10325@item -melinux
10326@opindex melinux
10327Only recognized with the cris-axis-aout target, where it selects a
10328GNU/linux-like multilib, include files and instruction set for
10329@option{-march=v8}.
10330
10331@item -mlinux
10332@opindex mlinux
10333Legacy no-op option only recognized with the cris-axis-linux-gnu target.
10334
10335@item -sim
10336@opindex sim
10337This option, recognized for the cris-axis-aout and cris-axis-elf arranges
10338to link with input-output functions from a simulator library.  Code,
10339initialized data and zero-initialized data are allocated consecutively.
10340
10341@item -sim2
10342@opindex sim2
10343Like @option{-sim}, but pass linker options to locate initialized data at
103440x40000000 and zero-initialized data at 0x80000000.
10345@end table
10346
10347@node MMIX Options
10348@subsection MMIX Options
10349@cindex MMIX Options
10350
10351These options are defined for the MMIX:
10352
10353@table @gcctabopt
10354@item -mlibfuncs
10355@itemx -mno-libfuncs
10356@opindex mlibfuncs
10357@opindex mno-libfuncs
10358Specify that intrinsic library functions are being compiled, passing all
10359values in registers, no matter the size.
10360
10361@item -mepsilon
10362@itemx -mno-epsilon
10363@opindex mepsilon
10364@opindex mno-epsilon
10365Generate floating-point comparison instructions that compare with respect
10366to the @code{rE} epsilon register.
10367
10368@item -mabi=mmixware
10369@itemx -mabi=gnu
10370@opindex mabi-mmixware
10371@opindex mabi=gnu
10372Generate code that passes function parameters and return values that (in
10373the called function) are seen as registers @code{$0} and up, as opposed to
10374the GNU ABI which uses global registers @code{$231} and up.
10375
10376@item -mzero-extend
10377@itemx -mno-zero-extend
10378@opindex mzero-extend
10379@opindex mno-zero-extend
10380When reading data from memory in sizes shorter than 64 bits, use (do not
10381use) zero-extending load instructions by default, rather than
10382sign-extending ones.
10383
10384@item -mknuthdiv
10385@itemx -mno-knuthdiv
10386@opindex mknuthdiv
10387@opindex mno-knuthdiv
10388Make the result of a division yielding a remainder have the same sign as
10389the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
10390remainder follows the sign of the dividend.  Both methods are
10391arithmetically valid, the latter being almost exclusively used.
10392
10393@item -mtoplevel-symbols
10394@itemx -mno-toplevel-symbols
10395@opindex mtoplevel-symbols
10396@opindex mno-toplevel-symbols
10397Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
10398code can be used with the @code{PREFIX} assembly directive.
10399
10400@item -melf
10401@opindex melf
10402Generate an executable in the ELF format, rather than the default
10403@samp{mmo} format used by the @command{mmix} simulator.
10404
10405@item -mbranch-predict
10406@itemx -mno-branch-predict
10407@opindex mbranch-predict
10408@opindex mno-branch-predict
10409Use (do not use) the probable-branch instructions, when static branch
10410prediction indicates a probable branch.
10411
10412@item -mbase-addresses
10413@itemx -mno-base-addresses
10414@opindex mbase-addresses
10415@opindex mno-base-addresses
10416Generate (do not generate) code that uses @emph{base addresses}.  Using a
10417base address automatically generates a request (handled by the assembler
10418and the linker) for a constant to be set up in a global register.  The
10419register is used for one or more base address requests within the range 0
10420to 255 from the value held in the register.  The generally leads to short
10421and fast code, but the number of different data items that can be
10422addressed is limited.  This means that a program that uses lots of static
10423data may require @option{-mno-base-addresses}.
10424
10425@item -msingle-exit
10426@itemx -mno-single-exit
10427@opindex msingle-exit
10428@opindex mno-single-exit
10429Force (do not force) generated code to have a single exit point in each
10430function.
10431@end table
10432
10433@node PDP-11 Options
10434@subsection PDP-11 Options
10435@cindex PDP-11 Options
10436
10437These options are defined for the PDP-11:
10438
10439@table @gcctabopt
10440@item -mfpu
10441@opindex mfpu
10442Use hardware FPP floating point.  This is the default.  (FIS floating
10443point on the PDP-11/40 is not supported.)
10444
10445@item -msoft-float
10446@opindex msoft-float
10447Do not use hardware floating point.
10448
10449@item -mac0
10450@opindex mac0
10451Return floating-point results in ac0 (fr0 in Unix assembler syntax).
10452
10453@item -mno-ac0
10454@opindex mno-ac0
10455Return floating-point results in memory.  This is the default.
10456
10457@item -m40
10458@opindex m40
10459Generate code for a PDP-11/40.
10460
10461@item -m45
10462@opindex m45
10463Generate code for a PDP-11/45.  This is the default.
10464
10465@item -m10
10466@opindex m10
10467Generate code for a PDP-11/10.
10468
10469@item -mbcopy-builtin
10470@opindex bcopy-builtin
10471Use inline @code{movstrhi} patterns for copying memory.  This is the
10472default.
10473
10474@item -mbcopy
10475@opindex mbcopy
10476Do not use inline @code{movstrhi} patterns for copying memory.
10477
10478@item -mint16
10479@itemx -mno-int32
10480@opindex mint16
10481@opindex mno-int32
10482Use 16-bit @code{int}.  This is the default.
10483
10484@item -mint32
10485@itemx -mno-int16
10486@opindex mint32
10487@opindex mno-int16
10488Use 32-bit @code{int}.
10489
10490@item -mfloat64
10491@itemx -mno-float32
10492@opindex mfloat64
10493@opindex mno-float32
10494Use 64-bit @code{float}.  This is the default.
10495
10496@item -mfloat32
10497@itemx -mno-float64
10498@opindex mfloat32
10499@opindex mno-float64
10500Use 32-bit @code{float}.
10501
10502@item -mabshi
10503@opindex mabshi
10504Use @code{abshi2} pattern.  This is the default.
10505
10506@item -mno-abshi
10507@opindex mno-abshi
10508Do not use @code{abshi2} pattern.
10509
10510@item -mbranch-expensive
10511@opindex mbranch-expensive
10512Pretend that branches are expensive.  This is for experimenting with
10513code generation only.
10514
10515@item -mbranch-cheap
10516@opindex mbranch-cheap
10517Do not pretend that branches are expensive.  This is the default.
10518
10519@item -msplit
10520@opindex msplit
10521Generate code for a system with split I&D.
10522
10523@item -mno-split
10524@opindex mno-split
10525Generate code for a system without split I&D.  This is the default.
10526
10527@item -munix-asm
10528@opindex munix-asm
10529Use Unix assembler syntax.  This is the default when configured for
10530@samp{pdp11-*-bsd}.
10531
10532@item -mdec-asm
10533@opindex mdec-asm
10534Use DEC assembler syntax.  This is the default when configured for any
10535PDP-11 target other than @samp{pdp11-*-bsd}.
10536@end table
10537
10538@node Xstormy16 Options
10539@subsection Xstormy16 Options
10540@cindex Xstormy16 Options
10541
10542These options are defined for Xstormy16:
10543
10544@table @gcctabopt
10545@item -msim
10546@opindex msim
10547Choose startup files and linker script suitable for the simulator.
10548@end table
10549
10550@node FRV Options
10551@subsection FRV Options
10552@cindex FRV Options
10553
10554@table @gcctabopt
10555@item -mgpr-32
10556@opindex mgpr-32
10557
10558Only use the first 32 general purpose registers.
10559
10560@item -mgpr-64
10561@opindex mgpr-64
10562
10563Use all 64 general purpose registers.
10564
10565@item -mfpr-32
10566@opindex mfpr-32
10567
10568Use only the first 32 floating point registers.
10569
10570@item -mfpr-64
10571@opindex mfpr-64
10572
10573Use all 64 floating point registers
10574
10575@item -mhard-float
10576@opindex mhard-float
10577
10578Use hardware instructions for floating point operations.
10579
10580@item -msoft-float
10581@opindex msoft-float
10582
10583Use library routines for floating point operations.
10584
10585@item -malloc-cc
10586@opindex malloc-cc
10587
10588Dynamically allocate condition code registers.
10589
10590@item -mfixed-cc
10591@opindex mfixed-cc
10592
10593Do not try to dynamically allocate condition code registers, only
10594use @code{icc0} and @code{fcc0}.
10595
10596@item -mdword
10597@opindex mdword
10598
10599Change ABI to use double word insns.
10600
10601@item -mno-dword
10602@opindex mno-dword
10603
10604Do not use double word instructions.
10605
10606@item -mdouble
10607@opindex mdouble
10608
10609Use floating point double instructions.
10610
10611@item -mno-double
10612@opindex mno-double
10613
10614Do not use floating point double instructions.
10615
10616@item -mmedia
10617@opindex mmedia
10618
10619Use media instructions.
10620
10621@item -mno-media
10622@opindex mno-media
10623
10624Do not use media instructions.
10625
10626@item -mmuladd
10627@opindex mmuladd
10628
10629Use multiply and add/subtract instructions.
10630
10631@item -mno-muladd
10632@opindex mno-muladd
10633
10634Do not use multiply and add/subtract instructions.
10635
10636@item -mlibrary-pic
10637@opindex mlibrary-pic
10638
10639Enable PIC support for building libraries
10640
10641@item -macc-4
10642@opindex macc-4
10643
10644Use only the first four media accumulator registers.
10645
10646@item -macc-8
10647@opindex macc-8
10648
10649Use all eight media accumulator registers.
10650
10651@item -mpack
10652@opindex mpack
10653
10654Pack VLIW instructions.
10655
10656@item -mno-pack
10657@opindex mno-pack
10658
10659Do not pack VLIW instructions.
10660
10661@item -mno-eflags
10662@opindex mno-eflags
10663
10664Do not mark ABI switches in e_flags.
10665
10666@item -mcond-move
10667@opindex mcond-move
10668
10669Enable the use of conditional-move instructions (default).
10670
10671This switch is mainly for debugging the compiler and will likely be removed
10672in a future version.
10673
10674@item -mno-cond-move
10675@opindex mno-cond-move
10676
10677Disable the use of conditional-move instructions.
10678
10679This switch is mainly for debugging the compiler and will likely be removed
10680in a future version.
10681
10682@item -mscc
10683@opindex mscc
10684
10685Enable the use of conditional set instructions (default).
10686
10687This switch is mainly for debugging the compiler and will likely be removed
10688in a future version.
10689
10690@item -mno-scc
10691@opindex mno-scc
10692
10693Disable the use of conditional set instructions.
10694
10695This switch is mainly for debugging the compiler and will likely be removed
10696in a future version.
10697
10698@item -mcond-exec
10699@opindex mcond-exec
10700
10701Enable the use of conditional execution (default).
10702
10703This switch is mainly for debugging the compiler and will likely be removed
10704in a future version.
10705
10706@item -mno-cond-exec
10707@opindex mno-cond-exec
10708
10709Disable the use of conditional execution.
10710
10711This switch is mainly for debugging the compiler and will likely be removed
10712in a future version.
10713
10714@item -mvliw-branch
10715@opindex mvliw-branch
10716
10717Run a pass to pack branches into VLIW instructions (default).
10718
10719This switch is mainly for debugging the compiler and will likely be removed
10720in a future version.
10721
10722@item -mno-vliw-branch
10723@opindex mno-vliw-branch
10724
10725Do not run a pass to pack branches into VLIW instructions.
10726
10727This switch is mainly for debugging the compiler and will likely be removed
10728in a future version.
10729
10730@item -mmulti-cond-exec
10731@opindex mmulti-cond-exec
10732
10733Enable optimization of @code{&&} and @code{||} in conditional execution
10734(default).
10735
10736This switch is mainly for debugging the compiler and will likely be removed
10737in a future version.
10738
10739@item -mno-multi-cond-exec
10740@opindex mno-multi-cond-exec
10741
10742Disable optimization of @code{&&} and @code{||} in conditional execution.
10743
10744This switch is mainly for debugging the compiler and will likely be removed
10745in a future version.
10746
10747@item -mnested-cond-exec
10748@opindex mnested-cond-exec
10749
10750Enable nested conditional execution optimizations (default).
10751
10752This switch is mainly for debugging the compiler and will likely be removed
10753in a future version.
10754
10755@item -mno-nested-cond-exec
10756@opindex mno-nested-cond-exec
10757
10758Disable nested conditional execution optimizations.
10759
10760This switch is mainly for debugging the compiler and will likely be removed
10761in a future version.
10762
10763@item -mtomcat-stats
10764@opindex mtomcat-stats
10765
10766Cause gas to print out tomcat statistics.
10767
10768@item -mcpu=@var{cpu}
10769@opindex mcpu
10770
10771Select the processor type for which to generate code.  Possible values are
10772@samp{simple}, @samp{tomcat}, @samp{fr500}, @samp{fr400}, @samp{fr300},
10773@samp{frv}.
10774
10775@end table
10776
10777@node Xtensa Options
10778@subsection Xtensa Options
10779@cindex Xtensa Options
10780
10781These options are supported for Xtensa targets:
10782
10783@table @gcctabopt
10784@item -mconst16
10785@itemx -mno-const16
10786@opindex mconst16
10787@opindex mno-const16
10788Enable or disable use of @code{CONST16} instructions for loading
10789constant values.  The @code{CONST16} instruction is currently not a
10790standard option from Tensilica.  When enabled, @code{CONST16}
10791instructions are always used in place of the standard @code{L32R}
10792instructions.  The use of @code{CONST16} is enabled by default only if
10793the @code{L32R} instruction is not available.
10794
10795@item -mfused-madd
10796@itemx -mno-fused-madd
10797@opindex mfused-madd
10798@opindex mno-fused-madd
10799Enable or disable use of fused multiply/add and multiply/subtract
10800instructions in the floating-point option.  This has no effect if the
10801floating-point option is not also enabled.  Disabling fused multiply/add
10802and multiply/subtract instructions forces the compiler to use separate
10803instructions for the multiply and add/subtract operations.  This may be
10804desirable in some cases where strict IEEE 754-compliant results are
10805required: the fused multiply add/subtract instructions do not round the
10806intermediate result, thereby producing results with @emph{more} bits of
10807precision than specified by the IEEE standard.  Disabling fused multiply
10808add/subtract instructions also ensures that the program output is not
10809sensitive to the compiler's ability to combine multiply and add/subtract
10810operations.
10811
10812@item -mtext-section-literals
10813@itemx -mno-text-section-literals
10814@opindex mtext-section-literals
10815@opindex mno-text-section-literals
10816Control the treatment of literal pools.  The default is
10817@option{-mno-text-section-literals}, which places literals in a separate
10818section in the output file.  This allows the literal pool to be placed
10819in a data RAM/ROM, and it also allows the linker to combine literal
10820pools from separate object files to remove redundant literals and
10821improve code size.  With @option{-mtext-section-literals}, the literals
10822are interspersed in the text section in order to keep them as close as
10823possible to their references.  This may be necessary for large assembly
10824files.
10825
10826@item -mtarget-align
10827@itemx -mno-target-align
10828@opindex mtarget-align
10829@opindex mno-target-align
10830When this option is enabled, GCC instructs the assembler to
10831automatically align instructions to reduce branch penalties at the
10832expense of some code density.  The assembler attempts to widen density
10833instructions to align branch targets and the instructions following call
10834instructions.  If there are not enough preceding safe density
10835instructions to align a target, no widening will be performed.  The
10836default is @option{-mtarget-align}.  These options do not affect the
10837treatment of auto-aligned instructions like @code{LOOP}, which the
10838assembler will always align, either by widening density instructions or
10839by inserting no-op instructions.
10840
10841@item -mlongcalls
10842@itemx -mno-longcalls
10843@opindex mlongcalls
10844@opindex mno-longcalls
10845When this option is enabled, GCC instructs the assembler to translate
10846direct calls to indirect calls unless it can determine that the target
10847of a direct call is in the range allowed by the call instruction.  This
10848translation typically occurs for calls to functions in other source
10849files.  Specifically, the assembler translates a direct @code{CALL}
10850instruction into an @code{L32R} followed by a @code{CALLX} instruction.
10851The default is @option{-mno-longcalls}.  This option should be used in
10852programs where the call target can potentially be out of range.  This
10853option is implemented in the assembler, not the compiler, so the
10854assembly code generated by GCC will still show direct call
10855instructions---look at the disassembled object code to see the actual
10856instructions.  Note that the assembler will use an indirect call for
10857every cross-file call, not just those that really will be out of range.
10858@end table
10859
10860@node Code Gen Options
10861@section Options for Code Generation Conventions
10862@cindex code generation conventions
10863@cindex options, code generation
10864@cindex run-time options
10865
10866These machine-independent options control the interface conventions
10867used in code generation.
10868
10869Most of them have both positive and negative forms; the negative form
10870of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
10871one of the forms is listed---the one which is not the default.  You
10872can figure out the other form by either removing @samp{no-} or adding
10873it.
10874
10875@table @gcctabopt
10876@item -fbounds-check
10877@opindex fbounds-check
10878For front-ends that support it, generate additional code to check that
10879indices used to access arrays are within the declared range.  This is
10880currently only supported by the Java and Fortran 77 front-ends, where
10881this option defaults to true and false respectively.
10882
10883@item -ftrapv
10884@opindex ftrapv
10885This option generates traps for signed overflow on addition, subtraction,
10886multiplication operations.
10887
10888@item -fwrapv
10889@opindex fwrapv
10890This option instructs the compiler to assume that signed arithmetic
10891overflow of addition, subtraction and multiplication wraps around
10892using twos-complement representation.  This flag enables some optimizations
10893and disables other.  This option is enabled by default for the Java
10894front-end, as required by the Java language specification.
10895
10896@item -fexceptions
10897@opindex fexceptions
10898Enable exception handling.  Generates extra code needed to propagate
10899exceptions.  For some targets, this implies GCC will generate frame
10900unwind information for all functions, which can produce significant data
10901size overhead, although it does not affect execution.  If you do not
10902specify this option, GCC will enable it by default for languages like
10903C++ which normally require exception handling, and disable it for
10904languages like C that do not normally require it.  However, you may need
10905to enable this option when compiling C code that needs to interoperate
10906properly with exception handlers written in C++.  You may also wish to
10907disable this option if you are compiling older C++ programs that don't
10908use exception handling.
10909
10910@item -fnon-call-exceptions
10911@opindex fnon-call-exceptions
10912Generate code that allows trapping instructions to throw exceptions.
10913Note that this requires platform-specific runtime support that does
10914not exist everywhere.  Moreover, it only allows @emph{trapping}
10915instructions to throw exceptions, i.e.@: memory references or floating
10916point instructions.  It does not allow exceptions to be thrown from
10917arbitrary signal handlers such as @code{SIGALRM}.
10918
10919@item -funwind-tables
10920@opindex funwind-tables
10921Similar to @option{-fexceptions}, except that it will just generate any needed
10922static data, but will not affect the generated code in any other way.
10923You will normally not enable this option; instead, a language processor
10924that needs this handling would enable it on your behalf.
10925
10926@item -fasynchronous-unwind-tables
10927@opindex funwind-tables
10928Generate unwind table in dwarf2 format, if supported by target machine.  The
10929table is exact at each instruction boundary, so it can be used for stack
10930unwinding from asynchronous events (such as debugger or garbage collector).
10931
10932@item -fpcc-struct-return
10933@opindex fpcc-struct-return
10934Return ``short'' @code{struct} and @code{union} values in memory like
10935longer ones, rather than in registers.  This convention is less
10936efficient, but it has the advantage of allowing intercallability between
10937GCC-compiled files and files compiled with other compilers, particularly
10938the Portable C Compiler (pcc).
10939
10940The precise convention for returning structures in memory depends
10941on the target configuration macros.
10942
10943Short structures and unions are those whose size and alignment match
10944that of some integer type.
10945
10946@strong{Warning:} code compiled with the @option{-fpcc-struct-return}
10947switch is not binary compatible with code compiled with the
10948@option{-freg-struct-return} switch.
10949Use it to conform to a non-default application binary interface.
10950
10951@item -freg-struct-return
10952@opindex freg-struct-return
10953Return @code{struct} and @code{union} values in registers when possible.
10954This is more efficient for small structures than
10955@option{-fpcc-struct-return}.
10956
10957If you specify neither @option{-fpcc-struct-return} nor
10958@option{-freg-struct-return}, GCC defaults to whichever convention is
10959standard for the target.  If there is no standard convention, GCC
10960defaults to @option{-fpcc-struct-return}, except on targets where GCC is
10961the principal compiler.  In those cases, we can choose the standard, and
10962we chose the more efficient register return alternative.
10963
10964@strong{Warning:} code compiled with the @option{-freg-struct-return}
10965switch is not binary compatible with code compiled with the
10966@option{-fpcc-struct-return} switch.
10967Use it to conform to a non-default application binary interface.
10968
10969@item -fshort-enums
10970@opindex fshort-enums
10971Allocate to an @code{enum} type only as many bytes as it needs for the
10972declared range of possible values.  Specifically, the @code{enum} type
10973will be equivalent to the smallest integer type which has enough room.
10974
10975@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
10976code that is not binary compatible with code generated without that switch.
10977Use it to conform to a non-default application binary interface.
10978
10979@item -fshort-double
10980@opindex fshort-double
10981Use the same size for @code{double} as for @code{float}.
10982
10983@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
10984code that is not binary compatible with code generated without that switch.
10985Use it to conform to a non-default application binary interface.
10986
10987@item -fshort-wchar
10988@opindex fshort-wchar
10989Override the underlying type for @samp{wchar_t} to be @samp{short
10990unsigned int} instead of the default for the target.  This option is
10991useful for building programs to run under WINE@.
10992
10993@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
10994code that is not binary compatible with code generated without that switch.
10995Use it to conform to a non-default application binary interface.
10996
10997@item -fshared-data
10998@opindex fshared-data
10999Requests that the data and non-@code{const} variables of this
11000compilation be shared data rather than private data.  The distinction
11001makes sense only on certain operating systems, where shared data is
11002shared between processes running the same program, while private data
11003exists in one copy per process.
11004
11005@item -fno-common
11006@opindex fno-common
11007In C, allocate even uninitialized global variables in the data section of the
11008object file, rather than generating them as common blocks.  This has the
11009effect that if the same variable is declared (without @code{extern}) in
11010two different compilations, you will get an error when you link them.
11011The only reason this might be useful is if you wish to verify that the
11012program will work on other systems which always work this way.
11013
11014@item -fno-ident
11015@opindex fno-ident
11016Ignore the @samp{#ident} directive.
11017
11018@item -finhibit-size-directive
11019@opindex finhibit-size-directive
11020Don't output a @code{.size} assembler directive, or anything else that
11021would cause trouble if the function is split in the middle, and the
11022two halves are placed at locations far apart in memory.  This option is
11023used when compiling @file{crtstuff.c}; you should not need to use it
11024for anything else.
11025
11026@item -fverbose-asm
11027@opindex fverbose-asm
11028Put extra commentary information in the generated assembly code to
11029make it more readable.  This option is generally only of use to those
11030who actually need to read the generated assembly code (perhaps while
11031debugging the compiler itself).
11032
11033@option{-fno-verbose-asm}, the default, causes the
11034extra information to be omitted and is useful when comparing two assembler
11035files.
11036
11037@item -fpic
11038@opindex fpic
11039@cindex global offset table
11040@cindex PIC
11041Generate position-independent code (PIC) suitable for use in a shared
11042library, if supported for the target machine.  Such code accesses all
11043constant addresses through a global offset table (GOT)@.  The dynamic
11044loader resolves the GOT entries when the program starts (the dynamic
11045loader is not part of GCC; it is part of the operating system).  If
11046the GOT size for the linked executable exceeds a machine-specific
11047maximum size, you get an error message from the linker indicating that
11048@option{-fpic} does not work; in that case, recompile with @option{-fPIC}
11049instead.  (These maximums are 8k on the SPARC and 32k
11050on the m68k and RS/6000.  The 386 has no such limit.)
11051
11052Position-independent code requires special support, and therefore works
11053only on certain machines.  For the 386, GCC supports PIC for System V
11054but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
11055position-independent.
11056
11057@item -fPIC
11058@opindex fPIC
11059If supported for the target machine, emit position-independent code,
11060suitable for dynamic linking and avoiding any limit on the size of the
11061global offset table.  This option makes a difference on the m68k
11062and the SPARC.
11063
11064Position-independent code requires special support, and therefore works
11065only on certain machines.
11066
11067@item -fpie
11068@itemx -fPIE
11069@opindex fpie
11070@opindex fPIE
11071These options are similar to @option{-fpic} and @option{-fPIC}, but
11072generated position independent code can be only linked into executables.
11073Usually these options are used when @option{-pie} GCC option will be
11074used during linking.
11075
11076@item -ffixed-@var{reg}
11077@opindex ffixed
11078Treat the register named @var{reg} as a fixed register; generated code
11079should never refer to it (except perhaps as a stack pointer, frame
11080pointer or in some other fixed role).
11081
11082@var{reg} must be the name of a register.  The register names accepted
11083are machine-specific and are defined in the @code{REGISTER_NAMES}
11084macro in the machine description macro file.
11085
11086This flag does not have a negative form, because it specifies a
11087three-way choice.
11088
11089@item -fcall-used-@var{reg}
11090@opindex fcall-used
11091Treat the register named @var{reg} as an allocable register that is
11092clobbered by function calls.  It may be allocated for temporaries or
11093variables that do not live across a call.  Functions compiled this way
11094will not save and restore the register @var{reg}.
11095
11096It is an error to used this flag with the frame pointer or stack pointer.
11097Use of this flag for other registers that have fixed pervasive roles in
11098the machine's execution model will produce disastrous results.
11099
11100This flag does not have a negative form, because it specifies a
11101three-way choice.
11102
11103@item -fcall-saved-@var{reg}
11104@opindex fcall-saved
11105Treat the register named @var{reg} as an allocable register saved by
11106functions.  It may be allocated even for temporaries or variables that
11107live across a call.  Functions compiled this way will save and restore
11108the register @var{reg} if they use it.
11109
11110It is an error to used this flag with the frame pointer or stack pointer.
11111Use of this flag for other registers that have fixed pervasive roles in
11112the machine's execution model will produce disastrous results.
11113
11114A different sort of disaster will result from the use of this flag for
11115a register in which function values may be returned.
11116
11117This flag does not have a negative form, because it specifies a
11118three-way choice.
11119
11120@item -fpack-struct
11121@opindex fpack-struct
11122Pack all structure members together without holes.
11123
11124@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
11125code that is not binary compatible with code generated without that switch.
11126Additionally, it makes the code suboptimal.
11127Use it to conform to a non-default application binary interface.
11128
11129@item -finstrument-functions
11130@opindex finstrument-functions
11131Generate instrumentation calls for entry and exit to functions.  Just
11132after function entry and just before function exit, the following
11133profiling functions will be called with the address of the current
11134function and its call site.  (On some platforms,
11135@code{__builtin_return_address} does not work beyond the current
11136function, so the call site information may not be available to the
11137profiling functions otherwise.)
11138
11139@smallexample
11140void __cyg_profile_func_enter (void *this_fn,
11141                               void *call_site);
11142void __cyg_profile_func_exit  (void *this_fn,
11143                               void *call_site);
11144@end smallexample
11145
11146The first argument is the address of the start of the current function,
11147which may be looked up exactly in the symbol table.
11148
11149This currently disables function inlining.  This restriction is
11150expected to be removed in future releases.
11151
11152A function may be given the attribute @code{no_instrument_function}, in
11153which case this instrumentation will not be done.  This can be used, for
11154example, for the profiling functions listed above, high-priority
11155interrupt routines, and any functions from which the profiling functions
11156cannot safely be called (perhaps signal handlers, if the profiling
11157routines generate output or allocate memory).
11158
11159@item -fstack-check
11160@opindex fstack-check
11161Generate code to verify that you do not go beyond the boundary of the
11162stack.  You should specify this flag if you are running in an
11163environment with multiple threads, but only rarely need to specify it in
11164a single-threaded environment since stack overflow is automatically
11165detected on nearly all systems if there is only one stack.
11166
11167Note that this switch does not actually cause checking to be done; the
11168operating system must do that.  The switch causes generation of code
11169to ensure that the operating system sees the stack being extended.
11170
11171@item -fstack-limit-register=@var{reg}
11172@itemx -fstack-limit-symbol=@var{sym}
11173@itemx -fno-stack-limit
11174@opindex fstack-limit-register
11175@opindex fstack-limit-symbol
11176@opindex fno-stack-limit
11177Generate code to ensure that the stack does not grow beyond a certain value,
11178either the value of a register or the address of a symbol.  If the stack
11179would grow beyond the value, a signal is raised.  For most targets,
11180the signal is raised before the stack overruns the boundary, so
11181it is possible to catch the signal without taking special precautions.
11182
11183For instance, if the stack starts at absolute address @samp{0x80000000}
11184and grows downwards, you can use the flags
11185@option{-fstack-limit-symbol=__stack_limit} and
11186@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
11187of 128KB@.  Note that this may only work with the GNU linker.
11188
11189@cindex aliasing of parameters
11190@cindex parameters, aliased
11191@item -fargument-alias
11192@itemx -fargument-noalias
11193@itemx -fargument-noalias-global
11194@opindex fargument-alias
11195@opindex fargument-noalias
11196@opindex fargument-noalias-global
11197Specify the possible relationships among parameters and between
11198parameters and global data.
11199
11200@option{-fargument-alias} specifies that arguments (parameters) may
11201alias each other and may alias global storage.@*
11202@option{-fargument-noalias} specifies that arguments do not alias
11203each other, but may alias global storage.@*
11204@option{-fargument-noalias-global} specifies that arguments do not
11205alias each other and do not alias global storage.
11206
11207Each language will automatically use whatever option is required by
11208the language standard.  You should not need to use these options yourself.
11209
11210@item -fleading-underscore
11211@opindex fleading-underscore
11212This option and its counterpart, @option{-fno-leading-underscore}, forcibly
11213change the way C symbols are represented in the object file.  One use
11214is to help link with legacy assembly code.
11215
11216@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
11217generate code that is not binary compatible with code generated without that
11218switch.  Use it to conform to a non-default application binary interface.
11219Not all targets provide complete support for this switch.
11220
11221@item -ftls-model=@var{model}
11222Alter the thread-local storage model to be used (@pxref{Thread-Local}).
11223The @var{model} argument should be one of @code{global-dynamic},
11224@code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
11225
11226The default without @option{-fpic} is @code{initial-exec}; with
11227@option{-fpic} the default is @code{global-dynamic}.
11228@end table
11229
11230@c man end
11231
11232@node Environment Variables
11233@section Environment Variables Affecting GCC
11234@cindex environment variables
11235
11236@c man begin ENVIRONMENT
11237This section describes several environment variables that affect how GCC
11238operates.  Some of them work by specifying directories or prefixes to use
11239when searching for various kinds of files.  Some are used to specify other
11240aspects of the compilation environment.
11241
11242Note that you can also specify places to search using options such as
11243@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
11244take precedence over places specified using environment variables, which
11245in turn take precedence over those specified by the configuration of GCC@.
11246@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
11247GNU Compiler Collection (GCC) Internals}.
11248
11249@table @env
11250@item LANG
11251@itemx LC_CTYPE
11252@c @itemx LC_COLLATE
11253@itemx LC_MESSAGES
11254@c @itemx LC_MONETARY
11255@c @itemx LC_NUMERIC
11256@c @itemx LC_TIME
11257@itemx LC_ALL
11258@findex LANG
11259@findex LC_CTYPE
11260@c @findex LC_COLLATE
11261@findex LC_MESSAGES
11262@c @findex LC_MONETARY
11263@c @findex LC_NUMERIC
11264@c @findex LC_TIME
11265@findex LC_ALL
11266@cindex locale
11267These environment variables control the way that GCC uses
11268localization information that allow GCC to work with different
11269national conventions.  GCC inspects the locale categories
11270@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
11271so.  These locale categories can be set to any value supported by your
11272installation.  A typical value is @samp{en_UK} for English in the United
11273Kingdom.
11274
11275The @env{LC_CTYPE} environment variable specifies character
11276classification.  GCC uses it to determine the character boundaries in
11277a string; this is needed for some multibyte encodings that contain quote
11278and escape characters that would otherwise be interpreted as a string
11279end or escape.
11280
11281The @env{LC_MESSAGES} environment variable specifies the language to
11282use in diagnostic messages.
11283
11284If the @env{LC_ALL} environment variable is set, it overrides the value
11285of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
11286and @env{LC_MESSAGES} default to the value of the @env{LANG}
11287environment variable.  If none of these variables are set, GCC
11288defaults to traditional C English behavior.
11289
11290@item TMPDIR
11291@findex TMPDIR
11292If @env{TMPDIR} is set, it specifies the directory to use for temporary
11293files.  GCC uses temporary files to hold the output of one stage of
11294compilation which is to be used as input to the next stage: for example,
11295the output of the preprocessor, which is the input to the compiler
11296proper.
11297
11298@item GCC_EXEC_PREFIX
11299@findex GCC_EXEC_PREFIX
11300If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
11301names of the subprograms executed by the compiler.  No slash is added
11302when this prefix is combined with the name of a subprogram, but you can
11303specify a prefix that ends with a slash if you wish.
11304
11305If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
11306an appropriate prefix to use based on the pathname it was invoked with.
11307
11308If GCC cannot find the subprogram using the specified prefix, it
11309tries looking in the usual places for the subprogram.
11310
11311The default value of @env{GCC_EXEC_PREFIX} is
11312@file{@var{prefix}/lib/gcc/} where @var{prefix} is the value
11313of @code{prefix} when you ran the @file{configure} script.
11314
11315Other prefixes specified with @option{-B} take precedence over this prefix.
11316
11317This prefix is also used for finding files such as @file{crt0.o} that are
11318used for linking.
11319
11320In addition, the prefix is used in an unusual way in finding the
11321directories to search for header files.  For each of the standard
11322directories whose name normally begins with @samp{/usr/local/lib/gcc}
11323(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
11324replacing that beginning with the specified prefix to produce an
11325alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
11326@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
11327These alternate directories are searched first; the standard directories
11328come next.
11329
11330@item COMPILER_PATH
11331@findex COMPILER_PATH
11332The value of @env{COMPILER_PATH} is a colon-separated list of
11333directories, much like @env{PATH}.  GCC tries the directories thus
11334specified when searching for subprograms, if it can't find the
11335subprograms using @env{GCC_EXEC_PREFIX}.
11336
11337@item LIBRARY_PATH
11338@findex LIBRARY_PATH
11339The value of @env{LIBRARY_PATH} is a colon-separated list of
11340directories, much like @env{PATH}.  When configured as a native compiler,
11341GCC tries the directories thus specified when searching for special
11342linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
11343using GCC also uses these directories when searching for ordinary
11344libraries for the @option{-l} option (but directories specified with
11345@option{-L} come first).
11346
11347@item LANG
11348@findex LANG
11349@cindex locale definition
11350This variable is used to pass locale information to the compiler.  One way in
11351which this information is used is to determine the character set to be used
11352when character literals, string literals and comments are parsed in C and C++.
11353When the compiler is configured to allow multibyte characters,
11354the following values for @env{LANG} are recognized:
11355
11356@table @samp
11357@item C-JIS
11358Recognize JIS characters.
11359@item C-SJIS
11360Recognize SJIS characters.
11361@item C-EUCJP
11362Recognize EUCJP characters.
11363@end table
11364
11365If @env{LANG} is not defined, or if it has some other value, then the
11366compiler will use mblen and mbtowc as defined by the default locale to
11367recognize and translate multibyte characters.
11368@end table
11369
11370@noindent
11371Some additional environments variables affect the behavior of the
11372preprocessor.
11373
11374@include cppenv.texi
11375
11376@c man end
11377
11378@node Precompiled Headers
11379@section Using Precompiled Headers
11380@cindex precompiled headers
11381@cindex speed of compilation
11382
11383Often large projects have many header files that are included in every
11384source file.  The time the compiler takes to process these header files
11385over and over again can account for nearly all of the time required to
11386build the project.  To make builds faster, GCC allows users to
11387`precompile' a header file; then, if builds can use the precompiled
11388header file they will be much faster.
11389
11390@strong{Caution:} There are a few known situations where GCC will
11391crash when trying to use a precompiled header.  If you have trouble
11392with a precompiled header, you should remove the precompiled header
11393and compile without it.  In addition, please use GCC's on-line
11394defect-tracking system to report any problems you encounter with
11395precompiled headers.  @xref{Bugs}.
11396
11397To create a precompiled header file, simply compile it as you would any
11398other file, if necessary using the @option{-x} option to make the driver
11399treat it as a C or C++ header file.  You will probably want to use a
11400tool like @command{make} to keep the precompiled header up-to-date when
11401the headers it contains change.
11402
11403A precompiled header file will be searched for when @code{#include} is
11404seen in the compilation.  As it searches for the included file
11405(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
11406compiler looks for a precompiled header in each directory just before it
11407looks for the include file in that directory.  The name searched for is
11408the name specified in the @code{#include} with @samp{.gch} appended.  If
11409the precompiled header file can't be used, it is ignored.
11410
11411For instance, if you have @code{#include "all.h"}, and you have
11412@file{all.h.gch} in the same directory as @file{all.h}, then the
11413precompiled header file will be used if possible, and the original
11414header will be used otherwise.
11415
11416Alternatively, you might decide to put the precompiled header file in a
11417directory and use @option{-I} to ensure that directory is searched
11418before (or instead of) the directory containing the original header.
11419Then, if you want to check that the precompiled header file is always
11420used, you can put a file of the same name as the original header in this
11421directory containing an @code{#error} command.
11422
11423This also works with @option{-include}.  So yet another way to use
11424precompiled headers, good for projects not designed with precompiled
11425header files in mind, is to simply take most of the header files used by
11426a project, include them from another header file, precompile that header
11427file, and @option{-include} the precompiled header.  If the header files
11428have guards against multiple inclusion, they will be skipped because
11429they've already been included (in the precompiled header).
11430
11431If you need to precompile the same header file for different
11432languages, targets, or compiler options, you can instead make a
11433@emph{directory} named like @file{all.h.gch}, and put each precompiled
11434header in the directory.  (It doesn't matter what you call the files
11435in the directory, every precompiled header in the directory will be
11436considered.)  The first precompiled header encountered in the
11437directory that is valid for this compilation will be used; they're
11438searched in no particular order.
11439
11440There are many other possibilities, limited only by your imagination,
11441good sense, and the constraints of your build system.
11442
11443A precompiled header file can be used only when these conditions apply:
11444
11445@itemize
11446@item
11447Only one precompiled header can be used in a particular compilation.
11448@item
11449A precompiled header can't be used once the first C token is seen.  You
11450can have preprocessor directives before a precompiled header; you can
11451even include a precompiled header from inside another header, so long as
11452there are no C tokens before the @code{#include}.
11453@item
11454The precompiled header file must be produced for the same language as
11455the current compilation.  You can't use a C precompiled header for a C++
11456compilation.
11457@item
11458The precompiled header file must be produced by the same compiler
11459version and configuration as the current compilation is using.
11460The easiest way to guarantee this is to use the same compiler binary
11461for creating and using precompiled headers.
11462@item
11463Any macros defined before the precompiled header (including with
11464@option{-D}) must either be defined in the same way as when the
11465precompiled header was generated, or must not affect the precompiled
11466header, which usually means that the they don't appear in the
11467precompiled header at all.
11468@item
11469Certain command-line options must be defined in the same way as when the
11470precompiled header was generated.  At present, it's not clear which
11471options are safe to change and which are not; the safest choice is to
11472use exactly the same options when generating and using the precompiled
11473header.
11474@end itemize
11475
11476For all of these but the last, the compiler will automatically ignore
11477the precompiled header if the conditions aren't met.  For the last item,
11478some option changes will cause the precompiled header to be rejected,
11479but not all incompatible option combinations have yet been found.  If
11480you find a new incompatible combination, please consider filing a bug
11481report, see @ref{Bugs}.
11482
11483@node Running Protoize
11484@section Running Protoize
11485
11486The program @code{protoize} is an optional part of GCC@.  You can use
11487it to add prototypes to a program, thus converting the program to ISO
11488C in one respect.  The companion program @code{unprotoize} does the
11489reverse: it removes argument types from any prototypes that are found.
11490
11491When you run these programs, you must specify a set of source files as
11492command line arguments.  The conversion programs start out by compiling
11493these files to see what functions they define.  The information gathered
11494about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
11495
11496After scanning comes actual conversion.  The specified files are all
11497eligible to be converted; any files they include (whether sources or
11498just headers) are eligible as well.
11499
11500But not all the eligible files are converted.  By default,
11501@code{protoize} and @code{unprotoize} convert only source and header
11502files in the current directory.  You can specify additional directories
11503whose files should be converted with the @option{-d @var{directory}}
11504option.  You can also specify particular files to exclude with the
11505@option{-x @var{file}} option.  A file is converted if it is eligible, its
11506directory name matches one of the specified directory names, and its
11507name within the directory has not been excluded.
11508
11509Basic conversion with @code{protoize} consists of rewriting most
11510function definitions and function declarations to specify the types of
11511the arguments.  The only ones not rewritten are those for varargs
11512functions.
11513
11514@code{protoize} optionally inserts prototype declarations at the
11515beginning of the source file, to make them available for any calls that
11516precede the function's definition.  Or it can insert prototype
11517declarations with block scope in the blocks where undeclared functions
11518are called.
11519
11520Basic conversion with @code{unprotoize} consists of rewriting most
11521function declarations to remove any argument types, and rewriting
11522function definitions to the old-style pre-ISO form.
11523
11524Both conversion programs print a warning for any function declaration or
11525definition that they can't convert.  You can suppress these warnings
11526with @option{-q}.
11527
11528The output from @code{protoize} or @code{unprotoize} replaces the
11529original source file.  The original file is renamed to a name ending
11530with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
11531without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
11532for DOS) file already exists, then the source file is simply discarded.
11533
11534@code{protoize} and @code{unprotoize} both depend on GCC itself to
11535scan the program and collect information about the functions it uses.
11536So neither of these programs will work until GCC is installed.
11537
11538Here is a table of the options you can use with @code{protoize} and
11539@code{unprotoize}.  Each option works with both programs unless
11540otherwise stated.
11541
11542@table @code
11543@item -B @var{directory}
11544Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
11545usual directory (normally @file{/usr/local/lib}).  This file contains
11546prototype information about standard system functions.  This option
11547applies only to @code{protoize}.
11548
11549@item -c @var{compilation-options}
11550Use @var{compilation-options} as the options when running @command{gcc} to
11551produce the @samp{.X} files.  The special option @option{-aux-info} is
11552always passed in addition, to tell @command{gcc} to write a @samp{.X} file.
11553
11554Note that the compilation options must be given as a single argument to
11555@code{protoize} or @code{unprotoize}.  If you want to specify several
11556@command{gcc} options, you must quote the entire set of compilation options
11557to make them a single word in the shell.
11558
11559There are certain @command{gcc} arguments that you cannot use, because they
11560would produce the wrong kind of output.  These include @option{-g},
11561@option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in
11562the @var{compilation-options}, they are ignored.
11563
11564@item -C
11565Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
11566systems) instead of @samp{.c}.  This is convenient if you are converting
11567a C program to C++.  This option applies only to @code{protoize}.
11568
11569@item -g
11570Add explicit global declarations.  This means inserting explicit
11571declarations at the beginning of each source file for each function
11572that is called in the file and was not declared.  These declarations
11573precede the first function definition that contains a call to an
11574undeclared function.  This option applies only to @code{protoize}.
11575
11576@item -i @var{string}
11577Indent old-style parameter declarations with the string @var{string}.
11578This option applies only to @code{protoize}.
11579
11580@code{unprotoize} converts prototyped function definitions to old-style
11581function definitions, where the arguments are declared between the
11582argument list and the initial @samp{@{}.  By default, @code{unprotoize}
11583uses five spaces as the indentation.  If you want to indent with just
11584one space instead, use @option{-i " "}.
11585
11586@item -k
11587Keep the @samp{.X} files.  Normally, they are deleted after conversion
11588is finished.
11589
11590@item -l
11591Add explicit local declarations.  @code{protoize} with @option{-l} inserts
11592a prototype declaration for each function in each block which calls the
11593function without any declaration.  This option applies only to
11594@code{protoize}.
11595
11596@item -n
11597Make no real changes.  This mode just prints information about the conversions
11598that would have been done without @option{-n}.
11599
11600@item -N
11601Make no @samp{.save} files.  The original files are simply deleted.
11602Use this option with caution.
11603
11604@item -p @var{program}
11605Use the program @var{program} as the compiler.  Normally, the name
11606@file{gcc} is used.
11607
11608@item -q
11609Work quietly.  Most warnings are suppressed.
11610
11611@item -v
11612Print the version number, just like @option{-v} for @command{gcc}.
11613@end table
11614
11615If you need special compiler options to compile one of your program's
11616source files, then you should generate that file's @samp{.X} file
11617specially, by running @command{gcc} on that source file with the
11618appropriate options and the option @option{-aux-info}.  Then run
11619@code{protoize} on the entire set of files.  @code{protoize} will use
11620the existing @samp{.X} file because it is newer than the source file.
11621For example:
11622
11623@smallexample
11624gcc -Dfoo=bar file1.c -aux-info file1.X
11625protoize *.c
11626@end smallexample
11627
11628@noindent
11629You need to include the special files along with the rest in the
11630@code{protoize} command, even though their @samp{.X} files already
11631exist, because otherwise they won't get converted.
11632
11633@xref{Protoize Caveats}, for more information on how to use
11634@code{protoize} successfully.
11635