]> gcc.gnu.org Git - gcc.git/blame - gcc/doc/invoke.texi
c-decl.c, [...]: Don't check TARGET_MEM_FUNCTIONS.
[gcc.git] / gcc / doc / invoke.texi
CommitLineData
d0a5eb32 1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
b684a3df 2@c 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
74291a4b
MM
3@c This is part of the GCC manual.
4@c For copying conditions, see the file gcc.texi.
5
9d86bffc
JM
6@ignore
7@c man begin COPYRIGHT
8Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
daef8bbd 91998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
9d86bffc 10
77bd67cb 11Permission is granted to copy, distribute and/or modify this document
b3a8389d 12under the terms of the GNU Free Documentation License, Version 1.2 or
77bd67cb
JM
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.
9d86bffc 18
77bd67cb 19(a) The FSF's Front-Cover Text is:
9d86bffc 20
77bd67cb
JM
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.
9d86bffc
JM
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
630d3d5a
JM
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{}
9d86bffc
JM
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
77bd67cb 45gpl(7), gfdl(7), fsf-funding(7),
b4117c30
ZW
46cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
47and the Info entries for @file{gcc}, @file{cpp}, @file{as},
9d86bffc
JM
48@file{ld}, @file{binutils} and @file{gdb}.
49@c man end
2642624b
JM
50@c man begin BUGS
51For instructions on reporting bugs, see
bedc7537 52@w{@uref{http://gcc.gnu.org/bugs.html}}. Use of the @command{gccbug}
2642624b
JM
53script to report bugs is recommended.
54@c man end
55@c man begin AUTHOR
24dbb440
GP
56See the Info entry for @command{gcc}, or
57@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
58for contributors to GCC@.
2642624b 59@c man end
9d86bffc
JM
60@end ignore
61
74291a4b 62@node Invoking GCC
0c2d1a2a
JB
63@chapter GCC Command Options
64@cindex GCC command options
74291a4b 65@cindex command options
0c2d1a2a 66@cindex options, GCC command
74291a4b 67
9d86bffc 68@c man begin DESCRIPTION
0c2d1a2a 69When you invoke GCC, it normally does preprocessing, compilation,
74291a4b 70assembly and linking. The ``overall options'' allow you to stop this
630d3d5a 71process at an intermediate stage. For example, the @option{-c} option
74291a4b
MM
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
0c2d1a2a 81Most of the command line options that you can use with GCC are useful
74291a4b
MM
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
bedc7537 93The @command{gcc} program accepts options and file names as operands. Many
b192711e 94options have multi-letter names; therefore multiple single-letter options
630d3d5a 95may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d
74291a4b
MM
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
630d3d5a 102of the same kind; for example, if you specify @option{-L} more than once,
74291a4b
MM
103the directories are searched in the order specified.
104
105Many options have long names starting with @samp{-f} or with
630d3d5a
JM
106@samp{-W}---for example, @option{-fforce-mem},
107@option{-fstrength-reduce}, @option{-Wformat} and so on. Most of
74291a4b 108these have both positive and negative forms; the negative form of
630d3d5a 109@option{-ffoo} would be @option{-fno-foo}. This manual documents
74291a4b
MM
110only one of these two forms, whichever one is not the default.
111
9d86bffc
JM
112@c man end
113
cd3bb277
JM
114@xref{Option Index}, for an index to GCC's options.
115
74291a4b
MM
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++.
60de6385 124* Objective-C Dialect Options:: Variations on Objective-C.
764dbbf2 125* Language Independent Options:: Controlling how diagnostics should be
02f52e19 126 formatted.
74291a4b
MM
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.
a743d340 136* Spec Files:: How to pass switches to sub-processes.
0c2d1a2a 137* Target Options:: Running a cross-compiler, or an old version of GCC.
74291a4b
MM
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.
0c2d1a2a 142* Environment Variables:: Env vars that affect GCC.
17211ab5 143* Precompiled Headers:: Compiling a header once, and using it many times.
74291a4b
MM
144* Running Protoize:: Automatically adding or removing function prototypes.
145@end menu
146
4bc1997b
JM
147@c man begin OPTIONS
148
74291a4b
MM
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}.
0855eab7 158@gccoptlist{-c -S -E -o @var{file} -combine -pipe -pass-exit-codes @gol
9a94f7f3 159-x @var{language} -v -### --help --target-help --version}
74291a4b
MM
160
161@item C Language Options
162@xref{C Dialect Options,,Options Controlling C Dialect}.
9a94f7f3
JM
163@gccoptlist{-ansi -std=@var{standard} -aux-info @var{filename} @gol
164-fno-asm -fno-builtin -fno-builtin-@var{function} @gol
750491fc 165-fhosted -ffreestanding -fms-extensions @gol
8a035a6b 166-trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol
4bc1997b
JM
167-fallow-single-precision -fcond-mismatch @gol
168-fsigned-bitfields -fsigned-char @gol
3521b33c 169-funsigned-bitfields -funsigned-char}
74291a4b
MM
170
171@item C++ Language Options
172@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
9a94f7f3 173@gccoptlist{-fabi-version=@var{n} -fno-access-control -fcheck-new @gol
b1822ccc 174-fconserve-space -fno-const-strings @gol
aa0cc562 175-fno-elide-constructors @gol
7813d14c 176-fno-enforce-eh-specs @gol
1dbb6023 177-ffor-scope -fno-for-scope -fno-gnu-keywords @gol
90ecce3e 178-fno-implicit-templates @gol
4bc1997b
JM
179-fno-implicit-inline-templates @gol
180-fno-implement-inlines -fms-extensions @gol
aa0cc562 181-fno-nonansi-builtins -fno-operator-names @gol
4bc1997b 182-fno-optional-diags -fpermissive @gol
aa0cc562 183-frepo -fno-rtti -fstats -ftemplate-depth-@var{n} @gol
a0c8285b 184-fuse-cxa-atexit -fno-weak -nostdinc++ @gol
9a94f7f3 185-fno-default-inline -Wabi -Wctor-dtor-privacy @gol
4bc1997b
JM
186-Wnon-virtual-dtor -Wreorder @gol
187-Weffc++ -Wno-deprecated @gol
188-Wno-non-template-friend -Wold-style-cast @gol
189-Woverloaded-virtual -Wno-pmf-conversions @gol
190-Wsign-promo -Wsynth}
74291a4b 191
60de6385
SS
192@item Objective-C Language Options
193@xref{Objective-C Dialect Options,,Options Controlling Objective-C Dialect}.
264fa2db
ZL
194@gccoptlist{
195-fconstant-string-class=@var{class-name} @gol
196-fgnu-runtime -fnext-runtime @gol
197-fno-nil-receivers @gol
198-fobjc-exceptions @gol
199-freplace-objc-classes @gol
200-fzero-link @gol
201-gen-decls @gol
1f676100 202-Wno-protocol -Wselector -Wundeclared-selector}
60de6385 203
764dbbf2
GDR
204@item Language Independent Options
205@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
9a94f7f3 206@gccoptlist{-fmessage-length=@var{n} @gol
4bc1997b 207-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}}
764dbbf2 208
74291a4b
MM
209@item Warning Options
210@xref{Warning Options,,Options to Request or Suppress Warnings}.
9a94f7f3 211@gccoptlist{-fsyntax-only -pedantic -pedantic-errors @gol
65ca2d60 212-w -Wextra -Wall -Waggregate-return @gol
4bc1997b 213-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol
e23bd218 214-Wconversion -Wno-deprecated-declarations @gol
fb0317c6
VR
215-Wdisabled-optimization -Wno-div-by-zero -Wendif-labels @gol
216-Werror -Werror-implicit-function-declaration @gol
c65a01af 217-Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol
fb0317c6 218-Wno-format-extra-args -Wformat-nonliteral @gol
c76f4e8e 219-Wformat-security -Wformat-y2k @gol
fb0317c6
VR
220-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol
221-Wimport -Wno-import -Winit-self -Winline @gol
222-Wno-invalid-offsetof -Winvalid-pch @gol
4bc1997b 223-Wlarger-than-@var{len} -Wlong-long @gol
87ec8de9 224-Wmain -Wmissing-braces @gol
b02398bd
BE
225-Wmissing-format-attribute -Wmissing-include-dirs @gol
226-Wmissing-noreturn @gol
fb0317c6 227-Wno-multichar -Wnonnull -Wpacked -Wpadded @gol
310668e8 228-Wparentheses -Wpointer-arith -Wredundant-decls @gol
4bc1997b 229-Wreturn-type -Wsequence-point -Wshadow @gol
5399d643 230-Wsign-compare -Wstrict-aliasing -Wstrict-aliasing=2 @gol
9a94f7f3
JM
231-Wswitch -Wswitch-default -Wswitch-enum @gol
232-Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol
4bc1997b
JM
233-Wunknown-pragmas -Wunreachable-code @gol
234-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol
7c4d376d
RH
235-Wunused-value -Wunused-variable -Wwrite-strings @gol
236-Wvariadic-macros}
74291a4b 237
fe50c0eb 238@item C-only Warning Options
9a94f7f3 239@gccoptlist{-Wbad-function-cast -Wmissing-declarations @gol
fb0317c6 240-Wmissing-prototypes -Wnested-externs -Wold-style-definition @gol
85617eba
HPN
241-Wstrict-prototypes -Wtraditional @gol
242-Wdeclaration-after-statement}
fe50c0eb 243
74291a4b
MM
244@item Debugging Options
245@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
9a94f7f3
JM
246@gccoptlist{-d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol
247-fdump-unnumbered -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
aee96fe9 248-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
6de9cd9a 249-fdump-tree-all @gol
9a94f7f3
JM
250-fdump-tree-original@r{[}-@var{n}@r{]} @gol
251-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
22367161 252-fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
6de9cd9a
DN
253-fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
254-fdump-tree-ch @gol
255-fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
256-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
257-fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
258-fdump-tree-dom@r{[}-@var{n}@r{]} @gol
259-fdump-tree-dse@r{[}-@var{n}@r{]} @gol
260-fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
261-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
262-fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
263-fdump-tree-nrv @gol
264-fdump-tree-sra@r{[}-@var{n}@r{]} @gol
ff2ad0f7 265-fdump-tree-fre@r{[}-@var{n}@r{]} @gol
a37db56b 266-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
6de9cd9a 267-feliminate-unused-debug-symbols -fmem-report -fprofile-arcs -ftree-based-profiling @gol
a37db56b 268-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
014a1138 269-ftest-coverage -ftime-report -fvar-tracking @gol
def66b10 270-g -g@var{level} -gcoff -gdwarf-2 @gol
5f98259a 271-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ @gol
4bc1997b 272-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol
b1018de6 273-print-multi-directory -print-multi-lib @gol
4bc1997b
JM
274-print-prog-name=@var{program} -print-search-dirs -Q @gol
275-save-temps -time}
74291a4b
MM
276
277@item Optimization Options
278@xref{Optimize Options,,Options that Control Optimization}.
9a94f7f3 279@gccoptlist{-falign-functions=@var{n} -falign-jumps=@var{n} @gol
4bc1997b 280-falign-labels=@var{n} -falign-loops=@var{n} @gol
6de9cd9a 281-fbounds-check -fmudflap -fmudflapth -fmudflapir @gol
fca9dc00 282-fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol
1194fc79
R
283-fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol
284-fcaller-saves -fcprop-registers @gol
62d285ff 285-fcse-follow-jumps -fcse-skip-blocks -fdata-sections @gol
4bc1997b
JM
286-fdelayed-branch -fdelete-null-pointer-checks @gol
287-fexpensive-optimizations -ffast-math -ffloat-store @gol
feb48bde 288-fforce-addr -fforce-mem -ffunction-sections @gol
db643b91
SH
289-fgcse -fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload @gol
290-floop-optimize -fcrossjumping -fif-conversion -fif-conversion2 @gol
4bc1997b 291-finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol
201556f0 292-fkeep-static-consts -fmerge-constants -fmerge-all-constants @gol
e5626198 293-fmodulo-sched -fmove-all-movables -fnew-ra -fno-branch-count-reg @gol
5e962776 294-fno-default-inline -fno-defer-pop -floop-optimize2 -fmove-loop-invariants @gol
feb48bde 295-fno-function-cse -fno-guess-branch-probability @gol
6cfc0341 296-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
9a94f7f3
JM
297-funsafe-math-optimizations -ffinite-math-only @gol
298-fno-trapping-math -fno-zero-initialized-in-bss @gol
4bc1997b 299-fomit-frame-pointer -foptimize-register-move @gol
5d22c1a5 300-foptimize-sibling-calls -fprefetch-loop-arrays @gol
a8a5f53a 301-fprofile-generate -fprofile-use @gol
9a94f7f3 302-freduce-all-givs -fregmove -frename-registers @gol
750054a2 303-freorder-blocks -freorder-blocks-and-partition -freorder-functions @gol
4bc1997b 304-frerun-cse-after-loop -frerun-loop-opt @gol
039c3d42 305-frounding-math -fschedule-insns -fschedule-insns2 @gol
e03b7153 306-fno-sched-interblock -fno-sched-spec -fsched-spec-load @gol
569fa502
DN
307-fsched-spec-load-dangerous @gol
308-fsched-stalled-insns=@var{n} -sched-stalled-insns-dep=@var{n} @gol
309-fsched2-use-superblocks @gol
b9422b69 310-fsched2-use-traces -fsignaling-nans @gol
c132886e 311-fsingle-precision-constant @gol
9a94f7f3
JM
312-fstrength-reduce -fstrict-aliasing -ftracer -fthread-jumps @gol
313-funroll-all-loops -funroll-loops -fpeel-loops @gol
314-funswitch-loops -fold-unroll-loops -fold-unroll-all-loops @gol
c66b6c66 315-ftree-pre -ftree-ccp -ftree-dce -ftree-loop-optimize @gol
6de9cd9a 316-ftree-dominator-opts -ftree-dse -ftree-copyrename @gol
ff2ad0f7 317-ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre @gol
3af64fd6 318--param @var{name}=@var{value}
4bc1997b 319-O -O0 -O1 -O2 -O3 -Os}
74291a4b
MM
320
321@item Preprocessor Options
322@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
c2d635bc 323@gccoptlist{-A@var{question}=@var{answer} @gol
9a94f7f3 324-A-@var{question}@r{[}=@var{answer}@r{]} @gol
4bc1997b
JM
325-C -dD -dI -dM -dN @gol
326-D@var{macro}@r{[}=@var{defn}@r{]} -E -H @gol
327-idirafter @var{dir} @gol
328-include @var{file} -imacros @var{file} @gol
329-iprefix @var{file} -iwithprefix @var{dir} @gol
bdd42dd9 330-iwithprefixbefore @var{dir} -isystem @var{dir} @gol
b20d9f0c
AO
331-M -MM -MF -MG -MP -MQ -MT -nostdinc @gol
332-P -fworking-directory -remap @gol
9a94f7f3
JM
333-trigraphs -undef -U@var{macro} -Wp,@var{option} @gol
334-Xpreprocessor @var{option}}
74291a4b
MM
335
336@item Assembler Option
337@xref{Assembler Options,,Passing Options to the Assembler}.
9a94f7f3 338@gccoptlist{-Wa,@var{option} -Xassembler @var{option}}
74291a4b
MM
339
340@item Linker Options
341@xref{Link Options,,Options for Linking}.
9a94f7f3 342@gccoptlist{@var{object-file-name} -l@var{library} @gol
24a4dd31 343-nostartfiles -nodefaultlibs -nostdlib -pie @gol
4bc1997b 344-s -static -static-libgcc -shared -shared-libgcc -symbolic @gol
aee96fe9 345-Wl,@var{option} -Xlinker @var{option} @gol
4bc1997b 346-u @var{symbol}}
74291a4b
MM
347
348@item Directory Options
349@xref{Directory Options,,Options for Directory Search}.
4bed3787 350@gccoptlist{-B@var{prefix} -I@var{dir} -iquote@var{dir} -L@var{dir} -specs=@var{file} -I-}
74291a4b
MM
351
352@item Target Options
353@c I wrote this xref this way to avoid overfull hbox. -- rms
354@xref{Target Options}.
9a94f7f3 355@gccoptlist{-V @var{version} -b @var{machine}}
74291a4b
MM
356
357@item Machine Dependent Options
358@xref{Submodel Options,,Hardware Models and Configurations}.
39bc1876
NS
359@c This list is ordered alphanumerically by subsection name.
360@c Try and put the significant identifier (CPU or system) first,
361@c so users have a clue at guessing where the ones they want will be.
5d22c1a5 362
39bc1876
NS
363@emph{ARC Options}
364@gccoptlist{-EB -EL @gol
365-mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text-section} @gol
366-mdata=@var{data-section} -mrodata=@var{readonly-data-section}}
74291a4b 367
74291a4b 368@emph{ARM Options}
9a94f7f3 369@gccoptlist{-mapcs-frame -mno-apcs-frame @gol
5848830f 370-mabi=@var{name} @gol
310668e8
JM
371-mapcs-stack-check -mno-apcs-stack-check @gol
372-mapcs-float -mno-apcs-float @gol
373-mapcs-reentrant -mno-apcs-reentrant @gol
374-msched-prolog -mno-sched-prolog @gol
375-mlittle-endian -mbig-endian -mwords-little-endian @gol
34a86306 376-mfloat-abi=@var{name} -msoft-float -mhard-float -mfpe @gol
310668e8 377-mthumb-interwork -mno-thumb-interwork @gol
9b66ebb1 378-mcpu=@var{name} -march=@var{name} -mfpu=@var{name} @gol
247f8561 379-mstructure-size-boundary=@var{n} @gol
4bc1997b 380-mabort-on-noreturn @gol
310668e8
JM
381-mlong-calls -mno-long-calls @gol
382-msingle-pic-base -mno-single-pic-base @gol
247f8561
PB
383-mpic-register=@var{reg} @gol
384-mnop-fun-dllimport @gol
9b6b54e2 385-mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
247f8561 386-mpoke-function-name @gol
310668e8
JM
387-mthumb -marm @gol
388-mtpcs-frame -mtpcs-leaf-frame @gol
9a94f7f3 389-mcaller-super-interworking -mcallee-super-interworking}
74291a4b 390
39bc1876
NS
391@emph{AVR Options}
392@gccoptlist{-mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts @gol
393-mcall-prologues -mno-tablejump -mtiny-stack -mint8}
861bb6c1 394
39bc1876
NS
395@emph{CRIS Options}
396@gccoptlist{-mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol
397-mmax-stack-frame=@var{n} -melinux-stacksize=@var{n} @gol
398-metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects @gol
399-mstack-align -mdata-align -mconst-align @gol
400-m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt @gol
401-melf -maout -melinux -mlinux -sim -sim2 @gol
402-mmul-bug-workaround -mno-mul-bug-workaround}
74291a4b 403
48aec0bc 404@emph{Darwin Options}
6d2f9dd3
JM
405@gccoptlist{-all_load -allowable_client -arch -arch_errors_fatal @gol
406-arch_only -bind_at_load -bundle -bundle_loader @gol
407-client_name -compatibility_version -current_version @gol
408-dependency-file -dylib_file -dylinker_install_name @gol
409-dynamic -dynamiclib -exported_symbols_list @gol
410-filelist -flat_namespace -force_cpusubtype_ALL @gol
411-force_flat_namespace -headerpad_max_install_names @gol
412-image_base -init -install_name -keep_private_externs @gol
413-multi_module -multiply_defined -multiply_defined_unused @gol
e62f462e 414-noall_load -nofixprebinding -nomultidefs -noprebind -noseglinkedit @gol
6d2f9dd3
JM
415-pagezero_size -prebind -prebind_all_twolevel_modules @gol
416-private_bundle -read_only_relocs -sectalign @gol
417-sectobjectsymbols -whyload -seg1addr @gol
418-sectcreate -sectobjectsymbols -sectorder @gol
419-seg_addr_table -seg_addr_table_filename -seglinkedit @gol
420-segprot -segs_read_only_addr -segs_read_write_addr @gol
421-single_module -static -sub_library -sub_umbrella @gol
422-twolevel_namespace -umbrella -undefined @gol
423-unexported_symbols_list -weak_reference_mismatches @gol
f08a3544 424-whatsloaded -F}
48aec0bc 425
74291a4b 426@emph{DEC Alpha Options}
9a94f7f3 427@gccoptlist{-mno-fp-regs -msoft-float -malpha-as -mgas @gol
4bc1997b
JM
428-mieee -mieee-with-inexact -mieee-conformant @gol
429-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol
430-mtrap-precision=@var{mode} -mbuild-constants @gol
58605ba0
RH
431-mcpu=@var{cpu-type} -mtune=@var{cpu-type} @gol
432-mbwx -mmax -mfix -mcix @gol
433-mfloat-vax -mfloat-ieee @gol
9a94f7f3
JM
434-mexplicit-relocs -msmall-data -mlarge-data @gol
435-msmall-text -mlarge-text @gol
4bc1997b 436-mmemory-latency=@var{time}}
74291a4b 437
d7c23cdc 438@emph{DEC Alpha/VMS Options}
9a94f7f3 439@gccoptlist{-mvms-return-codes}
d7c23cdc 440
39bc1876
NS
441@emph{FRV Options}
442@gccoptlist{-mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 @gol
443-mhard-float -msoft-float @gol
444-malloc-cc -mfixed-cc -mdword -mno-dword @gol
445-mdouble -mno-double @gol
446-mmedia -mno-media -mmuladd -mno-muladd @gol
447-mfdpic -minline-plt -mgprel-ro -multilib-library-pic -mlinked-fp @gol
448-mlibrary-pic -macc-4 -macc-8 @gol
449-mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move @gol
450-mscc -mno-scc -mcond-exec -mno-cond-exec @gol
451-mvliw-branch -mno-vliw-branch @gol
452-mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec @gol
453-mno-nested-cond-exec -mtomcat-stats @gol
454-mcpu=@var{cpu}}
455
74291a4b 456@emph{H8/300 Options}
9a94f7f3 457@gccoptlist{-mrelax -mh -ms -mn -mint32 -malign-300}
74291a4b 458
39bc1876
NS
459@emph{HPPA Options}
460@gccoptlist{-march=@var{architecture-type} @gol
461-mbig-switch -mdisable-fpregs -mdisable-indexing @gol
462-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld @gol
463-mjump-in-delay -mlinker-opt -mlong-calls @gol
464-mlong-load-store -mno-big-switch -mno-disable-fpregs @gol
465-mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol
466-mno-jump-in-delay -mno-long-load-store @gol
467-mno-portable-runtime -mno-soft-float @gol
468-mno-space-regs -msoft-float -mpa-risc-1-0 @gol
469-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol
470-mschedule=@var{cpu-type} -mspace-regs -msio -mwsio @gol
471-nolibdld -static -threads}
74291a4b 472
39bc1876
NS
473@emph{i386 and x86-64 Options}
474@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol
475-mfpmath=@var{unit} @gol
476-masm=@var{dialect} -mno-fancy-math-387 @gol
477-mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol
478-mno-wide-multiply -mrtd -malign-double @gol
479-mpreferred-stack-boundary=@var{num} @gol
480-mmmx -msse -msse2 -msse3 -m3dnow @gol
481-mthreads -mno-align-stringops -minline-all-stringops @gol
482-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
483-m96bit-long-double -mregparm=@var{num} -momit-leaf-frame-pointer @gol
484-mno-red-zone -mno-tls-direct-seg-refs @gol
485-mcmodel=@var{code-model} @gol
486-m32 -m64}
56b2d7a7 487
39bc1876
NS
488@emph{IA-64 Options}
489@gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol
490-mvolatile-asm-stop -mb-step -mregister-names -mno-sdata @gol
491-mconstant-gp -mauto-pic -minline-float-divide-min-latency @gol
492-minline-float-divide-max-throughput @gol
493-minline-int-divide-min-latency @gol
494-minline-int-divide-max-throughput -mno-dwarf2-asm @gol
495-mfixed-range=@var{register-range}}
282a61e6 496
39bc1876
NS
497@emph{M32R/D Options}
498@gccoptlist{-m32r2 -m32rx -m32r @gol
499-mdebug @gol
500-malign-loops -mno-align-loops @gol
501-missue-rate=@var{number} @gol
502-mbranch-cost=@var{number} @gol
503-mmodel=@var{code-size-model-type} @gol
504-msdata=@var{sdata-type} @gol
505-mno-flush-func -mflush-func=@var{name} @gol
506-mno-flush-trap -mflush-trap=@var{number} @gol
507-G @var{num}}
83575957 508
39bc1876
NS
509@emph{M680x0 Options}
510@gccoptlist{-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol
511-m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 @gol
512-mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol
513-malign-int -mstrict-align -msep-data -mno-sep-data @gol
514-mshared-library-id=n -mid-shared-library -mno-id-shared-library}
789a3090 515
39bc1876
NS
516@emph{M68hc1x Options}
517@gccoptlist{-m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 @gol
518-mauto-incdec -minmax -mlong-calls -mshort @gol
519-msoft-reg-count=@var{count}}
052a4b28 520
789a3090 521@emph{MCore Options}
9a94f7f3 522@gccoptlist{-mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol
310668e8
JM
523-mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol
524-m4byte-functions -mno-4byte-functions -mcallgraph-data @gol
525-mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol
526-mlittle-endian -mbig-endian -m210 -m340 -mstack-increment}
f84271d9 527
39bc1876
NS
528@emph{MIPS Options}
529@gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol
530-mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol
531-mips16 -mno-mips16 -mabi=@var{abi} -mabicalls -mno-abicalls @gol
532-mxgot -mno-xgot -mgp32 -mgp64 -mfp32 -mfp64 @gol
533-mhard-float -msoft-float -msingle-float -mdouble-float @gol
534-mint64 -mlong64 -mlong32 @gol
535-G@var{num} -membedded-data -mno-embedded-data @gol
536-muninit-const-in-rodata -mno-uninit-const-in-rodata @gol
537-msplit-addresses -mno-split-addresses @gol
538-mexplicit-relocs -mno-explicit-relocs @gol
539-mrnames -mno-rnames @gol
540-mcheck-zero-division -mno-check-zero-division @gol
541-mmemcpy -mno-memcpy -mlong-calls -mno-long-calls @gol
542-mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp @gol
543-mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 @gol
544-mfix-vr4120 -mno-fix-vr4120 -mfix-sb1 -mno-fix-sb1 @gol
545-mflush-func=@var{func} -mno-flush-func @gol
546-mbranch-likely -mno-branch-likely @gol
547-mfp-exceptions -mno-fp-exceptions @gol
548-mvr4130-align -mno-vr4130-align}
bcf684c7 549
39bc1876
NS
550@emph{MMIX Options}
551@gccoptlist{-mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu @gol
552-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols @gol
553-melf -mbranch-predict -mno-branch-predict -mbase-addresses @gol
554-mno-base-addresses -msingle-exit -mno-single-exit}
df6194d4 555
39bc1876
NS
556@emph{MN10300 Options}
557@gccoptlist{-mmult-bug -mno-mult-bug @gol
558-mam33 -mno-am33 @gol
559-mam33-2 -mno-am33-2 @gol
560-mno-crt0 -mrelax}
91abf72d 561
39bc1876
NS
562@emph{NS32K Options}
563@gccoptlist{-m32032 -m32332 -m32532 -m32081 -m32381 @gol
564-mmult-add -mnomult-add -msoft-float -mrtd -mnortd @gol
565-mregparam -mnoregparam -msb -mnosb @gol
566-mbitfield -mnobitfield -mhimem -mnohimem}
0b85d816 567
9f85bca7 568@emph{PDP-11 Options}
9a94f7f3 569@gccoptlist{-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol
9f85bca7
JM
570-mbcopy -mbcopy-builtin -mint32 -mno-int16 @gol
571-mint16 -mno-int32 -mfloat32 -mno-float64 @gol
572-mfloat64 -mno-float32 -mabshi -mno-abshi @gol
573-mbranch-expensive -mbranch-cheap @gol
574-msplit -mno-split -munix-asm -mdec-asm}
575
39bc1876
NS
576@emph{PowerPC Options}
577See RS/6000 and PowerPC Options.
578
579@emph{RS/6000 and PowerPC Options}
580@gccoptlist{-mcpu=@var{cpu-type} @gol
581-mtune=@var{cpu-type} @gol
582-mpower -mno-power -mpower2 -mno-power2 @gol
583-mpowerpc -mpowerpc64 -mno-powerpc @gol
584-maltivec -mno-altivec @gol
585-mpowerpc-gpopt -mno-powerpc-gpopt @gol
586-mpowerpc-gfxopt -mno-powerpc-gfxopt @gol
587-mnew-mnemonics -mold-mnemonics @gol
588-mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol
589-m64 -m32 -mxl-call -mno-xl-call -mpe @gol
590-malign-power -malign-natural @gol
591-msoft-float -mhard-float -mmultiple -mno-multiple @gol
592-mstring -mno-string -mupdate -mno-update @gol
593-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol
594-mstrict-align -mno-strict-align -mrelocatable @gol
595-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol
596-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol
597-mdynamic-no-pic @gol
598-mprioritize-restricted-insns=@var{priority} @gol
599-msched-costly-dep=@var{dependence_type} @gol
600-minsert-sched-nops=@var{scheme} @gol
601-mcall-sysv -mcall-netbsd @gol
602-maix-struct-return -msvr4-struct-return @gol
603-mabi=altivec -mabi=no-altivec @gol
604-mabi=spe -mabi=no-spe @gol
605-misel=yes -misel=no @gol
606-mspe=yes -mspe=no @gol
607-mfloat-gprs=yes -mfloat-gprs=no @gol
608-mprototype -mno-prototype @gol
609-msim -mmvme -mads -myellowknife -memb -msdata @gol
610-msdata=@var{opt} -mvxworks -mwindiss -G @var{num} -pthread}
611
612@emph{S/390 and zSeries Options}
613@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol
614-mhard-float -msoft-float -mbackchain -mno-backchain @gol
615-msmall-exec -mno-small-exec -mmvcle -mno-mvcle @gol
616-m64 -m31 -mdebug -mno-debug -mesa -mzarch @gol
617-mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd}
618
619@emph{SH Options}
620@gccoptlist{-m1 -m2 -m2e -m3 -m3e @gol
621-m4-nofpu -m4-single-only -m4-single -m4 @gol
622-m5-64media -m5-64media-nofpu @gol
623-m5-32media -m5-32media-nofpu @gol
624-m5-compact -m5-compact-nofpu @gol
625-mb -ml -mdalign -mrelax @gol
626-mbigtable -mfmovd -mhitachi -mnomacsave @gol
627-mieee -misize -mpadstruct -mspace @gol
628-mprefergot -musermode}
629
630@emph{SPARC Options}
631@gccoptlist{-mcpu=@var{cpu-type} @gol
632-mtune=@var{cpu-type} @gol
633-mcmodel=@var{code-model} @gol
634-m32 -m64 -mapp-regs -mno-app-regs @gol
635-mfaster-structs -mno-faster-structs @gol
636-mfpu -mno-fpu -mhard-float -msoft-float @gol
637-mhard-quad-float -msoft-quad-float @gol
638-mimpure-text -mno-impure-text -mlittle-endian @gol
639-mstack-bias -mno-stack-bias @gol
640-munaligned-doubles -mno-unaligned-doubles @gol
641-mv8plus -mno-v8plus -mvis -mno-vis}
642
643@emph{System V Options}
644@gccoptlist{-Qy -Qn -YP,@var{paths} -Ym,@var{dir}}
645
646@emph{TMS320C3x/C4x Options}
647@gccoptlist{-mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm @gol
648-mfast-fix -mmpyi -mbk -mti -mdp-isr-reload @gol
649-mrpts=@var{count} -mrptb -mdb -mloop-unsigned @gol
650-mparallel-insns -mparallel-mpy -mpreserve-float}
651
652@emph{V850 Options}
653@gccoptlist{-mlong-calls -mno-long-calls -mep -mno-ep @gol
654-mprolog-function -mno-prolog-function -mspace @gol
655-mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol
656-mapp-regs -mno-app-regs @gol
657-mdisable-callt -mno-disable-callt @gol
658-mv850e1 @gol
659-mv850e @gol
660-mv850 -mbig-switch}
661
662@emph{VAX Options}
663@gccoptlist{-mg -mgnu -munix}
664
665@emph{x86-64 Options}
666See i386 and x86-64 Options.
667
69a0611f 668@emph{Xstormy16 Options}
9a94f7f3 669@gccoptlist{-msim}
69a0611f 670
03984308 671@emph{Xtensa Options}
6cedbe44 672@gccoptlist{-mconst16 -mno-const16 @gol
9a94f7f3 673-mfused-madd -mno-fused-madd @gol
9a94f7f3
JM
674-mtext-section-literals -mno-text-section-literals @gol
675-mtarget-align -mno-target-align @gol
676-mlongcalls -mno-longcalls}
03984308 677
39bc1876
NS
678@emph{zSeries Options}
679See S/390 and zSeries Options.
70899148 680
74291a4b
MM
681@item Code Generation Options
682@xref{Code Gen Options,,Options for Code Generation Conventions}.
9a94f7f3
JM
683@gccoptlist{-fcall-saved-@var{reg} -fcall-used-@var{reg} @gol
684-ffixed-@var{reg} -fexceptions @gol
5d22c1a5 685-fnon-call-exceptions -funwind-tables @gol
a944ceb9 686-fasynchronous-unwind-tables @gol
4bc1997b 687-finhibit-size-directive -finstrument-functions @gol
dc170a87 688-fno-common -fno-ident @gol
24a4dd31 689-fpcc-struct-return -fpic -fPIC -fpie -fPIE @gol
4bc1997b 690-freg-struct-return -fshared-data -fshort-enums @gol
271bd540 691-fshort-double -fshort-wchar @gol
4bc1997b
JM
692-fverbose-asm -fpack-struct -fstack-check @gol
693-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol
694-fargument-alias -fargument-noalias @gol
478c9e72 695-fargument-noalias-global -fleading-underscore @gol
d4463dfc 696-ftls-model=@var{model} @gol
4fa26a60 697-ftrapv -fwrapv -fbounds-check}
74291a4b
MM
698@end table
699
700@menu
701* Overall Options:: Controlling the kind of output:
702 an executable, object files, assembler files,
703 or preprocessed source.
704* C Dialect Options:: Controlling the variant of C language compiled.
705* C++ Dialect Options:: Variations on C++.
60de6385 706* Objective-C Dialect Options:: Variations on Objective-C.
764dbbf2 707* Language Independent Options:: Controlling how diagnostics should be
02f52e19 708 formatted.
74291a4b
MM
709* Warning Options:: How picky should the compiler be?
710* Debugging Options:: Symbol tables, measurements, and debugging dumps.
711* Optimize Options:: How much optimization?
712* Preprocessor Options:: Controlling header files and macro definitions.
713 Also, getting dependency information for Make.
714* Assembler Options:: Passing options to the assembler.
715* Link Options:: Specifying libraries and so on.
716* Directory Options:: Where to find header files and libraries.
717 Where to find the compiler executable files.
a743d340 718* Spec Files:: How to pass switches to sub-processes.
0c2d1a2a 719* Target Options:: Running a cross-compiler, or an old version of GCC.
74291a4b
MM
720@end menu
721
722@node Overall Options
723@section Options Controlling the Kind of Output
724
725Compilation can involve up to four stages: preprocessing, compilation
d1bd0ded
GK
726proper, assembly and linking, always in that order. GCC is capable of
727preprocessing and compiling several files either into several
728assembler input files, or into one assembler input file; then each
729assembler input file produces an object file, and linking combines all
730the object files (those newly compiled, and those specified as input)
731into an executable file.
74291a4b
MM
732
733@cindex file name suffix
734For any given input file, the file name suffix determines what kind of
735compilation is done:
736
2642624b 737@table @gcctabopt
74291a4b
MM
738@item @var{file}.c
739C source code which must be preprocessed.
740
741@item @var{file}.i
742C source code which should not be preprocessed.
743
744@item @var{file}.ii
745C++ source code which should not be preprocessed.
746
747@item @var{file}.m
748Objective-C source code. Note that you must link with the library
749@file{libobjc.a} to make an Objective-C program work.
750
b9265ec1
JM
751@item @var{file}.mi
752Objective-C source code which should not be preprocessed.
753
74291a4b 754@item @var{file}.h
17211ab5 755C or C++ header file to be turned into a precompiled header.
74291a4b
MM
756
757@item @var{file}.cc
b9265ec1 758@itemx @var{file}.cp
74291a4b
MM
759@itemx @var{file}.cxx
760@itemx @var{file}.cpp
ee8acf89 761@itemx @var{file}.CPP
b9265ec1 762@itemx @var{file}.c++
74291a4b
MM
763@itemx @var{file}.C
764C++ source code which must be preprocessed. Note that in @samp{.cxx},
765the last two letters must both be literally @samp{x}. Likewise,
161d7b59 766@samp{.C} refers to a literal capital C@.
74291a4b 767
17211ab5
GK
768@item @var{file}.hh
769@itemx @var{file}.H
770C++ header file to be turned into a precompiled header.
771
b9265ec1
JM
772@item @var{file}.f
773@itemx @var{file}.for
774@itemx @var{file}.FOR
775Fortran source code which should not be preprocessed.
776
777@item @var{file}.F
778@itemx @var{file}.fpp
779@itemx @var{file}.FPP
780Fortran source code which must be preprocessed (with the traditional
781preprocessor).
782
783@item @var{file}.r
784Fortran source code which must be preprocessed with a RATFOR
161d7b59 785preprocessor (not included with GCC)@.
b9265ec1 786
6de9cd9a
DN
787@item @var{file}.f90
788@itemx @var{file}.f95
789Fortran 90/95 source code which should not be preprocessed.
790
b9265ec1
JM
791@c FIXME: Descriptions of Java file types.
792@c @var{file}.java
793@c @var{file}.class
794@c @var{file}.zip
795@c @var{file}.jar
796
e23381df
GB
797@item @var{file}.ads
798Ada source code file which contains a library unit declaration (a
799declaration of a package, subprogram, or generic, or a generic
800instantiation), or a library unit renaming declaration (a package,
801generic, or subprogram renaming declaration). Such files are also
802called @dfn{specs}.
803
804@itemx @var{file}.adb
805Ada source code file containing a library unit body (a subprogram or
806package body). Such files are also called @dfn{bodies}.
807
b9265ec1 808@c GCC also knows about some suffixes for languages not yet included:
b9265ec1
JM
809@c Pascal:
810@c @var{file}.p
811@c @var{file}.pas
812
74291a4b
MM
813@item @var{file}.s
814Assembler code.
815
816@item @var{file}.S
817Assembler code which must be preprocessed.
818
819@item @var{other}
820An object file to be fed straight into linking.
821Any file name with no recognized suffix is treated this way.
822@end table
823
cd3bb277 824@opindex x
630d3d5a 825You can specify the input language explicitly with the @option{-x} option:
74291a4b 826
2642624b 827@table @gcctabopt
74291a4b
MM
828@item -x @var{language}
829Specify explicitly the @var{language} for the following input files
830(rather than letting the compiler choose a default based on the file
831name suffix). This option applies to all following input files until
630d3d5a 832the next @option{-x} option. Possible values for @var{language} are:
3ab51846 833@smallexample
b9265ec1 834c c-header cpp-output
17211ab5 835c++ c++-header c++-cpp-output
f4ddb75b 836objective-c objective-c-header objc-cpp-output
74291a4b 837assembler assembler-with-cpp
e23381df 838ada
b9265ec1 839f77 f77-cpp-input ratfor
6de9cd9a 840f95
e23381df 841java
b38b97c4 842treelang
3ab51846 843@end smallexample
74291a4b
MM
844
845@item -x none
846Turn off any specification of a language, so that subsequent files are
630d3d5a 847handled according to their file name suffixes (as they are if @option{-x}
74291a4b 848has not been used at all).
14a774a9
RK
849
850@item -pass-exit-codes
cd3bb277 851@opindex pass-exit-codes
bedc7537 852Normally the @command{gcc} program will exit with the code of 1 if any
14a774a9 853phase of the compiler returns a non-success return code. If you specify
630d3d5a 854@option{-pass-exit-codes}, the @command{gcc} program will instead return with
14a774a9
RK
855numerically highest error produced by any phase that returned an error
856indication.
74291a4b
MM
857@end table
858
859If you only want some of the stages of compilation, you can use
630d3d5a
JM
860@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
861one of the options @option{-c}, @option{-S}, or @option{-E} to say where
bedc7537
NC
862@command{gcc} is to stop. Note that some combinations (for example,
863@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
74291a4b 864
2642624b 865@table @gcctabopt
74291a4b 866@item -c
cd3bb277 867@opindex c
74291a4b
MM
868Compile or assemble the source files, but do not link. The linking
869stage simply is not done. The ultimate output is in the form of an
870object file for each source file.
871
872By default, the object file name for a source file is made by replacing
873the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
874
875Unrecognized input files, not requiring compilation or assembly, are
876ignored.
877
878@item -S
cd3bb277 879@opindex S
74291a4b
MM
880Stop after the stage of compilation proper; do not assemble. The output
881is in the form of an assembler code file for each non-assembler input
882file specified.
883
884By default, the assembler file name for a source file is made by
885replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
886
887Input files that don't require compilation are ignored.
888
889@item -E
cd3bb277 890@opindex E
74291a4b
MM
891Stop after the preprocessing stage; do not run the compiler proper. The
892output is in the form of preprocessed source code, which is sent to the
893standard output.
894
895Input files which don't require preprocessing are ignored.
896
897@cindex output file option
898@item -o @var{file}
cd3bb277 899@opindex o
74291a4b
MM
900Place output in file @var{file}. This applies regardless to whatever
901sort of output is being produced, whether it be an executable file,
902an object file, an assembler file or preprocessed C code.
903
488061c8
GK
904If @option{-o} is not specified, the default is to put an executable
905file in @file{a.out}, the object file for
906@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
907assembler file in @file{@var{source}.s}, a precompiled header file in
908@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
909standard output.
74291a4b
MM
910
911@item -v
cd3bb277 912@opindex v
74291a4b
MM
913Print (on standard error output) the commands executed to run the stages
914of compilation. Also print the version number of the compiler driver
915program and of the preprocessor and the compiler proper.
916
e8b3c8ac
IR
917@item -###
918@opindex ###
919Like @option{-v} except the commands are not executed and all command
920arguments are quoted. This is useful for shell scripts to capture the
921driver-generated command lines.
922
74291a4b 923@item -pipe
cd3bb277 924@opindex pipe
74291a4b
MM
925Use pipes rather than temporary files for communication between the
926various stages of compilation. This fails to work on some systems where
927the assembler is unable to read from a pipe; but the GNU assembler has
928no trouble.
844642e6 929
0855eab7
CT
930@item -combine
931@opindex combine
932If you are compiling multiple source files, this option tells the driver
f26c1794 933to pass all the source files to the compiler at once (for those
0855eab7
CT
934languages for which the compiler can handle this). This will allow
935intermodule analysis (IMA) to be performed by the compiler. Currently the only
936language for which this is supported is C. If you pass source files for
937multiple languages to the driver, using this option, the driver will invoke
938the compiler(s) that support IMA once each, passing each compiler all the
939source files appropriate for it. For those languages that do not support
940IMA this option will be ignored, and the compiler will be invoked once for
941each source file in that language. If you use this option in conjunction
942with -save-temps, the compiler will generate multiple pre-processed files
f26c1794 943(one for each source file), but only one (combined) .o or .s file.
0855eab7 944
844642e6 945@item --help
cd3bb277 946@opindex help
844642e6 947Print (on the standard output) a description of the command line options
bedc7537
NC
948understood by @command{gcc}. If the @option{-v} option is also specified
949then @option{--help} will also be passed on to the various processes
950invoked by @command{gcc}, so that they can display the command line options
65ca2d60 951they accept. If the @option{-Wextra} option is also specified then command
844642e6
NC
952line options which have no documentation associated with them will also
953be displayed.
10501d8f
CC
954
955@item --target-help
cd3bb277 956@opindex target-help
10501d8f
CC
957Print (on the standard output) a description of target specific command
958line options for each tool.
e03b7153
RS
959
960@item --version
961@opindex version
962Display the version number and copyrights of the invoked GCC.
74291a4b
MM
963@end table
964
965@node Invoking G++
966@section Compiling C++ Programs
967
968@cindex suffixes for C++ source
969@cindex C++ source file suffixes
970C++ source files conventionally use one of the suffixes @samp{.C},
17211ab5
GK
971@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
972@samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and
0c2d1a2a 973preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes
bba975d4 974files with these names and compiles them as C++ programs even if you
17211ab5
GK
975call the compiler the same way as for compiling C programs (usually
976with the name @command{gcc}).
74291a4b
MM
977
978@findex g++
979@findex c++
980However, C++ programs often require class libraries as well as a
981compiler that understands the C++ language---and under some
17211ab5
GK
982circumstances, you might want to compile programs or header files from
983standard input, or otherwise without a suffix that flags them as C++
984programs. You might also like to precompile a C header file with a
985@samp{.h} extension to be used in C++ compilations. @command{g++} is a
986program that calls GCC with the default language set to C++, and
987automatically specifies linking against the C++ library. On many
988systems, @command{g++} is also installed with the name @command{c++}.
74291a4b 989
bedc7537 990@cindex invoking @command{g++}
74291a4b
MM
991When you compile C++ programs, you may specify many of the same
992command-line options that you use for compiling programs in any
993language; or command-line options meaningful for C and related
994languages; or options that are meaningful only for C++ programs.
995@xref{C Dialect Options,,Options Controlling C Dialect}, for
161d7b59 996explanations of options for languages related to C@.
74291a4b
MM
997@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
998explanations of options that are meaningful only for C++ programs.
999
1000@node C Dialect Options
1001@section Options Controlling C Dialect
1002@cindex dialect options
1003@cindex language dialect options
1004@cindex options, dialect
1005
1006The following options control the dialect of C (or languages derived
2147b154 1007from C, such as C++ and Objective-C) that the compiler accepts:
74291a4b 1008
2642624b 1009@table @gcctabopt
74291a4b 1010@cindex ANSI support
c1030c7c 1011@cindex ISO support
74291a4b 1012@item -ansi
cd3bb277 1013@opindex ansi
3764f879 1014In C mode, support all ISO C90 programs. In C++ mode,
775afb25 1015remove GNU extensions that conflict with ISO C++.
74291a4b 1016
c1030c7c 1017This turns off certain features of GCC that are incompatible with ISO
3764f879 1018C90 (when compiling C code), or of standard C++ (when compiling C++ code),
0c2d1a2a 1019such as the @code{asm} and @code{typeof} keywords, and
74291a4b
MM
1020predefined macros such as @code{unix} and @code{vax} that identify the
1021type of system you are using. It also enables the undesirable and
02f52e19 1022rarely used ISO trigraph feature. For the C compiler,
0c2d1a2a 1023it disables recognition of C++ style @samp{//} comments as well as
775afb25 1024the @code{inline} keyword.
74291a4b
MM
1025
1026The alternate keywords @code{__asm__}, @code{__extension__},
1027@code{__inline__} and @code{__typeof__} continue to work despite
630d3d5a 1028@option{-ansi}. You would not want to use them in an ISO C program, of
74291a4b 1029course, but it is useful to put them in header files that might be included
630d3d5a 1030in compilations done with @option{-ansi}. Alternate predefined macros
74291a4b 1031such as @code{__unix__} and @code{__vax__} are also available, with or
630d3d5a 1032without @option{-ansi}.
74291a4b 1033
630d3d5a
JM
1034The @option{-ansi} option does not cause non-ISO programs to be
1035rejected gratuitously. For that, @option{-pedantic} is required in
1036addition to @option{-ansi}. @xref{Warning Options}.
74291a4b 1037
630d3d5a 1038The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
74291a4b
MM
1039option is used. Some header files may notice this macro and refrain
1040from declaring certain functions or defining certain macros that the
c1030c7c 1041ISO standard doesn't call for; this is to avoid interfering with any
74291a4b
MM
1042programs that might use these names for other things.
1043
c771326b
JM
1044Functions which would normally be built in but do not have semantics
1045defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
630d3d5a 1046functions with @option{-ansi} is used. @xref{Other Builtins,,Other
f0523f02 1047built-in functions provided by GCC}, for details of the functions
01702459 1048affected.
74291a4b 1049
49419c8f 1050@item -std=
cd3bb277 1051@opindex std
aee96fe9 1052Determine the language standard. This option is currently only
f749a36b
NB
1053supported when compiling C or C++. A value for this option must be
1054provided; possible values are
3932261a 1055
ee457005 1056@table @samp
aee96fe9
JM
1057@item c89
1058@itemx iso9899:1990
3764f879 1059ISO C90 (same as @option{-ansi}).
3043b30e
ML
1060
1061@item iso9899:199409
3764f879 1062ISO C90 as modified in amendment 1.
3043b30e 1063
49419c8f 1064@item c99
aee96fe9
JM
1065@itemx c9x
1066@itemx iso9899:1999
1067@itemx iso9899:199x
1068ISO C99. Note that this standard is not yet fully supported; see
1069@w{@uref{http://gcc.gnu.org/c99status.html}} for more information. The
1070names @samp{c9x} and @samp{iso9899:199x} are deprecated.
3043b30e
ML
1071
1072@item gnu89
3764f879 1073Default, ISO C90 plus GNU extensions (including some C99 features).
3043b30e 1074
49419c8f 1075@item gnu99
31775d31 1076@itemx gnu9x
d15a05b3
EC
1077ISO C99 plus GNU extensions. When ISO C99 is fully implemented in GCC,
1078this will become the default. The name @samp{gnu9x} is deprecated.
49419c8f 1079
f749a36b
NB
1080@item c++98
1081The 1998 ISO C++ standard plus amendments.
1082
1083@item gnu++98
1084The same as @option{-std=c++98} plus GNU extensions. This is the
1085default for C++ code.
ee457005 1086@end table
3043b30e
ML
1087
1088Even when this option is not specified, you can still use some of the
1089features of newer standards in so far as they do not conflict with
1090previous C standards. For example, you may use @code{__restrict__} even
bedc7537 1091when @option{-std=c99} is not specified.
3932261a 1092
5490d604 1093The @option{-std} options specifying some version of ISO C have the same
3764f879 1094effects as @option{-ansi}, except that features that were not in ISO C90
5490d604
JM
1095but are in the specified version (for example, @samp{//} comments and
1096the @code{inline} keyword in ISO C99) are not disabled.
1097
c1030c7c
JM
1098@xref{Standards,,Language Standards Supported by GCC}, for details of
1099these standard versions.
1100
b1018de6
AO
1101@item -aux-info @var{filename}
1102@opindex aux-info
1103Output to the given filename prototyped declarations for all functions
1104declared and/or defined in a translation unit, including those in header
161d7b59 1105files. This option is silently ignored in any language other than C@.
b1018de6
AO
1106
1107Besides declarations, the file indicates, in comments, the origin of
1108each declaration (source file and line), whether the declaration was
1109implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1110@samp{O} for old, respectively, in the first character after the line
1111number and the colon), and whether it came from a declaration or a
1112definition (@samp{C} or @samp{F}, respectively, in the following
1113character). In the case of function definitions, a K&R-style list of
1114arguments followed by their declarations is also provided, inside
1115comments, after the declaration.
1116
74291a4b 1117@item -fno-asm
cd3bb277 1118@opindex fno-asm
74291a4b
MM
1119Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1120keyword, so that code can use these words as identifiers. You can use
1121the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
630d3d5a 1122instead. @option{-ansi} implies @option{-fno-asm}.
74291a4b
MM
1123
1124In C++, this switch only affects the @code{typeof} keyword, since
1125@code{asm} and @code{inline} are standard keywords. You may want to
630d3d5a 1126use the @option{-fno-gnu-keywords} flag instead, which has the same
5490d604
JM
1127effect. In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1128switch only affects the @code{asm} and @code{typeof} keywords, since
1129@code{inline} is a standard keyword in ISO C99.
74291a4b
MM
1130
1131@item -fno-builtin
a3926fe1 1132@itemx -fno-builtin-@var{function}
cd3bb277 1133@opindex fno-builtin
c771326b
JM
1134@cindex built-in functions
1135Don't recognize built-in functions that do not begin with
01702459 1136@samp{__builtin_} as prefix. @xref{Other Builtins,,Other built-in
f0523f02 1137functions provided by GCC}, for details of the functions affected,
c771326b 1138including those which are not built-in functions when @option{-ansi} or
5490d604
JM
1139@option{-std} options for strict ISO C conformance are used because they
1140do not have an ISO standard meaning.
74291a4b 1141
c771326b 1142GCC normally generates special code to handle certain built-in functions
74291a4b
MM
1143more efficiently; for instance, calls to @code{alloca} may become single
1144instructions that adjust the stack directly, and calls to @code{memcpy}
1145may become inline copy loops. The resulting code is often both smaller
1146and faster, but since the function calls no longer appear as such, you
1147cannot set a breakpoint on those calls, nor can you change the behavior
1148of the functions by linking with a different library.
1149
a3926fe1
RS
1150With the @option{-fno-builtin-@var{function}} option
1151only the built-in function @var{function} is
7d14c755
JM
1152disabled. @var{function} must not begin with @samp{__builtin_}. If a
1153function is named this is not built-in in this version of GCC, this
1154option is ignored. There is no corresponding
1155@option{-fbuiltin-@var{function}} option; if you wish to enable
1156built-in functions selectively when using @option{-fno-builtin} or
1157@option{-ffreestanding}, you may define macros such as:
1158
1159@smallexample
1160#define abs(n) __builtin_abs ((n))
1161#define strcpy(d, s) __builtin_strcpy ((d), (s))
1162@end smallexample
1163
861bb6c1 1164@item -fhosted
cd3bb277 1165@opindex fhosted
861bb6c1
JL
1166@cindex hosted environment
1167
1168Assert that compilation takes place in a hosted environment. This implies
630d3d5a 1169@option{-fbuiltin}. A hosted environment is one in which the
861bb6c1
JL
1170entire standard library is available, and in which @code{main} has a return
1171type of @code{int}. Examples are nearly everything except a kernel.
630d3d5a 1172This is equivalent to @option{-fno-freestanding}.
861bb6c1
JL
1173
1174@item -ffreestanding
cd3bb277 1175@opindex ffreestanding
861bb6c1
JL
1176@cindex hosted environment
1177
1178Assert that compilation takes place in a freestanding environment. This
630d3d5a 1179implies @option{-fno-builtin}. A freestanding environment
861bb6c1
JL
1180is one in which the standard library may not exist, and program startup may
1181not necessarily be at @code{main}. The most obvious example is an OS kernel.
630d3d5a 1182This is equivalent to @option{-fno-hosted}.
861bb6c1 1183
c1030c7c
JM
1184@xref{Standards,,Language Standards Supported by GCC}, for details of
1185freestanding and hosted environments.
1186
750491fc
RH
1187@item -fms-extensions
1188@opindex fms-extensions
1189Accept some non-standard constructs used in Microsoft header files.
1190
74291a4b 1191@item -trigraphs
cd3bb277 1192@opindex trigraphs
3bce8a01
NB
1193Support ISO C trigraphs. The @option{-ansi} option (and @option{-std}
1194options for strict ISO C conformance) implies @option{-trigraphs}.
74291a4b 1195
8a035a6b
AH
1196@item -no-integrated-cpp
1197@opindex no-integrated-cpp
1198Performs a compilation in two passes: preprocessing and compiling. This
1199option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1200@option{-B} option. The user supplied compilation step can then add in
1201an additional preprocessing step after normal preprocessing but before
1202compiling. The default is to use the integrated cpp (internal cpp)
1203
1204The semantics of this option will change if "cc1", "cc1plus", and
1205"cc1obj" are merged.
1206
74291a4b
MM
1207@cindex traditional C language
1208@cindex C language, traditional
1209@item -traditional
f458d1d5 1210@itemx -traditional-cpp
cd3bb277 1211@opindex traditional-cpp
f458d1d5
ZW
1212@opindex traditional
1213Formerly, these options caused GCC to attempt to emulate a pre-standard
1214C compiler. They are now only supported with the @option{-E} switch.
1215The preprocessor continues to support a pre-standard mode. See the GNU
1216CPP manual for details.
74291a4b
MM
1217
1218@item -fcond-mismatch
cd3bb277 1219@opindex fcond-mismatch
74291a4b 1220Allow conditional expressions with mismatched types in the second and
a7537031
JM
1221third arguments. The value of such an expression is void. This option
1222is not supported for C++.
74291a4b
MM
1223
1224@item -funsigned-char
cd3bb277 1225@opindex funsigned-char
74291a4b
MM
1226Let the type @code{char} be unsigned, like @code{unsigned char}.
1227
1228Each kind of machine has a default for what @code{char} should
1229be. It is either like @code{unsigned char} by default or like
1230@code{signed char} by default.
1231
1232Ideally, a portable program should always use @code{signed char} or
1233@code{unsigned char} when it depends on the signedness of an object.
1234But many programs have been written to use plain @code{char} and
1235expect it to be signed, or expect it to be unsigned, depending on the
1236machines they were written for. This option, and its inverse, let you
1237make such a program work with the opposite default.
1238
1239The type @code{char} is always a distinct type from each of
1240@code{signed char} or @code{unsigned char}, even though its behavior
1241is always just like one of those two.
1242
1243@item -fsigned-char
cd3bb277 1244@opindex fsigned-char
74291a4b
MM
1245Let the type @code{char} be signed, like @code{signed char}.
1246
630d3d5a
JM
1247Note that this is equivalent to @option{-fno-unsigned-char}, which is
1248the negative form of @option{-funsigned-char}. Likewise, the option
1249@option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
74291a4b 1250
74291a4b
MM
1251@item -fsigned-bitfields
1252@itemx -funsigned-bitfields
1253@itemx -fno-signed-bitfields
1254@itemx -fno-unsigned-bitfields
cd3bb277
JM
1255@opindex fsigned-bitfields
1256@opindex funsigned-bitfields
1257@opindex fno-signed-bitfields
1258@opindex fno-unsigned-bitfields
c771326b 1259These options control whether a bit-field is signed or unsigned, when the
74291a4b 1260declaration does not use either @code{signed} or @code{unsigned}. By
c771326b 1261default, such a bit-field is signed, because this is consistent: the
74291a4b 1262basic integer types such as @code{int} are signed types.
74291a4b
MM
1263@end table
1264
1265@node C++ Dialect Options
1266@section Options Controlling C++ Dialect
1267
1268@cindex compiler options, C++
1269@cindex C++ options, command line
1270@cindex options, C++
1271This section describes the command-line options that are only meaningful
1272for C++ programs; but you can also use most of the GNU compiler options
1273regardless of what language your program is in. For example, you
1274might compile a file @code{firstClass.C} like this:
1275
3ab51846 1276@smallexample
1dc5fc4b 1277g++ -g -frepo -O -c firstClass.C
3ab51846 1278@end smallexample
74291a4b
MM
1279
1280@noindent
630d3d5a 1281In this example, only @option{-frepo} is an option meant
74291a4b 1282only for C++ programs; you can use the other options with any
161d7b59 1283language supported by GCC@.
74291a4b
MM
1284
1285Here is a list of options that are @emph{only} for compiling C++ programs:
1286
2642624b 1287@table @gcctabopt
2d3e278d
MM
1288
1289@item -fabi-version=@var{n}
1290@opindex fabi-version
57702a80
MM
1291Use version @var{n} of the C++ ABI. Version 2 is the version of the
1292C++ ABI that first appeared in G++ 3.4. Version 1 is the version of
1293the C++ ABI that first appeared in G++ 3.2. Version 0 will always be
1294the version that conforms most closely to the C++ ABI specification.
1295Therefore, the ABI obtained using version 0 will change as ABI bugs
1296are fixed.
2d3e278d 1297
d150ccef 1298The default is version 2.
46c83bce 1299
74291a4b 1300@item -fno-access-control
cd3bb277 1301@opindex fno-access-control
74291a4b
MM
1302Turn off all access checking. This switch is mainly useful for working
1303around bugs in the access control code.
1304
74291a4b 1305@item -fcheck-new
cd3bb277 1306@opindex fcheck-new
74291a4b 1307Check that the pointer returned by @code{operator new} is non-null
6d9c4c83
JW
1308before attempting to modify the storage allocated. This check is
1309normally unnecessary because the C++ standard specifies that
1310@code{operator new} will only return @code{0} if it is declared
1311@samp{throw()}, in which case the compiler will always check the
1312return value even without this option. In all other cases, when
1313@code{operator new} has a non-empty exception specification, memory
1314exhaustion is signalled by throwing @code{std::bad_alloc}. See also
1315@samp{new (nothrow)}.
1dc5fc4b 1316
74291a4b 1317@item -fconserve-space
cd3bb277 1318@opindex fconserve-space
74291a4b
MM
1319Put uninitialized or runtime-initialized global variables into the
1320common segment, as C does. This saves space in the executable at the
1321cost of not diagnosing duplicate definitions. If you compile with this
1322flag and your program mysteriously crashes after @code{main()} has
1323completed, you may have an object that is being destroyed twice because
1324two definitions were merged.
1325
1dc5fc4b
JM
1326This option is no longer useful on most targets, now that support has
1327been added for putting variables into BSS without making them common.
1328
02f52e19 1329@item -fno-const-strings
cd3bb277 1330@opindex fno-const-strings
fcca588c
MM
1331Give string constants type @code{char *} instead of type @code{const
1332char *}. By default, G++ uses type @code{const char *} as required by
630d3d5a 1333the standard. Even if you use @option{-fno-const-strings}, you cannot
3521b33c 1334actually modify the value of a string constant.
fcca588c
MM
1335
1336This option might be removed in a future release of G++. For maximum
1337portability, you should structure your code so that it works with
1338string constants that have type @code{const char *}.
1339
1dc5fc4b 1340@item -fno-elide-constructors
cd3bb277 1341@opindex fno-elide-constructors
1dc5fc4b
JM
1342The C++ standard allows an implementation to omit creating a temporary
1343which is only used to initialize another object of the same type.
aee96fe9 1344Specifying this option disables that optimization, and forces G++ to
1dc5fc4b 1345call the copy constructor in all cases.
74291a4b 1346
dd1ba632 1347@item -fno-enforce-eh-specs
cd3bb277 1348@opindex fno-enforce-eh-specs
dd1ba632
JM
1349Don't check for violation of exception specifications at runtime. This
1350option violates the C++ standard, but may be useful for reducing code
1351size in production builds, much like defining @samp{NDEBUG}. The compiler
1352will still optimize based on the exception specifications.
1353
74291a4b 1354@item -ffor-scope
8c81598d 1355@itemx -fno-for-scope
cd3bb277
JM
1356@opindex ffor-scope
1357@opindex fno-for-scope
695ac33f 1358If @option{-ffor-scope} is specified, the scope of variables declared in
74291a4b 1359a @i{for-init-statement} is limited to the @samp{for} loop itself,
34527c47 1360as specified by the C++ standard.
695ac33f 1361If @option{-fno-for-scope} is specified, the scope of variables declared in
74291a4b 1362a @i{for-init-statement} extends to the end of the enclosing scope,
aee96fe9 1363as was the case in old versions of G++, and other (traditional)
74291a4b
MM
1364implementations of C++.
1365
1366The default if neither flag is given to follow the standard,
1367but to allow and give a warning for old-style code that would
1368otherwise be invalid, or have different behavior.
1369
1370@item -fno-gnu-keywords
cd3bb277 1371@opindex fno-gnu-keywords
9762e8a4 1372Do not recognize @code{typeof} as a keyword, so that code can use this
767094dd 1373word as an identifier. You can use the keyword @code{__typeof__} instead.
630d3d5a 1374@option{-ansi} implies @option{-fno-gnu-keywords}.
74291a4b 1375
1dc5fc4b 1376@item -fno-implicit-templates
cd3bb277 1377@opindex fno-implicit-templates
bba975d4 1378Never emit code for non-inline templates which are instantiated
e979f9e8 1379implicitly (i.e.@: by use); only emit code for explicit instantiations.
bba975d4
JM
1380@xref{Template Instantiation}, for more information.
1381
1382@item -fno-implicit-inline-templates
cd3bb277 1383@opindex fno-implicit-inline-templates
bba975d4
JM
1384Don't emit code for implicit instantiations of inline templates, either.
1385The default is to handle inlines differently so that compiles with and
1386without optimization will need the same set of explicit instantiations.
1dc5fc4b 1387
74291a4b 1388@item -fno-implement-inlines
cd3bb277 1389@opindex fno-implement-inlines
74291a4b
MM
1390To save space, do not emit out-of-line copies of inline functions
1391controlled by @samp{#pragma implementation}. This will cause linker
1392errors if these functions are not inlined everywhere they are called.
1393
631cf95d 1394@item -fms-extensions
cd3bb277 1395@opindex fms-extensions
32fb1fb2
PE
1396Disable pedantic warnings about constructs used in MFC, such as implicit
1397int and getting a pointer to member function via non-standard syntax.
631cf95d 1398
fcca588c 1399@item -fno-nonansi-builtins
cd3bb277 1400@opindex fno-nonansi-builtins
c771326b 1401Disable built-in declarations of functions that are not mandated by
161d7b59 1402ANSI/ISO C@. These include @code{ffs}, @code{alloca}, @code{_exit},
fcca588c
MM
1403@code{index}, @code{bzero}, @code{conjf}, and other related functions.
1404
775afb25 1405@item -fno-operator-names
cd3bb277 1406@opindex fno-operator-names
775afb25 1407Do not treat the operator name keywords @code{and}, @code{bitand},
74291a4b 1408@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
775afb25 1409synonyms as keywords.
74291a4b 1410
4f8b4fd9 1411@item -fno-optional-diags
cd3bb277 1412@opindex fno-optional-diags
4f8b4fd9 1413Disable diagnostics that the standard says a compiler does not need to
aee96fe9 1414issue. Currently, the only such diagnostic issued by G++ is the one for
bba975d4 1415a name having multiple meanings within a class.
4f8b4fd9 1416
8c7707b0 1417@item -fpermissive
cd3bb277 1418@opindex fpermissive
4a386498
MM
1419Downgrade some diagnostics about nonconformant code from errors to
1420warnings. Thus, using @option{-fpermissive} will allow some
1421nonconforming code to compile.
8c7707b0 1422
8c81598d 1423@item -frepo
cd3bb277 1424@opindex frepo
9c34dbbf
ZW
1425Enable automatic template instantiation at link time. This option also
1426implies @option{-fno-implicit-templates}. @xref{Template
1427Instantiation}, for more information.
8c81598d 1428
8c7707b0 1429@item -fno-rtti
cd3bb277 1430@opindex fno-rtti
a7fbfcf9
JM
1431Disable generation of information about every class with virtual
1432functions for use by the C++ runtime type identification features
1433(@samp{dynamic_cast} and @samp{typeid}). If you don't use those parts
1434of the language, you can save some space by using this flag. Note that
1435exception handling uses the same information, but it will generate it as
1436needed.
8c7707b0 1437
fcca588c 1438@item -fstats
cd3bb277 1439@opindex fstats
fcca588c
MM
1440Emit statistics about front-end processing at the end of the compilation.
1441This information is generally only useful to the G++ development team.
1442
1dc5fc4b 1443@item -ftemplate-depth-@var{n}
cd3bb277 1444@opindex ftemplate-depth
1dc5fc4b
JM
1445Set the maximum instantiation depth for template classes to @var{n}.
1446A limit on the template instantiation depth is needed to detect
767094dd 1447endless recursions during template class instantiation. ANSI/ISO C++
1dc5fc4b
JM
1448conforming programs must not rely on a maximum depth greater than 17.
1449
fc693822 1450@item -fuse-cxa-atexit
cd3bb277 1451@opindex fuse-cxa-atexit
fc693822
MM
1452Register destructors for objects with static storage duration with the
1453@code{__cxa_atexit} function rather than the @code{atexit} function.
1454This option is required for fully standards-compliant handling of static
1455destructors, but will only work if your C library supports
1456@code{__cxa_atexit}.
1457
02f52e19 1458@item -fno-weak
cd3bb277 1459@opindex fno-weak
90ecce3e 1460Do not use weak symbol support, even if it is provided by the linker.
fcca588c
MM
1461By default, G++ will use weak symbols if they are available. This
1462option exists only for testing, and should not be used by end-users;
1463it will result in inferior code and has no benefits. This option may
1464be removed in a future release of G++.
1465
74291a4b 1466@item -nostdinc++
cd3bb277 1467@opindex nostdinc++
74291a4b
MM
1468Do not search for header files in the standard directories specific to
1469C++, but do still search the other standard directories. (This option
e5e809f4 1470is used when building the C++ library.)
74291a4b
MM
1471@end table
1472
1473In addition, these optimization, warning, and code generation options
1474have meanings only for C++ programs:
1475
2642624b 1476@table @gcctabopt
74291a4b 1477@item -fno-default-inline
cd3bb277 1478@opindex fno-default-inline
74291a4b 1479Do not assume @samp{inline} for functions defined inside a class scope.
1dc5fc4b
JM
1480@xref{Optimize Options,,Options That Control Optimization}. Note that these
1481functions will have linkage like inline functions; they just won't be
1482inlined by default.
74291a4b 1483
eca7f13c
MM
1484@item -Wabi @r{(C++ only)}
1485@opindex Wabi
1486Warn when G++ generates code that is probably not compatible with the
1487vendor-neutral C++ ABI. Although an effort has been made to warn about
daf2f129 1488all such cases, there are probably some cases that are not warned about,
eca7f13c
MM
1489even though G++ is generating incompatible code. There may also be
1490cases where warnings are emitted even though the code that is generated
1491will be compatible.
1492
1493You should rewrite your code to avoid these warnings if you are
1494concerned about the fact that code generated by G++ may not be binary
1495compatible with code generated by other compilers.
1496
3364c33b 1497The known incompatibilities at this point include:
eca7f13c
MM
1498
1499@itemize @bullet
1500
1501@item
1502Incorrect handling of tail-padding for bit-fields. G++ may attempt to
1503pack data into the same byte as a base class. For example:
1504
1505@smallexample
1506struct A @{ virtual void f(); int f1 : 1; @};
1507struct B : public A @{ int f2 : 1; @};
1508@end smallexample
1509
1510@noindent
1511In this case, G++ will place @code{B::f2} into the same byte
daf2f129 1512as@code{A::f1}; other compilers will not. You can avoid this problem
eca7f13c
MM
1513by explicitly padding @code{A} so that its size is a multiple of the
1514byte size on your platform; that will cause G++ and other compilers to
1515layout @code{B} identically.
1516
1517@item
1518Incorrect handling of tail-padding for virtual bases. G++ does not use
1519tail padding when laying out virtual bases. For example:
1520
1521@smallexample
1522struct A @{ virtual void f(); char c1; @};
1523struct B @{ B(); char c2; @};
1524struct C : public A, public virtual B @{@};
1525@end smallexample
1526
1527@noindent
1528In this case, G++ will not place @code{B} into the tail-padding for
1529@code{A}; other compilers will. You can avoid this problem by
1530explicitly padding @code{A} so that its size is a multiple of its
1531alignment (ignoring virtual base classes); that will cause G++ and other
1532compilers to layout @code{C} identically.
1533
2d3e278d
MM
1534@item
1535Incorrect handling of bit-fields with declared widths greater than that
1536of their underlying types, when the bit-fields appear in a union. For
1537example:
1538
1539@smallexample
1540union U @{ int i : 4096; @};
1541@end smallexample
1542
1543@noindent
1544Assuming that an @code{int} does not have 4096 bits, G++ will make the
1545union too small by the number of bits in an @code{int}.
1546
956d9305
MM
1547@item
1548Empty classes can be placed at incorrect offsets. For example:
daf2f129 1549
956d9305
MM
1550@smallexample
1551struct A @{@};
1552
1553struct B @{
1554 A a;
1555 virtual void f ();
1556@};
1557
1558struct C : public B, public A @{@};
1559@end smallexample
1560
1561@noindent
c0478a66 1562G++ will place the @code{A} base class of @code{C} at a nonzero offset;
956d9305
MM
1563it should be placed at offset zero. G++ mistakenly believes that the
1564@code{A} data member of @code{B} is already at offset zero.
1565
6397d80b
MM
1566@item
1567Names of template functions whose types involve @code{typename} or
1568template template parameters can be mangled incorrectly.
1569
1570@smallexample
1571template <typename Q>
1572void f(typename Q::X) @{@}
1573
1574template <template <typename> class Q>
1575void f(typename Q<int>::X) @{@}
1576@end smallexample
1577
1578@noindent
3364c33b 1579Instantiations of these templates may be mangled incorrectly.
6397d80b 1580
eca7f13c
MM
1581@end itemize
1582
aee96fe9 1583@item -Wctor-dtor-privacy @r{(C++ only)}
cd3bb277 1584@opindex Wctor-dtor-privacy
9eff22bc
LG
1585Warn when a class seems unusable because all the constructors or
1586destructors in that class are private, and it has neither friends nor
78d0a54d 1587public static member functions.
bba975d4 1588
aee96fe9 1589@item -Wnon-virtual-dtor @r{(C++ only)}
cd3bb277 1590@opindex Wnon-virtual-dtor
9eff22bc
LG
1591Warn when a class appears to be polymorphic, thereby requiring a virtual
1592destructor, yet it declares a non-virtual one.
bd8f9aec 1593This warning is enabled by @option{-Wall}.
bba975d4 1594
aee96fe9 1595@item -Wreorder @r{(C++ only)}
cd3bb277 1596@opindex Wreorder
bba975d4
JM
1597@cindex reordering, warning
1598@cindex warning for reordering of member initializers
1599Warn when the order of member initializers given in the code does not
1600match the order in which they must be executed. For instance:
1601
1602@smallexample
1603struct A @{
1604 int i;
1605 int j;
1606 A(): j (0), i (1) @{ @}
1607@};
1608@end smallexample
1609
9eff22bc
LG
1610The compiler will rearrange the member initializers for @samp{i}
1611and @samp{j} to match the declaration order of the members, emitting
1612a warning to that effect. This warning is enabled by @option{-Wall}.
bba975d4
JM
1613@end table
1614
630d3d5a 1615The following @option{-W@dots{}} options are not affected by @option{-Wall}.
bba975d4 1616
2642624b 1617@table @gcctabopt
aee96fe9 1618@item -Weffc++ @r{(C++ only)}
cd3bb277 1619@opindex Weffc++
77f6c1eb
RS
1620Warn about violations of the following style guidelines from Scott Meyers'
1621@cite{Effective C++} book:
1622
1623@itemize @bullet
1624@item
1625Item 11: Define a copy constructor and an assignment operator for classes
1626with dynamically allocated memory.
1627
1628@item
1629Item 12: Prefer initialization to assignment in constructors.
1630
1631@item
1632Item 14: Make destructors virtual in base classes.
1633
1634@item
1635Item 15: Have @code{operator=} return a reference to @code{*this}.
1636
1637@item
1638Item 23: Don't try to return a reference when you must return an object.
1639
1640@end itemize
1641
daf2f129 1642Also warn about violations of the following style guidelines from
9eff22bc 1643Scott Meyers' @cite{More Effective C++} book:
77f6c1eb
RS
1644
1645@itemize @bullet
1646@item
1647Item 6: Distinguish between prefix and postfix forms of increment and
1648decrement operators.
1649
1650@item
1651Item 7: Never overload @code{&&}, @code{||}, or @code{,}.
1652
1653@end itemize
1654
9eff22bc
LG
1655When selecting this option, be aware that the standard library
1656headers do not obey all of these guidelines; use @samp{grep -v}
77f6c1eb 1657to filter out those warnings.
bba975d4 1658
aee96fe9 1659@item -Wno-deprecated @r{(C++ only)}
cd3bb277 1660@opindex Wno-deprecated
767094dd 1661Do not warn about usage of deprecated features. @xref{Deprecated Features}.
2de45c06 1662
aee96fe9 1663@item -Wno-non-template-friend @r{(C++ only)}
cd3bb277 1664@opindex Wno-non-template-friend
bba975d4 1665Disable warnings when non-templatized friend functions are declared
9eff22bc 1666within a template. Since the advent of explicit template specification
aee96fe9 1667support in G++, if the name of the friend is an unqualified-id (i.e.,
bba975d4 1668@samp{friend foo(int)}), the C++ language specification demands that the
767094dd 1669friend declare or define an ordinary, nontemplate function. (Section
aee96fe9 167014.5.3). Before G++ implemented explicit specification, unqualified-ids
bba975d4 1671could be interpreted as a particular specialization of a templatized
767094dd 1672function. Because this non-conforming behavior is no longer the default
aee96fe9 1673behavior for G++, @option{-Wnon-template-friend} allows the compiler to
9eff22bc 1674check existing code for potential trouble spots and is on by default.
2228d450 1675This new compiler behavior can be turned off with
630d3d5a 1676@option{-Wno-non-template-friend} which keeps the conformant compiler code
2228d450 1677but disables the helpful warning.
bba975d4 1678
aee96fe9 1679@item -Wold-style-cast @r{(C++ only)}
cd3bb277 1680@opindex Wold-style-cast
323728aa
NS
1681Warn if an old-style (C-style) cast to a non-void type is used within
1682a C++ program. The new-style casts (@samp{static_cast},
1683@samp{reinterpret_cast}, and @samp{const_cast}) are less vulnerable to
9eff22bc 1684unintended effects and much easier to search for.
bba975d4 1685
aee96fe9 1686@item -Woverloaded-virtual @r{(C++ only)}
cd3bb277 1687@opindex Woverloaded-virtual
bba975d4
JM
1688@cindex overloaded virtual fn, warning
1689@cindex warning for overloaded virtual fn
3747f3dc
MM
1690Warn when a function declaration hides virtual functions from a
1691base class. For example, in:
1692
1693@smallexample
1694struct A @{
1695 virtual void f();
1696@};
1697
1698struct B: public A @{
1699 void f(int);
1700@};
1701@end smallexample
1702
1703the @code{A} class version of @code{f} is hidden in @code{B}, and code
9eff22bc 1704like:
3747f3dc
MM
1705
1706@smallexample
1707B* b;
1708b->f();
1709@end smallexample
1710
1711will fail to compile.
bba975d4 1712
aee96fe9 1713@item -Wno-pmf-conversions @r{(C++ only)}
cd3bb277 1714@opindex Wno-pmf-conversions
bba975d4
JM
1715Disable the diagnostic for converting a bound pointer to member function
1716to a plain pointer.
1717
aee96fe9 1718@item -Wsign-promo @r{(C++ only)}
cd3bb277 1719@opindex Wsign-promo
bba975d4 1720Warn when overload resolution chooses a promotion from unsigned or
2eac577f 1721enumerated type to a signed type, over a conversion to an unsigned type of
aee96fe9 1722the same size. Previous versions of G++ would try to preserve
bba975d4
JM
1723unsignedness, but the standard mandates the current behavior.
1724
aee96fe9 1725@item -Wsynth @r{(C++ only)}
cd3bb277 1726@opindex Wsynth
bba975d4
JM
1727@cindex warning for synthesized methods
1728@cindex synthesized methods, warning
aee96fe9 1729Warn when G++'s synthesis behavior does not match that of cfront. For
bba975d4
JM
1730instance:
1731
1732@smallexample
1733struct A @{
1734 operator int ();
1735 A& operator = (int);
1736@};
1737
1738main ()
1739@{
1740 A a,b;
1741 a = b;
1742@}
1743@end smallexample
74291a4b 1744
aee96fe9 1745In this example, G++ will synthesize a default @samp{A& operator =
bba975d4 1746(const A&);}, while cfront will use the user-defined @samp{operator =}.
74291a4b
MM
1747@end table
1748
60de6385
SS
1749@node Objective-C Dialect Options
1750@section Options Controlling Objective-C Dialect
1751
1752@cindex compiler options, Objective-C
1753@cindex Objective-C options, command line
1754@cindex options, Objective-C
264fa2db
ZL
1755(NOTE: This manual does not describe the Objective-C language itself. See
1756@w{@uref{http://gcc.gnu.org/readings.html}} for references.)
1757
60de6385 1758This section describes the command-line options that are only meaningful
9eff22bc 1759for Objective-C programs, but you can also use most of the GNU compiler
60de6385
SS
1760options regardless of what language your program is in. For example,
1761you might compile a file @code{some_class.m} like this:
1762
3ab51846 1763@smallexample
60de6385 1764gcc -g -fgnu-runtime -O -c some_class.m
3ab51846 1765@end smallexample
60de6385
SS
1766
1767@noindent
9eff22bc 1768In this example, @option{-fgnu-runtime} is an option meant only for
60de6385 1769Objective-C programs; you can use the other options with any language
161d7b59 1770supported by GCC@.
60de6385
SS
1771
1772Here is a list of options that are @emph{only} for compiling Objective-C
1773programs:
1774
1775@table @gcctabopt
630d3d5a 1776@item -fconstant-string-class=@var{class-name}
cd3bb277 1777@opindex fconstant-string-class
630d3d5a 1778Use @var{class-name} as the name of the class to instantiate for each
695ac33f 1779literal string specified with the syntax @code{@@"@dots{}"}. The default
264fa2db
ZL
1780class name is @code{NXConstantString} if the GNU runtime is being used, and
1781@code{NSConstantString} if the NeXT runtime is being used (see below). The
1782@option{-fconstant-cfstrings} option, if also present, will override the
1783@option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
1784to be laid out as constant CoreFoundation strings.
60de6385
SS
1785
1786@item -fgnu-runtime
cd3bb277 1787@opindex fgnu-runtime
60de6385
SS
1788Generate object code compatible with the standard GNU Objective-C
1789runtime. This is the default for most types of systems.
1790
1791@item -fnext-runtime
cd3bb277 1792@opindex fnext-runtime
60de6385 1793Generate output compatible with the NeXT runtime. This is the default
1f676100
NP
1794for NeXT-based systems, including Darwin and Mac OS X@. The macro
1795@code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
1796used.
60de6385 1797
264fa2db 1798@item -fno-nil-receivers
5ad7ae7f 1799@opindex fno-nil-receivers
daf2f129
JM
1800Assume that all Objective-C message dispatches (e.g.,
1801@code{[receiver message:arg]}) in this translation unit ensure that the receiver
1802is not @code{nil}. This allows for more efficient entry points in the runtime to be
1803used. Currently, this option is only available in conjunction with
264fa2db
ZL
1804the NeXT runtime on Mac OS X 10.3 and later.
1805
1806@item -fobjc-exceptions
5ad7ae7f 1807@opindex fobjc-exceptions
daf2f129
JM
1808Enable syntactic support for structured exception handling in Objective-C,
1809similar to what is offered by C++ and Java. Currently, this option is only
1810available in conjunction with the NeXT runtime on Mac OS X 10.3 and later.
264fa2db
ZL
1811
1812@smallexample
1813 @@try @{
1814 @dots{}
1815 @@throw expr;
1816 @dots{}
1817 @}
1818 @@catch (AnObjCClass *exc) @{
1819 @dots{}
1820 @@throw expr;
1821 @dots{}
1822 @@throw;
1823 @dots{}
1824 @}
1825 @@catch (AnotherClass *exc) @{
1826 @dots{}
1827 @}
1828 @@catch (id allOthers) @{
1829 @dots{}
1830 @}
1831 @@finally @{
1832 @dots{}
1833 @@throw expr;
1834 @dots{}
1835 @}
1836@end smallexample
1837
1838The @code{@@throw} statement may appear anywhere in an Objective-C or
daf2f129
JM
1839Objective-C++ program; when used inside of a @code{@@catch} block, the
1840@code{@@throw} may appear without an argument (as shown above), in which case
264fa2db
ZL
1841the object caught by the @code{@@catch} will be rethrown.
1842
1843Note that only (pointers to) Objective-C objects may be thrown and
1844caught using this scheme. When an object is thrown, it will be caught
1845by the nearest @code{@@catch} clause capable of handling objects of that type,
daf2f129
JM
1846analogously to how @code{catch} blocks work in C++ and Java. A
1847@code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
264fa2db
ZL
1848any and all Objective-C exceptions not caught by previous @code{@@catch}
1849clauses (if any).
1850
1851The @code{@@finally} clause, if present, will be executed upon exit from the
1852immediately preceding @code{@@try @dots{} @@catch} section. This will happen
1853regardless of whether any exceptions are thrown, caught or rethrown
1854inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
1855of the @code{finally} clause in Java.
1856
1857There are several caveats to using the new exception mechanism:
1858
1859@itemize @bullet
1860@item
daf2f129 1861Although currently designed to be binary compatible with @code{NS_HANDLER}-style
264fa2db
ZL
1862idioms provided by the @code{NSException} class, the new
1863exceptions can only be used on Mac OS X 10.3 (Panther) and later
1864systems, due to additional functionality needed in the (NeXT) Objective-C
1865runtime.
1866
1867@item
1868As mentioned above, the new exceptions do not support handling
daf2f129 1869types other than Objective-C objects. Furthermore, when used from
264fa2db
ZL
1870Objective-C++, the Objective-C exception model does not interoperate with C++
1871exceptions at this time. This means you cannot @code{@@throw} an exception
daf2f129 1872from Objective-C and @code{catch} it in C++, or vice versa
264fa2db
ZL
1873(i.e., @code{throw @dots{} @@catch}).
1874@end itemize
daf2f129 1875
264fa2db
ZL
1876The @option{-fobjc-exceptions} switch also enables the use of synchronization
1877blocks for thread-safe execution:
1878
1879@smallexample
1880 @@synchronized (ObjCClass *guard) @{
1881 @dots{}
1882 @}
1883@end smallexample
1884
1885Upon entering the @code{@@synchronized} block, a thread of execution shall
1886first check whether a lock has been placed on the corresponding @code{guard}
1887object by another thread. If it has, the current thread shall wait until
daf2f129 1888the other thread relinquishes its lock. Once @code{guard} becomes available,
264fa2db
ZL
1889the current thread will place its own lock on it, execute the code contained in
1890the @code{@@synchronized} block, and finally relinquish the lock (thereby
1891making @code{guard} available to other threads).
1892
1893Unlike Java, Objective-C does not allow for entire methods to be marked
1894@code{@@synchronized}. Note that throwing exceptions out of
1895@code{@@synchronized} blocks is allowed, and will cause the guarding object
1896to be unlocked properly.
1897
1898@item -freplace-objc-classes
5ad7ae7f 1899@opindex freplace-objc-classes
264fa2db
ZL
1900Emit a special marker instructing @command{ld(1)} not to statically link in
1901the resulting object file, and allow @command{dyld(1)} to load it in at
1902run time instead. This is used in conjunction with the Fix-and-Continue
daf2f129 1903debugging mode, where the object file in question may be recompiled and
264fa2db
ZL
1904dynamically reloaded in the course of program execution, without the need
1905to restart the program itself. Currently, Fix-and-Continue functionality
daf2f129 1906is only available in conjunction with the NeXT runtime on Mac OS X 10.3
264fa2db
ZL
1907and later.
1908
1909@item -fzero-link
5ad7ae7f 1910@opindex fzero-link
264fa2db
ZL
1911When compiling for the NeXT runtime, the compiler ordinarily replaces calls
1912to @code{objc_getClass("@dots{}")} (when the name of the class is known at
1913compile time) with static class references that get initialized at load time,
1914which improves run-time performance. Specifying the @option{-fzero-link} flag
1915suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
daf2f129 1916to be retained. This is useful in Zero-Link debugging mode, since it allows
264fa2db
ZL
1917for individual class implementations to be modified during program execution.
1918
60de6385 1919@item -gen-decls
cd3bb277 1920@opindex gen-decls
60de6385
SS
1921Dump interface declarations for all classes seen in the source file to a
1922file named @file{@var{sourcename}.decl}.
1923
1924@item -Wno-protocol
cd3bb277 1925@opindex Wno-protocol
1f676100
NP
1926If a class is declared to implement a protocol, a warning is issued for
1927every method in the protocol that is not implemented by the class. The
6335b0aa 1928default behavior is to issue a warning for every method not explicitly
1f676100
NP
1929implemented in the class, even if a method implementation is inherited
1930from the superclass. If you use the @code{-Wno-protocol} option, then
1931methods inherited from the superclass are considered to be implemented,
1932and no warning is issued for them.
60de6385
SS
1933
1934@item -Wselector
cd3bb277 1935@opindex Wselector
1f676100
NP
1936Warn if multiple methods of different types for the same selector are
1937found during compilation. The check is performed on the list of methods
1938in the final stage of compilation. Additionally, a check is performed
9eff22bc
LG
1939for each selector appearing in a @code{@@selector(@dots{})}
1940expression, and a corresponding method for that selector has been found
1f676100
NP
1941during compilation. Because these checks scan the method table only at
1942the end of compilation, these warnings are not produced if the final
1943stage of compilation is not reached, for example because an error is
1944found during compilation, or because the @code{-fsyntax-only} option is
1945being used.
1946
1947@item -Wundeclared-selector
1948@opindex Wundeclared-selector
1949Warn if a @code{@@selector(@dots{})} expression referring to an
1950undeclared selector is found. A selector is considered undeclared if no
daf2f129 1951method with that name has been declared before the
9eff22bc
LG
1952@code{@@selector(@dots{})} expression, either explicitly in an
1953@code{@@interface} or @code{@@protocol} declaration, or implicitly in
1954an @code{@@implementation} section. This option always performs its
1955checks as soon as a @code{@@selector(@dots{})} expression is found,
1956while @code{-Wselector} only performs its checks in the final stage of
1957compilation. This also enforces the coding style convention
1f676100 1958that methods and selectors must be declared before being used.
60de6385 1959
7989e4dc 1960@item -print-objc-runtime-info
5ad7ae7f 1961@opindex print-objc-runtime-info
7989e4dc
RO
1962Generate C header describing the largest structure that is passed by
1963value, if any.
60de6385
SS
1964
1965@end table
1966
764dbbf2
GDR
1967@node Language Independent Options
1968@section Options to Control Diagnostic Messages Formatting
1969@cindex options to control diagnostics formatting
1970@cindex diagnostic messages
1971@cindex message formatting
1972
b192711e 1973Traditionally, diagnostic messages have been formatted irrespective of
e979f9e8 1974the output device's aspect (e.g.@: its width, @dots{}). The options described
764dbbf2 1975below can be used to control the diagnostic messages formatting
e979f9e8 1976algorithm, e.g.@: how many characters per line, how often source location
6c0a4eab 1977information should be reported. Right now, only the C++ front end can
764dbbf2 1978honor these options. However it is expected, in the near future, that
6c0a4eab 1979the remaining front ends would be able to digest them correctly.
764dbbf2 1980
2642624b 1981@table @gcctabopt
764dbbf2 1982@item -fmessage-length=@var{n}
cd3bb277 1983@opindex fmessage-length
764dbbf2 1984Try to format error messages so that they fit on lines of about @var{n}
aee96fe9 1985characters. The default is 72 characters for @command{g++} and 0 for the rest of
161d7b59 1986the front ends supported by GCC@. If @var{n} is zero, then no
02f52e19 1987line-wrapping will be done; each error message will appear on a single
764dbbf2
GDR
1988line.
1989
cd3bb277 1990@opindex fdiagnostics-show-location
764dbbf2 1991@item -fdiagnostics-show-location=once
b192711e 1992Only meaningful in line-wrapping mode. Instructs the diagnostic messages
764dbbf2
GDR
1993reporter to emit @emph{once} source location information; that is, in
1994case the message is too long to fit on a single physical line and has to
1995be wrapped, the source location won't be emitted (as prefix) again,
1996over and over, in subsequent continuation lines. This is the default
c21cd8b1 1997behavior.
764dbbf2
GDR
1998
1999@item -fdiagnostics-show-location=every-line
2000Only meaningful in line-wrapping mode. Instructs the diagnostic
2001messages reporter to emit the same source location information (as
4fe9b91c 2002prefix) for physical lines that result from the process of breaking
b192711e 2003a message which is too long to fit on a single line.
764dbbf2
GDR
2004
2005@end table
2006
74291a4b
MM
2007@node Warning Options
2008@section Options to Request or Suppress Warnings
2009@cindex options to control warnings
2010@cindex warning messages
2011@cindex messages, warning
2012@cindex suppressing warnings
2013
2014Warnings are diagnostic messages that report constructions which
2015are not inherently erroneous but which are risky or suggest there
2016may have been an error.
2017
2018You can request many specific warnings with options beginning @samp{-W},
630d3d5a 2019for example @option{-Wimplicit} to request warnings on implicit
74291a4b
MM
2020declarations. Each of these specific warning options also has a
2021negative form beginning @samp{-Wno-} to turn off warnings;
630d3d5a 2022for example, @option{-Wno-implicit}. This manual lists only one of the
74291a4b
MM
2023two forms, whichever is not the default.
2024
62aaa62c
GP
2025The following options control the amount and kinds of warnings produced
2026by GCC; for further, language-specific options also refer to
2027@ref{C++ Dialect Options} and @ref{Objective-C Dialect Options}.
74291a4b 2028
2642624b 2029@table @gcctabopt
74291a4b
MM
2030@cindex syntax checking
2031@item -fsyntax-only
cd3bb277 2032@opindex fsyntax-only
74291a4b
MM
2033Check the code for syntax errors, but don't do anything beyond that.
2034
2035@item -pedantic
cd3bb277 2036@opindex pedantic
074e95e3
JM
2037Issue all the warnings demanded by strict ISO C and ISO C++;
2038reject all programs that use forbidden extensions, and some other
2039programs that do not follow ISO C and ISO C++. For ISO C, follows the
630d3d5a 2040version of the ISO C standard specified by any @option{-std} option used.
74291a4b 2041
074e95e3 2042Valid ISO C and ISO C++ programs should compile properly with or without
5490d604 2043this option (though a rare few will require @option{-ansi} or a
161d7b59 2044@option{-std} option specifying the required version of ISO C)@. However,
b1d16193
JL
2045without this option, certain GNU extensions and traditional C and C++
2046features are supported as well. With this option, they are rejected.
74291a4b 2047
630d3d5a 2048@option{-pedantic} does not cause warning messages for use of the
74291a4b
MM
2049alternate keywords whose names begin and end with @samp{__}. Pedantic
2050warnings are also disabled in the expression that follows
2051@code{__extension__}. However, only system header files should use
2052these escape routes; application programs should avoid them.
2053@xref{Alternate Keywords}.
2054
630d3d5a 2055Some users try to use @option{-pedantic} to check programs for strict ISO
74291a4b 2056C conformance. They soon find that it does not do quite what they want:
c1030c7c 2057it finds some non-ISO practices, but not all---only those for which
074e95e3
JM
2058ISO C @emph{requires} a diagnostic, and some others for which
2059diagnostics have been added.
74291a4b 2060
074e95e3 2061A feature to report any failure to conform to ISO C might be useful in
74291a4b 2062some instances, but would require considerable additional work and would
630d3d5a 2063be quite different from @option{-pedantic}. We don't have plans to
892d0a6d 2064support such a feature in the near future.
74291a4b 2065
91ea548a
JM
2066Where the standard specified with @option{-std} represents a GNU
2067extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
2068corresponding @dfn{base standard}, the version of ISO C on which the GNU
2069extended dialect is based. Warnings from @option{-pedantic} are given
2070where they are required by the base standard. (It would not make sense
2071for such warnings to be given only for features not in the specified GNU
2072C dialect, since by definition the GNU dialects of C include all
2073features the compiler supports with the given option, and there would be
2074nothing to warn about.)
2075
74291a4b 2076@item -pedantic-errors
cd3bb277 2077@opindex pedantic-errors
630d3d5a 2078Like @option{-pedantic}, except that errors are produced rather than
74291a4b
MM
2079warnings.
2080
2081@item -w
cd3bb277 2082@opindex w
74291a4b
MM
2083Inhibit all warning messages.
2084
2085@item -Wno-import
cd3bb277 2086@opindex Wno-import
74291a4b
MM
2087Inhibit warning messages about the use of @samp{#import}.
2088
2089@item -Wchar-subscripts
cd3bb277 2090@opindex Wchar-subscripts
74291a4b
MM
2091Warn if an array subscript has type @code{char}. This is a common cause
2092of error, as programmers often forget that this type is signed on some
2093machines.
2094
2095@item -Wcomment
cd3bb277 2096@opindex Wcomment
74291a4b
MM
2097Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2098comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2099
c65a01af
RG
2100@item -Wfatal-errors
2101@opindex Wfatal-errors
2102This option causes the compiler to abort compilation on the first error
2103occurred rather than trying to keep going and printing further error
2104messages.
2105
74291a4b 2106@item -Wformat
cd3bb277 2107@opindex Wformat
74291a4b
MM
2108Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2109the arguments supplied have types appropriate to the format string
26f6672d
JM
2110specified, and that the conversions specified in the format string make
2111sense. This includes standard functions, and others specified by format
2112attributes (@pxref{Function Attributes}), in the @code{printf},
2113@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2114not in the C standard) families.
74291a4b 2115
8308e0b7 2116The formats are checked against the format features supported by GNU
3764f879 2117libc version 2.2. These include all ISO C90 and C99 features, as well
8308e0b7
JM
2118as features from the Single Unix Specification and some BSD and GNU
2119extensions. Other library implementations may not support all these
2120features; GCC does not support warning about features that go beyond a
630d3d5a
JM
2121particular library's limitations. However, if @option{-pedantic} is used
2122with @option{-Wformat}, warnings will be given about format features not
26f6672d
JM
2123in the selected standard version (but not for @code{strfmon} formats,
2124since those are not in any version of the C standard). @xref{C Dialect
2125Options,,Options Controlling C Dialect}.
8308e0b7 2126
b34c7881
JT
2127Since @option{-Wformat} also checks for null format arguments for
2128several functions, @option{-Wformat} also implies @option{-Wnonnull}.
2129
630d3d5a 2130@option{-Wformat} is included in @option{-Wall}. For more control over some
c76f4e8e 2131aspects of format checking, the options @option{-Wformat-y2k},
e964a556
JT
2132@option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
2133@option{-Wformat-nonliteral}, @option{-Wformat-security}, and
2134@option{-Wformat=2} are available, but are not included in @option{-Wall}.
4d808927 2135
c76f4e8e
JM
2136@item -Wformat-y2k
2137@opindex Wformat-y2k
2138If @option{-Wformat} is specified, also warn about @code{strftime}
4d808927
JM
2139formats which may yield only a two-digit year.
2140
2141@item -Wno-format-extra-args
cd3bb277 2142@opindex Wno-format-extra-args
630d3d5a 2143If @option{-Wformat} is specified, do not warn about excess arguments to a
4d808927
JM
2144@code{printf} or @code{scanf} format function. The C standard specifies
2145that such arguments are ignored.
2146
7e5fb12f
JM
2147Where the unused arguments lie between used arguments that are
2148specified with @samp{$} operand number specifications, normally
2149warnings are still given, since the implementation could not know what
2150type to pass to @code{va_arg} to skip the unused arguments. However,
2151in the case of @code{scanf} formats, this option will suppress the
2152warning if the unused arguments are all pointers, since the Single
2153Unix Specification says that such unused arguments are allowed.
2154
e964a556
JT
2155@item -Wno-format-zero-length
2156@opindex Wno-format-zero-length
2157If @option{-Wformat} is specified, do not warn about zero-length formats.
2158The C standard specifies that zero-length formats are allowed.
2159
4d808927 2160@item -Wformat-nonliteral
cd3bb277 2161@opindex Wformat-nonliteral
630d3d5a 2162If @option{-Wformat} is specified, also warn if the format string is not a
4d808927
JM
2163string literal and so cannot be checked, unless the format function
2164takes its format arguments as a @code{va_list}.
2165
c907e684 2166@item -Wformat-security
cd3bb277 2167@opindex Wformat-security
630d3d5a 2168If @option{-Wformat} is specified, also warn about uses of format
c907e684
JM
2169functions that represent possible security problems. At present, this
2170warns about calls to @code{printf} and @code{scanf} functions where the
2171format string is not a string literal and there are no format arguments,
2172as in @code{printf (foo);}. This may be a security hole if the format
2173string came from untrusted input and contains @samp{%n}. (This is
630d3d5a
JM
2174currently a subset of what @option{-Wformat-nonliteral} warns about, but
2175in future warnings may be added to @option{-Wformat-security} that are not
2176included in @option{-Wformat-nonliteral}.)
c907e684 2177
4d808927 2178@item -Wformat=2
cd3bb277 2179@opindex Wformat=2
630d3d5a
JM
2180Enable @option{-Wformat} plus format checks not included in
2181@option{-Wformat}. Currently equivalent to @samp{-Wformat
c76f4e8e 2182-Wformat-nonliteral -Wformat-security -Wformat-y2k}.
4d808927 2183
b34c7881
JT
2184@item -Wnonnull
2185@opindex Wnonnull
f6d9224f 2186Warn about passing a null pointer for arguments marked as
b34c7881
JT
2187requiring a non-null value by the @code{nonnull} function attribute.
2188
2189@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}. It
2190can be disabled with the @option{-Wno-nonnull} option.
2191
daf2f129 2192@item -Winit-self @r{(C, C++, and Objective-C only)}
3390f9c9 2193@opindex Winit-self
f6d9224f
GP
2194Warn about uninitialized variables which are initialized with themselves.
2195Note this option can only be used with the @option{-Wuninitialized} option,
2196which in turn only works with @option{-O1} and above.
3390f9c9 2197
f6d9224f
GP
2198For example, GCC will warn about @code{i} being uninitialized in the
2199following snippet only when @option{-Winit-self} has been specified:
3390f9c9
AP
2200@smallexample
2201@group
2202int f()
2203@{
2204 int i = i;
2205 return i;
2206@}
2207@end group
2208@end smallexample
2209
e9a25f70 2210@item -Wimplicit-int
cd3bb277 2211@opindex Wimplicit-int
e9a25f70
JL
2212Warn when a declaration does not specify a type.
2213
f5963e61
JL
2214@item -Wimplicit-function-declaration
2215@itemx -Werror-implicit-function-declaration
cd3bb277
JM
2216@opindex Wimplicit-function-declaration
2217@opindex Werror-implicit-function-declaration
f5963e61
JL
2218Give a warning (or error) whenever a function is used before being
2219declared.
e9a25f70 2220
74291a4b 2221@item -Wimplicit
cd3bb277 2222@opindex Wimplicit
630d3d5a 2223Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
861bb6c1
JL
2224
2225@item -Wmain
cd3bb277 2226@opindex Wmain
861bb6c1
JL
2227Warn if the type of @samp{main} is suspicious. @samp{main} should be a
2228function with external linkage, returning int, taking either zero
2229arguments, two, or three arguments of appropriate types.
4a870dba 2230
1f0c3120 2231@item -Wmissing-braces
cd3bb277 2232@opindex Wmissing-braces
1f0c3120
JM
2233Warn if an aggregate or union initializer is not fully bracketed. In
2234the following example, the initializer for @samp{a} is not fully
2235bracketed, but that for @samp{b} is fully bracketed.
2236
2237@smallexample
2238int a[2][2] = @{ 0, 1, 2, 3 @};
2239int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
2240@end smallexample
2241
b02398bd
BE
2242@item -Wmissing-include-dirs @r{(C, C++, and Objective-C only)}
2243@opindex Wmissing-include-dirs
2244Warn if a user-supplied include directory does not exist.
2245
74291a4b 2246@item -Wparentheses
cd3bb277 2247@opindex Wparentheses
74291a4b
MM
2248Warn if parentheses are omitted in certain contexts, such
2249as when there is an assignment in a context where a truth value
2250is expected, or when operators are nested whose precedence people
2251often get confused about.
2252
e9a25f70
JL
2253Also warn about constructions where there may be confusion to which
2254@code{if} statement an @code{else} branch belongs. Here is an example of
2255such a case:
2256
2257@smallexample
aee96fe9 2258@group
e9a25f70
JL
2259@{
2260 if (a)
2261 if (b)
2262 foo ();
2263 else
2264 bar ();
2265@}
aee96fe9 2266@end group
e9a25f70
JL
2267@end smallexample
2268
2269In C, every @code{else} branch belongs to the innermost possible @code{if}
2270statement, which in this example is @code{if (b)}. This is often not
2271what the programmer expected, as illustrated in the above example by
2272indentation the programmer chose. When there is the potential for this
f0523f02 2273confusion, GCC will issue a warning when this flag is specified.
e9a25f70
JL
2274To eliminate the warning, add explicit braces around the innermost
2275@code{if} statement so there is no way the @code{else} could belong to
2276the enclosing @code{if}. The resulting code would look like this:
2277
2278@smallexample
aee96fe9 2279@group
e9a25f70
JL
2280@{
2281 if (a)
2282 @{
2283 if (b)
2284 foo ();
2285 else
2286 bar ();
2287 @}
2288@}
aee96fe9 2289@end group
e9a25f70
JL
2290@end smallexample
2291
bb58bec5 2292@item -Wsequence-point
cd3bb277 2293@opindex Wsequence-point
bb58bec5
JM
2294Warn about code that may have undefined semantics because of violations
2295of sequence point rules in the C standard.
2296
2297The C standard defines the order in which expressions in a C program are
2298evaluated in terms of @dfn{sequence points}, which represent a partial
2299ordering between the execution of parts of the program: those executed
2300before the sequence point, and those executed after it. These occur
2301after the evaluation of a full expression (one which is not part of a
2302larger expression), after the evaluation of the first operand of a
2303@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
2304function is called (but after the evaluation of its arguments and the
2305expression denoting the called function), and in certain other places.
2306Other than as expressed by the sequence point rules, the order of
2307evaluation of subexpressions of an expression is not specified. All
2308these rules describe only a partial order rather than a total order,
2309since, for example, if two functions are called within one expression
2310with no sequence point between them, the order in which the functions
2311are called is not specified. However, the standards committee have
2312ruled that function calls do not overlap.
2313
2314It is not specified when between sequence points modifications to the
2315values of objects take effect. Programs whose behavior depends on this
2316have undefined behavior; the C standard specifies that ``Between the
2317previous and next sequence point an object shall have its stored value
2318modified at most once by the evaluation of an expression. Furthermore,
2319the prior value shall be read only to determine the value to be
2320stored.''. If a program breaks these rules, the results on any
2321particular implementation are entirely unpredictable.
2322
2323Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
2324= b[n++]} and @code{a[i++] = i;}. Some more complicated cases are not
2325diagnosed by this option, and it may give an occasional false positive
2326result, but in general it has been found fairly effective at detecting
2327this sort of problem in programs.
2328
2329The present implementation of this option only works for C programs. A
2330future implementation may also work for C++ programs.
2331
9c34dbbf
ZW
2332The C standard is worded confusingly, therefore there is some debate
2333over the precise meaning of the sequence point rules in subtle cases.
2334Links to discussions of the problem, including proposed formal
962e6e00 2335definitions, may be found on the GCC readings page, at
c5122d75 2336@w{@uref{http://gcc.gnu.org/readings.html}}.
bb58bec5 2337
74291a4b 2338@item -Wreturn-type
cd3bb277 2339@opindex Wreturn-type
32c4c36c
ML
2340Warn whenever a function is defined with a return-type that defaults to
2341@code{int}. Also warn about any @code{return} statement with no
02f52e19 2342return-value in a function whose return-type is not @code{void}.
32c4c36c
ML
2343
2344For C++, a function without return type always produces a diagnostic
767094dd 2345message, even when @option{-Wno-return-type} is specified. The only
32c4c36c 2346exceptions are @samp{main} and functions defined in system headers.
74291a4b
MM
2347
2348@item -Wswitch
cd3bb277 2349@opindex Wswitch
2eac577f 2350Warn whenever a @code{switch} statement has an index of enumerated type
74291a4b
MM
2351and lacks a @code{case} for one or more of the named codes of that
2352enumeration. (The presence of a @code{default} label prevents this
2353warning.) @code{case} labels outside the enumeration range also
2354provoke warnings when this option is used.
2355
d6961341
AC
2356@item -Wswitch-default
2357@opindex Wswitch-switch
2358Warn whenever a @code{switch} statement does not have a @code{default}
2359case.
2360
173028e5
AC
2361@item -Wswitch-enum
2362@opindex Wswitch-enum
2eac577f 2363Warn whenever a @code{switch} statement has an index of enumerated type
173028e5
AC
2364and lacks a @code{case} for one or more of the named codes of that
2365enumeration. @code{case} labels outside the enumeration range also
2366provoke warnings when this option is used.
2367
74291a4b 2368@item -Wtrigraphs
cd3bb277 2369@opindex Wtrigraphs
f2ecb02d
JM
2370Warn if any trigraphs are encountered that might change the meaning of
2371the program (trigraphs within comments are not warned about).
74291a4b 2372
078721e1 2373@item -Wunused-function
cd3bb277 2374@opindex Wunused-function
078721e1
AC
2375Warn whenever a static function is declared but not defined or a
2376non\-inline static function is unused.
74291a4b 2377
078721e1 2378@item -Wunused-label
cd3bb277 2379@opindex Wunused-label
078721e1
AC
2380Warn whenever a label is declared but not used.
2381
2382To suppress this warning use the @samp{unused} attribute
2383(@pxref{Variable Attributes}).
2384
2385@item -Wunused-parameter
cd3bb277 2386@opindex Wunused-parameter
078721e1
AC
2387Warn whenever a function parameter is unused aside from its declaration.
2388
2389To suppress this warning use the @samp{unused} attribute
2390(@pxref{Variable Attributes}).
956d6950 2391
078721e1 2392@item -Wunused-variable
cd3bb277 2393@opindex Wunused-variable
078721e1
AC
2394Warn whenever a local variable or non-constant static variable is unused
2395aside from its declaration
2396
2397To suppress this warning use the @samp{unused} attribute
74291a4b
MM
2398(@pxref{Variable Attributes}).
2399
078721e1 2400@item -Wunused-value
cd3bb277 2401@opindex Wunused-value
078721e1
AC
2402Warn whenever a statement computes a result that is explicitly not used.
2403
2404To suppress this warning cast the expression to @samp{void}.
2405
2406@item -Wunused
cd3bb277 2407@opindex Wunused
d3075b6c 2408All the above @option{-Wunused} options combined.
078721e1
AC
2409
2410In order to get a warning about an unused function parameter, you must
65ca2d60
PE
2411either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
2412@samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
078721e1 2413
74291a4b 2414@item -Wuninitialized
cd3bb277 2415@opindex Wuninitialized
c5c76735
JL
2416Warn if an automatic variable is used without first being initialized or
2417if a variable may be clobbered by a @code{setjmp} call.
74291a4b
MM
2418
2419These warnings are possible only in optimizing compilation,
2420because they require data flow information that is computed only
630d3d5a 2421when optimizing. If you don't specify @option{-O}, you simply won't
74291a4b
MM
2422get these warnings.
2423
3390f9c9
AP
2424If you want to warn about code which uses the uninitialized value of the
2425variable in its own initializer, use the @option{-Winit-self} option.
2426
74291a4b
MM
2427These warnings occur only for variables that are candidates for
2428register allocation. Therefore, they do not occur for a variable that
2429is declared @code{volatile}, or whose address is taken, or whose size
2430is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
2431structures, unions or arrays, even when they are in registers.
2432
2433Note that there may be no warning about a variable that is used only
2434to compute a value that itself is never used, because such
2435computations may be deleted by data flow analysis before the warnings
2436are printed.
2437
0c2d1a2a 2438These warnings are made optional because GCC is not smart
74291a4b
MM
2439enough to see all the reasons why the code might be correct
2440despite appearing to have an error. Here is one example of how
2441this can happen:
2442
2443@smallexample
aee96fe9 2444@group
74291a4b
MM
2445@{
2446 int x;
2447 switch (y)
2448 @{
2449 case 1: x = 1;
2450 break;
2451 case 2: x = 4;
2452 break;
2453 case 3: x = 5;
2454 @}
2455 foo (x);
2456@}
aee96fe9 2457@end group
74291a4b
MM
2458@end smallexample
2459
2460@noindent
2461If the value of @code{y} is always 1, 2 or 3, then @code{x} is
0c2d1a2a 2462always initialized, but GCC doesn't know this. Here is
74291a4b
MM
2463another common case:
2464
2465@smallexample
2466@{
2467 int save_y;
2468 if (change_y) save_y = y, y = new_y;
2469 @dots{}
2470 if (change_y) y = save_y;
2471@}
2472@end smallexample
2473
2474@noindent
2475This has no bug because @code{save_y} is used only if it is set.
2476
20300b05 2477@cindex @code{longjmp} warnings
b192711e 2478This option also warns when a non-volatile automatic variable might be
c5c76735
JL
2479changed by a call to @code{longjmp}. These warnings as well are possible
2480only in optimizing compilation.
20300b05
GK
2481
2482The compiler sees only the calls to @code{setjmp}. It cannot know
2483where @code{longjmp} will be called; in fact, a signal handler could
2484call it at any point in the code. As a result, you may get a warning
2485even when there is in fact no problem because @code{longjmp} cannot
2486in fact be called at the place which would cause a problem.
2487
74291a4b
MM
2488Some spurious warnings can be avoided if you declare all the functions
2489you use that never return as @code{noreturn}. @xref{Function
2490Attributes}.
2491
d300e551 2492@item -Wunknown-pragmas
cd3bb277 2493@opindex Wunknown-pragmas
d300e551
NC
2494@cindex warning for unknown pragmas
2495@cindex unknown pragmas, warning
2496@cindex pragmas, warning of unknown
2497Warn when a #pragma directive is encountered which is not understood by
161d7b59 2498GCC@. If this command line option is used, warnings will even be issued
d300e551 2499for unknown pragmas in system header files. This is not the case if
630d3d5a 2500the warnings were only enabled by the @option{-Wall} command line option.
d300e551 2501
bf52f899
NS
2502@item -Wstrict-aliasing
2503@opindex Wstrict-aliasing
2504This option is only active when @option{-fstrict-aliasing} is active.
2505It warns about code which might break the strict aliasing rules that the
2506compiler is using for optimization. The warning does not catch all
2507cases, but does attempt to catch the more common pitfalls. It is
2508included in @option{-Wall}.
2509
5399d643
JW
2510@item -Wstrict-aliasing=2
2511@opindex Wstrict-aliasing=2
2512This option is only active when @option{-fstrict-aliasing} is active.
2513It warns about all code which might break the strict aliasing rules that the
2514compiler is using for optimization. This warning catches all cases, but
2515it will also give a warning for some ambiguous cases that are safe.
2516
74291a4b 2517@item -Wall
cd3bb277 2518@opindex Wall
74291a4b
MM
2519All of the above @samp{-W} options combined. This enables all the
2520warnings about constructions that some users consider questionable, and
2521that are easy to avoid (or modify to prevent the warning), even in
bd8f9aec
SP
2522conjunction with macros. This also enables some language-specific
2523warnings described in @ref{C++ Dialect Options} and
2524@ref{Objective-C Dialect Options}.
74291a4b
MM
2525@end table
2526
630d3d5a 2527The following @option{-W@dots{}} options are not implied by @option{-Wall}.
74291a4b
MM
2528Some of them warn about constructions that users generally do not
2529consider questionable, but which occasionally you might wish to check
2530for; others warn about constructions that are necessary or hard to avoid
2531in some cases, and there is no simple way to modify the code to suppress
2532the warning.
2533
2642624b 2534@table @gcctabopt
65ca2d60 2535@item -Wextra
cd3bb277 2536@opindex W
65ca2d60
PE
2537@opindex Wextra
2538(This option used to be called @option{-W}. The older name is still
2539supported, but the newer name is more descriptive.) Print extra warning
2540messages for these events:
74291a4b
MM
2541
2542@itemize @bullet
74291a4b
MM
2543@item
2544A function can return either with or without a value. (Falling
2545off the end of the function body is considered returning without
2546a value.) For example, this function would evoke such a
2547warning:
2548
2549@smallexample
2550@group
2551foo (a)
2552@{
2553 if (a > 0)
2554 return a;
2555@}
2556@end group
2557@end smallexample
2558
2559@item
2560An expression-statement or the left-hand side of a comma expression
2561contains no side effects.
2562To suppress the warning, cast the unused expression to void.
2563For example, an expression such as @samp{x[i,j]} will cause a warning,
2564but @samp{x[(void)i,j]} will not.
2565
2566@item
65ca2d60 2567An unsigned value is compared against zero with @samp{<} or @samp{>=}.
74291a4b
MM
2568
2569@item
2570A comparison like @samp{x<=y<=z} appears; this is equivalent to
2571@samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
2572that of ordinary mathematical notation.
2573
2574@item
2575Storage-class specifiers like @code{static} are not the first things in
2576a declaration. According to the C Standard, this usage is obsolescent.
2577
e0c9fbb7
JM
2578@item
2579The return type of a function has a type qualifier such as @code{const}.
2580Such a type qualifier has no effect, since the value returned by a
2581function is not an lvalue. (But don't warn about the GNU extension of
2582@code{volatile void} return types. That extension will be warned about
630d3d5a 2583if @option{-pedantic} is specified.)
e0c9fbb7 2584
74291a4b 2585@item
630d3d5a 2586If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
74291a4b
MM
2587arguments.
2588
e9a25f70
JL
2589@item
2590A comparison between signed and unsigned values could produce an
2591incorrect result when the signed value is converted to unsigned.
630d3d5a 2592(But don't warn if @option{-Wno-sign-compare} is also specified.)
e9a25f70 2593
dbde0d5d
BH
2594@item
2595An aggregate has an initializer which does not initialize all members.
2596For example, the following code would cause such a warning, because
2597@code{x.h} would be implicitly initialized to zero:
2598
2599@smallexample
2600struct s @{ int f, g, h; @};
2601struct s x = @{ 3, 4 @};
2602@end smallexample
65ca2d60
PE
2603
2604@item
2605A function parameter is declared without a type specifier in K&R-style
2606functions:
2607
2608@smallexample
2609void foo(bar) @{ @}
2610@end smallexample
2611
2612@item
2613An empty body occurs in an @samp{if} or @samp{else} statement.
2614
2615@item
2616A pointer is compared against integer zero with @samp{<}, @samp{<=},
2617@samp{>}, or @samp{>=}.
2618
2619@item
2620A variable might be changed by @samp{longjmp} or @samp{vfork}.
2621
2622@item
2623Any of several floating-point events that often indicate errors, such as
2624overflow, underflow, loss of precision, etc.
2625
2626@item @r{(C++ only)}
2627An enumerator and a non-enumerator both appear in a conditional expression.
2628
2629@item @r{(C++ only)}
2630A non-static reference or non-static @samp{const} member appears in a
2631class without constructors.
2632
2633@item @r{(C++ only)}
2634Ambiguous virtual bases.
2635
2636@item @r{(C++ only)}
2637Subscripting an array which has been declared @samp{register}.
2638
2639@item @r{(C++ only)}
2640Taking the address of a variable which has been declared @samp{register}.
2641
2642@item @r{(C++ only)}
62b9c42c 2643A base class is not initialized in a derived class' copy constructor.
74291a4b
MM
2644@end itemize
2645
75227a33
GK
2646@item -Wno-div-by-zero
2647@opindex Wno-div-by-zero
2648@opindex Wdiv-by-zero
2649Do not warn about compile-time integer division by zero. Floating point
2650division by zero is not warned about, as it can be a legitimate way of
2651obtaining infinities and NaNs.
2652
2653@item -Wsystem-headers
2654@opindex Wsystem-headers
2655@cindex warnings from system headers
2656@cindex system headers, warnings from
2657Print warning messages for constructs found in system header files.
2658Warnings from system headers are normally suppressed, on the assumption
2659that they usually do not indicate real problems and would only make the
2660compiler output harder to read. Using this command line option tells
2661GCC to emit warnings from system headers as if they occurred in user
2662code. However, note that using @option{-Wall} in conjunction with this
2663option will @emph{not} warn about unknown pragmas in system
2664headers---for that, @option{-Wunknown-pragmas} must also be used.
2665
f793a95e 2666@item -Wfloat-equal
cd3bb277 2667@opindex Wfloat-equal
f793a95e
JL
2668Warn if floating point values are used in equality comparisons.
2669
488d3985
GK
2670The idea behind this is that sometimes it is convenient (for the
2671programmer) to consider floating-point values as approximations to
2672infinitely precise real numbers. If you are doing this, then you need
c0478a66 2673to compute (by analyzing the code, or in some other way) the maximum or
488d3985
GK
2674likely maximum error that the computation introduces, and allow for it
2675when performing comparisons (and when producing output, but that's a
2676different problem). In particular, instead of testing for equality, you
2677would check to see whether the two values have ranges that overlap; and
2678this is done with the relational operators, so equality comparisons are
2679probably mistaken.
2680
aee96fe9 2681@item -Wtraditional @r{(C only)}
cd3bb277 2682@opindex Wtraditional
74291a4b 2683Warn about certain constructs that behave differently in traditional and
161d7b59 2684ISO C@. Also warn about ISO C constructs that have no traditional C
c8abc684 2685equivalent, and/or problematic constructs which should be avoided.
74291a4b
MM
2686
2687@itemize @bullet
2688@item
da312b55
NB
2689Macro parameters that appear within string literals in the macro body.
2690In traditional C macro replacement takes place within string literals,
161d7b59 2691but does not in ISO C@.
da312b55
NB
2692
2693@item
2694In traditional C, some preprocessor directives did not exist.
2695Traditional preprocessors would only consider a line to be a directive
2696if the @samp{#} appeared in column 1 on the line. Therefore
630d3d5a 2697@option{-Wtraditional} warns about directives that traditional C
da312b55
NB
2698understands but would ignore because the @samp{#} does not appear as the
2699first character on the line. It also suggests you hide directives like
2700@samp{#pragma} not understood by traditional C by indenting them. Some
c21cd8b1 2701traditional implementations would not recognize @samp{#elif}, so it
da312b55
NB
2702suggests avoiding it altogether.
2703
2704@item
2705A function-like macro that appears without arguments.
2706
2707@item
2708The unary plus operator.
2709
2710@item
c771326b
JM
2711The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
2712constant suffixes. (Traditional C does support the @samp{L} suffix on integer
da312b55 2713constants.) Note, these suffixes appear in macros defined in the system
e979f9e8 2714headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
c8abc684 2715Use of these macros in user code might normally lead to spurious
2dd76960 2716warnings, however GCC's integrated preprocessor has enough context to
c8abc684 2717avoid warning in these cases.
74291a4b
MM
2718
2719@item
2720A function declared external in one block and then used after the end of
2721the block.
2722
2723@item
2724A @code{switch} statement has an operand of type @code{long}.
db838bb8
KG
2725
2726@item
2727A non-@code{static} function declaration follows a @code{static} one.
2728This construct is not accepted by some traditional C compilers.
48776cde
KG
2729
2730@item
c1030c7c 2731The ISO type of an integer constant has a different width or
48776cde 2732signedness from its traditional type. This warning is only issued if
e979f9e8 2733the base of the constant is ten. I.e.@: hexadecimal or octal values, which
48776cde 2734typically represent bit patterns, are not warned about.
bb66adca
KG
2735
2736@item
c1030c7c 2737Usage of ISO string concatenation is detected.
7f094a94 2738
895ea614
KG
2739@item
2740Initialization of automatic aggregates.
2741
2742@item
2743Identifier conflicts with labels. Traditional C lacks a separate
2744namespace for labels.
253b6b82
KG
2745
2746@item
2747Initialization of unions. If the initializer is zero, the warning is
2748omitted. This is done under the assumption that the zero initializer in
e979f9e8 2749user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
253b6b82
KG
2750initializer warnings and relies on default initialization to zero in the
2751traditional C case.
03829ad2
KG
2752
2753@item
3ed56f8a
KG
2754Conversions by prototypes between fixed/floating point values and vice
2755versa. The absence of these prototypes when compiling with traditional
2756C would cause serious problems. This is a subset of the possible
630d3d5a 2757conversion warnings, for the full set use @option{-Wconversion}.
622d3731
KG
2758
2759@item
2760Use of ISO C style function definitions. This warning intentionally is
2761@emph{not} issued for prototype declarations or variadic functions
2762because these ISO C features will appear in your code when using
2763libiberty's traditional C compatibility macros, @code{PARAMS} and
2764@code{VPARAMS}. This warning is also bypassed for nested functions
2dd76960 2765because that feature is already a GCC extension and thus not relevant to
622d3731 2766traditional C compatibility.
74291a4b
MM
2767@end itemize
2768
85617eba
HPN
2769@item -Wdeclaration-after-statement @r{(C only)}
2770@opindex Wdeclaration-after-statement
2771Warn when a declaration is found after a statement in a block. This
2772construct, known from C++, was introduced with ISO C99 and is by default
2773allowed in GCC@. It is not supported by ISO C90 and was not supported by
2774GCC versions before GCC 3.0. @xref{Mixed Declarations}.
2775
861bb6c1 2776@item -Wundef
cd3bb277 2777@opindex Wundef
861bb6c1
JL
2778Warn if an undefined identifier is evaluated in an @samp{#if} directive.
2779
909de5da
PE
2780@item -Wendif-labels
2781@opindex Wendif-labels
2782Warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
2783
74291a4b 2784@item -Wshadow
cd3bb277 2785@opindex Wshadow
d773df5a
DB
2786Warn whenever a local variable shadows another local variable, parameter or
2787global variable or whenever a built-in function is shadowed.
74291a4b 2788
74291a4b 2789@item -Wlarger-than-@var{len}
cd3bb277 2790@opindex Wlarger-than
74291a4b
MM
2791Warn whenever an object of larger than @var{len} bytes is defined.
2792
2793@item -Wpointer-arith
cd3bb277 2794@opindex Wpointer-arith
74291a4b
MM
2795Warn about anything that depends on the ``size of'' a function type or
2796of @code{void}. GNU C assigns these types a size of 1, for
2797convenience in calculations with @code{void *} pointers and pointers
2798to functions.
2799
aee96fe9 2800@item -Wbad-function-cast @r{(C only)}
cd3bb277 2801@opindex Wbad-function-cast
74291a4b
MM
2802Warn whenever a function call is cast to a non-matching type.
2803For example, warn if @code{int malloc()} is cast to @code{anything *}.
2804
2805@item -Wcast-qual
cd3bb277 2806@opindex Wcast-qual
74291a4b
MM
2807Warn whenever a pointer is cast so as to remove a type qualifier from
2808the target type. For example, warn if a @code{const char *} is cast
2809to an ordinary @code{char *}.
2810
2811@item -Wcast-align
cd3bb277 2812@opindex Wcast-align
74291a4b
MM
2813Warn whenever a pointer is cast such that the required alignment of the
2814target is increased. For example, warn if a @code{char *} is cast to
2815an @code{int *} on machines where integers can only be accessed at
2816two- or four-byte boundaries.
2817
2818@item -Wwrite-strings
cd3bb277 2819@opindex Wwrite-strings
aee96fe9
JM
2820When compiling C, give string constants the type @code{const
2821char[@var{length}]} so that
74291a4b 2822copying the address of one into a non-@code{const} @code{char *}
aee96fe9
JM
2823pointer will get a warning; when compiling C++, warn about the
2824deprecated conversion from string constants to @code{char *}.
2825These warnings will help you find at
74291a4b
MM
2826compile time code that can try to write into a string constant, but
2827only if you have been very careful about using @code{const} in
2828declarations and prototypes. Otherwise, it will just be a nuisance;
630d3d5a 2829this is why we did not make @option{-Wall} request these warnings.
74291a4b
MM
2830
2831@item -Wconversion
cd3bb277 2832@opindex Wconversion
74291a4b
MM
2833Warn if a prototype causes a type conversion that is different from what
2834would happen to the same argument in the absence of a prototype. This
2835includes conversions of fixed point to floating and vice versa, and
2836conversions changing the width or signedness of a fixed point argument
2837except when the same as the default promotion.
2838
2839Also, warn if a negative integer constant expression is implicitly
2840converted to an unsigned type. For example, warn about the assignment
2841@code{x = -1} if @code{x} is unsigned. But do not warn about explicit
2842casts like @code{(unsigned) -1}.
2843
e9a25f70 2844@item -Wsign-compare
cd3bb277 2845@opindex Wsign-compare
e9a25f70
JL
2846@cindex warning for comparison of signed and unsigned values
2847@cindex comparison of signed and unsigned values, warning
2848@cindex signed and unsigned values, comparison warning
2849Warn when a comparison between signed and unsigned values could produce
2850an incorrect result when the signed value is converted to unsigned.
65ca2d60
PE
2851This warning is also enabled by @option{-Wextra}; to get the other warnings
2852of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
e9a25f70 2853
74291a4b 2854@item -Waggregate-return
cd3bb277 2855@opindex Waggregate-return
74291a4b
MM
2856Warn if any functions that return structures or unions are defined or
2857called. (In languages where you can return an array, this also elicits
2858a warning.)
2859
aee96fe9 2860@item -Wstrict-prototypes @r{(C only)}
cd3bb277 2861@opindex Wstrict-prototypes
74291a4b
MM
2862Warn if a function is declared or defined without specifying the
2863argument types. (An old-style function definition is permitted without
2864a warning if preceded by a declaration which specifies the argument
2865types.)
2866
c034f121
AJ
2867@item -Wold-style-definition @r{(C only)}
2868@opindex Wold-style-definition
2869Warn if an old-style function definition is used. A warning is given
2870even if there is a previous prototype.
2871
aee96fe9 2872@item -Wmissing-prototypes @r{(C only)}
cd3bb277 2873@opindex Wmissing-prototypes
74291a4b
MM
2874Warn if a global function is defined without a previous prototype
2875declaration. This warning is issued even if the definition itself
2876provides a prototype. The aim is to detect global functions that fail
2877to be declared in header files.
2878
da635858 2879@item -Wmissing-declarations @r{(C only)}
cd3bb277 2880@opindex Wmissing-declarations
74291a4b
MM
2881Warn if a global function is defined without a previous declaration.
2882Do so even if the definition itself provides a prototype.
2883Use this option to detect global functions that are not declared in
2884header files.
2885
0ca3fb0a 2886@item -Wmissing-noreturn
cd3bb277 2887@opindex Wmissing-noreturn
0ca3fb0a
KG
2888Warn about functions which might be candidates for attribute @code{noreturn}.
2889Note these are only possible candidates, not absolute ones. Care should
2890be taken to manually verify functions actually do not ever return before
2891adding the @code{noreturn} attribute, otherwise subtle code generation
21c7361e
AJ
2892bugs could be introduced. You will not get a warning for @code{main} in
2893hosted C environments.
0ca3fb0a 2894
74ff4629 2895@item -Wmissing-format-attribute
cd3bb277
JM
2896@opindex Wmissing-format-attribute
2897@opindex Wformat
630d3d5a 2898If @option{-Wformat} is enabled, also warn about functions which might be
74ff4629
JM
2899candidates for @code{format} attributes. Note these are only possible
2900candidates, not absolute ones. GCC will guess that @code{format}
2901attributes might be appropriate for any function that calls a function
2902like @code{vprintf} or @code{vscanf}, but this might not always be the
2903case, and some functions for which @code{format} attributes are
2904appropriate may not be detected. This option has no effect unless
630d3d5a 2905@option{-Wformat} is enabled (possibly by @option{-Wall}).
74ff4629 2906
75227a33
GK
2907@item -Wno-multichar
2908@opindex Wno-multichar
2909@opindex Wmultichar
2910Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
2911Usually they indicate a typo in the user's code, as they have
2912implementation-defined values, and should not be used in portable code.
2913
e23bd218
IR
2914@item -Wno-deprecated-declarations
2915@opindex Wno-deprecated-declarations
2916Do not warn about uses of functions, variables, and types marked as
f282ffb3 2917deprecated by using the @code{deprecated} attribute.
e23bd218
IR
2918(@pxref{Function Attributes}, @pxref{Variable Attributes},
2919@pxref{Type Attributes}.)
2920
3c12fcc2 2921@item -Wpacked
cd3bb277 2922@opindex Wpacked
3c12fcc2 2923Warn if a structure is given the packed attribute, but the packed
02f52e19 2924attribute has no effect on the layout or size of the structure.
3c12fcc2
GM
2925Such structures may be mis-aligned for little benefit. For
2926instance, in this code, the variable @code{f.x} in @code{struct bar}
2927will be misaligned even though @code{struct bar} does not itself
2928have the packed attribute:
2929
2930@smallexample
2931@group
2932struct foo @{
2933 int x;
2934 char a, b, c, d;
2935@} __attribute__((packed));
2936struct bar @{
2937 char z;
2938 struct foo f;
2939@};
2940@end group
2941@end smallexample
2942
2943@item -Wpadded
cd3bb277 2944@opindex Wpadded
3c12fcc2
GM
2945Warn if padding is included in a structure, either to align an element
2946of the structure or to align the whole structure. Sometimes when this
2947happens it is possible to rearrange the fields of the structure to
2948reduce the padding and so make the structure smaller.
2949
74291a4b 2950@item -Wredundant-decls
cd3bb277 2951@opindex Wredundant-decls
74291a4b
MM
2952Warn if anything is declared more than once in the same scope, even in
2953cases where multiple declaration is valid and changes nothing.
2954
aee96fe9 2955@item -Wnested-externs @r{(C only)}
cd3bb277 2956@opindex Wnested-externs
252215a7 2957Warn if an @code{extern} declaration is encountered within a function.
74291a4b 2958
312f6255 2959@item -Wunreachable-code
cd3bb277 2960@opindex Wunreachable-code
312f6255
GK
2961Warn if the compiler detects that code will never be executed.
2962
2963This option is intended to warn when the compiler detects that at
2964least a whole line of source code will never be executed, because
2965some condition is never satisfied or because it is after a
2966procedure that never returns.
2967
2968It is possible for this option to produce a warning even though there
2969are circumstances under which part of the affected line can be executed,
2970so care should be taken when removing apparently-unreachable code.
2971
2972For instance, when a function is inlined, a warning may mean that the
02f52e19 2973line is unreachable in only one inlined copy of the function.
312f6255 2974
630d3d5a 2975This option is not made part of @option{-Wall} because in a debugging
312f6255
GK
2976version of a program there is often substantial code which checks
2977correct functioning of the program and is, hopefully, unreachable
2978because the program does work. Another common use of unreachable
c21cd8b1 2979code is to provide behavior which is selectable at compile-time.
312f6255 2980
74291a4b 2981@item -Winline
cd3bb277 2982@opindex Winline
c5c76735 2983Warn if a function can not be inlined and it was declared as inline.
ae4a7155 2984Even with this option, the compiler will not warn about failures to
daf2f129 2985inline functions declared in system headers.
ae4a7155
MM
2986
2987The compiler uses a variety of heuristics to determine whether or not
2988to inline a function. For example, the compiler takes into account
2989the size of the function being inlined and the the amount of inlining
2990that has already been done in the current function. Therefore,
2991seemingly insignificant changes in the source program can cause the
2992warnings produced by @option{-Winline} to appear or disappear.
74291a4b 2993
a01fff59
MA
2994@item -Wno-invalid-offsetof @r{(C++ only)}
2995@opindex Wno-invalid-offsetof
2996Suppress warnings from applying the @samp{offsetof} macro to a non-POD
2997type. According to the 1998 ISO C++ standard, applying @samp{offsetof}
2998to a non-POD type is undefined. In existing C++ implementations,
2999however, @samp{offsetof} typically gives meaningful results even when
3000applied to certain kinds of non-POD types. (Such as a simple
3001@samp{struct} that fails to be a POD type only by virtue of having a
3002constructor.) This flag is for users who are aware that they are
3003writing nonportable code and who have deliberately chosen to ignore the
3004warning about it.
3005
3006The restrictions on @samp{offsetof} may be relaxed in a future version
3007of the C++ standard.
3008
17211ab5
GK
3009@item -Winvalid-pch
3010@opindex Winvalid-pch
3011Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
3012the search path but can't be used.
3013
795add94 3014@item -Wlong-long
cd3bb277
JM
3015@opindex Wlong-long
3016@opindex Wno-long-long
795add94 3017Warn if @samp{long long} type is used. This is default. To inhibit
630d3d5a
JM
3018the warning messages, use @option{-Wno-long-long}. Flags
3019@option{-Wlong-long} and @option{-Wno-long-long} are taken into account
3020only when @option{-pedantic} flag is used.
795add94 3021
7c4d376d
RH
3022@item -Wvariadic-macros
3023@opindex Wvariadic-macros
3024@opindex Wno-variadic-macros
3025Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
3026alternate syntax when in pedantic ISO C99 mode. This is default.
3027To inhibit the warning messages, use @option{-Wno-variadic-macros}.
3028
18424ae1 3029@item -Wdisabled-optimization
cd3bb277 3030@opindex Wdisabled-optimization
18424ae1
BL
3031Warn if a requested optimization pass is disabled. This warning does
3032not generally indicate that there is anything wrong with your code; it
3033merely indicates that GCC's optimizers were unable to handle the code
3034effectively. Often, the problem is that your code is too big or too
3035complex; GCC will refuse to optimize programs when the optimization
3036itself is likely to take inordinate amounts of time.
3037
74291a4b 3038@item -Werror
cd3bb277 3039@opindex Werror
74291a4b
MM
3040Make all warnings into errors.
3041@end table
3042
3043@node Debugging Options
0c2d1a2a 3044@section Options for Debugging Your Program or GCC
74291a4b
MM
3045@cindex options, debugging
3046@cindex debugging information options
3047
0c2d1a2a 3048GCC has various special options that are used for debugging
74291a4b
MM
3049either your program or GCC:
3050
2642624b 3051@table @gcctabopt
74291a4b 3052@item -g
cd3bb277 3053@opindex g
74291a4b 3054Produce debugging information in the operating system's native format
161d7b59 3055(stabs, COFF, XCOFF, or DWARF)@. GDB can work with this debugging
74291a4b
MM
3056information.
3057
630d3d5a 3058On most systems that use stabs format, @option{-g} enables use of extra
74291a4b
MM
3059debugging information that only GDB can use; this extra information
3060makes debugging work better in GDB but will probably make other debuggers
3061crash or
3062refuse to read the program. If you want to control for certain whether
630d3d5a 3063to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
def66b10 3064@option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
74291a4b 3065
630d3d5a
JM
3066Unlike most other C compilers, GCC allows you to use @option{-g} with
3067@option{-O}. The shortcuts taken by optimized code may occasionally
74291a4b
MM
3068produce surprising results: some variables you declared may not exist
3069at all; flow of control may briefly move where you did not expect it;
3070some statements may not be executed because they compute constant
3071results or their values were already at hand; some statements may
3072execute in different places because they were moved out of loops.
3073
3074Nevertheless it proves possible to debug optimized output. This makes
3075it reasonable to use the optimizer for programs that might have bugs.
3076
0c2d1a2a 3077The following options are useful when GCC is generated with the
74291a4b
MM
3078capability for more than one debugging format.
3079
3080@item -ggdb
cd3bb277 3081@opindex ggdb
161d7b59 3082Produce debugging information for use by GDB@. This means to use the
861bb6c1
JL
3083most expressive format available (DWARF 2, stabs, or the native format
3084if neither of those are supported), including GDB extensions if at all
3085possible.
74291a4b
MM
3086
3087@item -gstabs
cd3bb277 3088@opindex gstabs
74291a4b
MM
3089Produce debugging information in stabs format (if that is supported),
3090without GDB extensions. This is the format used by DBX on most BSD
3091systems. On MIPS, Alpha and System V Release 4 systems this option
161d7b59 3092produces stabs debugging output which is not understood by DBX or SDB@.
74291a4b
MM
3093On System V Release 4 systems this option requires the GNU assembler.
3094
6a08f7b3
DP
3095@item -feliminate-unused-debug-symbols
3096@opindex feliminate-unused-debug-symbols
3097Produce debugging information in stabs format (if that is supported),
c0cbdbd9 3098for only symbols that are actually used.
6a08f7b3 3099
74291a4b 3100@item -gstabs+
cd3bb277 3101@opindex gstabs+
74291a4b 3102Produce debugging information in stabs format (if that is supported),
161d7b59 3103using GNU extensions understood only by the GNU debugger (GDB)@. The
74291a4b
MM
3104use of these extensions is likely to make other debuggers crash or
3105refuse to read the program.
3106
3107@item -gcoff
cd3bb277 3108@opindex gcoff
74291a4b
MM
3109Produce debugging information in COFF format (if that is supported).
3110This is the format used by SDB on most System V systems prior to
3111System V Release 4.
3112
3113@item -gxcoff
cd3bb277 3114@opindex gxcoff
74291a4b
MM
3115Produce debugging information in XCOFF format (if that is supported).
3116This is the format used by the DBX debugger on IBM RS/6000 systems.
3117
3118@item -gxcoff+
cd3bb277 3119@opindex gxcoff+
74291a4b 3120Produce debugging information in XCOFF format (if that is supported),
161d7b59 3121using GNU extensions understood only by the GNU debugger (GDB)@. The
74291a4b
MM
3122use of these extensions is likely to make other debuggers crash or
3123refuse to read the program, and may cause assemblers other than the GNU
3124assembler (GAS) to fail with an error.
3125
861bb6c1 3126@item -gdwarf-2
cd3bb277 3127@opindex gdwarf-2
861bb6c1
JL
3128Produce debugging information in DWARF version 2 format (if that is
3129supported). This is the format used by DBX on IRIX 6.
74291a4b 3130
5f98259a
RK
3131@item -gvms
3132@opindex gvms
3133Produce debugging information in VMS debug format (if that is
3134supported). This is the format used by DEBUG on VMS systems.
3135
74291a4b
MM
3136@item -g@var{level}
3137@itemx -ggdb@var{level}
3138@itemx -gstabs@var{level}
3139@itemx -gcoff@var{level}
3140@itemx -gxcoff@var{level}
5f98259a 3141@itemx -gvms@var{level}
74291a4b
MM
3142Request debugging information and also use @var{level} to specify how
3143much information. The default level is 2.
3144
3145Level 1 produces minimal information, enough for making backtraces in
3146parts of the program that you don't plan to debug. This includes
3147descriptions of functions and external variables, but no information
3148about local variables and no line numbers.
3149
3150Level 3 includes extra information, such as all the macro definitions
3151present in the program. Some debuggers support macro expansion when
630d3d5a 3152you use @option{-g3}.
74291a4b 3153
eb7715a4 3154Note that in order to avoid confusion between DWARF1 debug level 2,
def66b10
MM
3155and DWARF2 @option{-gdwarf-2} does not accept a concatenated debug
3156level. Instead use an additional @option{-g@var{level}} option to
3157change the debug level for DWARF2.
eb7715a4 3158
e03b7153
RS
3159@item -feliminate-dwarf2-dups
3160@opindex feliminate-dwarf2-dups
3161Compress DWARF2 debugging information by eliminating duplicated
3162information about each symbol. This option only makes sense when
3163generating DWARF2 debugging information with @option{-gdwarf-2}.
3164
05739753 3165@cindex @command{prof}
74291a4b 3166@item -p
cd3bb277 3167@opindex p
74291a4b 3168Generate extra code to write profile information suitable for the
05739753 3169analysis program @command{prof}. You must use this option when compiling
74291a4b
MM
3170the source files you want data about, and you must also use it when
3171linking.
3172
05739753 3173@cindex @command{gprof}
74291a4b 3174@item -pg
cd3bb277 3175@opindex pg
74291a4b 3176Generate extra code to write profile information suitable for the
05739753 3177analysis program @command{gprof}. You must use this option when compiling
74291a4b
MM
3178the source files you want data about, and you must also use it when
3179linking.
3180
898f531b 3181@item -Q
cd3bb277 3182@opindex Q
898f531b
JL
3183Makes the compiler print out each function name as it is compiled, and
3184print some statistics about each pass when it finishes.
3185
1f0c3120 3186@item -ftime-report
cd3bb277 3187@opindex ftime-report
1f0c3120
JM
3188Makes the compiler print some statistics about the time consumed by each
3189pass when it finishes.
3190
3191@item -fmem-report
cd3bb277 3192@opindex fmem-report
1f0c3120
JM
3193Makes the compiler print some statistics about permanent memory
3194allocation when it finishes.
3195
861bb6c1 3196@item -fprofile-arcs
cd3bb277 3197@opindex fprofile-arcs
23af32e6
NS
3198Add code so that program flow @dfn{arcs} are instrumented. During
3199execution the program records how many times each branch and call is
3200executed and how many times it is taken or returns. When the compiled
3201program exits it saves this data to a file called
a4878735 3202@file{@var{auxname}.gcda} for each source file. The data may be used for
23af32e6
NS
3203profile-directed optimizations (@option{-fbranch-probabilities}), or for
3204test coverage analysis (@option{-ftest-coverage}). Each object file's
3205@var{auxname} is generated from the name of the output file, if
3206explicitly specified and it is not the final executable, otherwise it is
3207the basename of the source file. In both cases any suffix is removed
a4878735
NS
3208(e.g. @file{foo.gcda} for input file @file{dir/foo.c}, or
3209@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
23af32e6
NS
3210
3211@itemize
3212
3213@item
3214Compile the source files with @option{-fprofile-arcs} plus optimization
3215and code generation options. For test coverage analysis, use the
3216additional @option{-ftest-coverage} option. You do not need to profile
3217every source file in a program.
3218
3219@item
8555daff
NS
3220Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
3221(the latter implies the former).
23af32e6
NS
3222
3223@item
3224Run the program on a representative workload to generate the arc profile
8555daff
NS
3225information. This may be repeated any number of times. You can run
3226concurrent instances of your program, and provided that the file system
3227supports locking, the data files will be correctly updated. Also
3228@code{fork} calls are detected and correctly handled (double counting
3229will not happen).
23af32e6
NS
3230
3231@item
3232For profile-directed optimizations, compile the source files again with
3233the same optimization and code generation options plus
630d3d5a 3234@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
3de87bf2
JJ
3235Control Optimization}).
3236
23af32e6
NS
3237@item
3238For test coverage analysis, use @command{gcov} to produce human readable
a4878735 3239information from the @file{.gcno} and @file{.gcda} files. Refer to the
23af32e6
NS
3240@command{gcov} documentation for further information.
3241
3242@end itemize
3de87bf2
JJ
3243
3244With @option{-fprofile-arcs}, for each function of your program GCC
3245creates a program flow graph, then finds a spanning tree for the graph.
3246Only arcs that are not on the spanning tree have to be instrumented: the
3247compiler adds code to count the number of times that these arcs are
3248executed. When an arc is the only exit or only entrance to a block, the
3249instrumentation code can be added to the block; otherwise, a new basic
3250block must be created to hold the instrumentation code.
3251
6de9cd9a
DN
3252@item -ftree-based-profiling
3253@opindex ftree-based-profiling
3254This option is used in addition to @option{-fprofile-arcs} or
3255@option{-fbranch-probabilities} to control whether those optimizations
3256are performed on a tree-based or rtl-based internal representation.
3257If you use this option when compiling with @option{-fprofile-arcs},
3258you must also use it when compiling later with @option{-fbranch-probabilities}.
3259Currently the tree-based optimization is in an early stage of
3260development, and this option is recommended only for those people
3261working on improving it.
3262
861bb6c1
JL
3263@need 2000
3264@item -ftest-coverage
cd3bb277 3265@opindex ftest-coverage
a4878735 3266Produce a notes file that the @command{gcov} code-coverage utility
23af32e6 3267(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
a4878735
NS
3268show program coverage. Each source file's note file is called
3269@file{@var{auxname}.gcno}. Refer to the @option{-fprofile-arcs} option
23af32e6
NS
3270above for a description of @var{auxname} and instructions on how to
3271generate test coverage data. Coverage data will match the source files
3272more closely, if you do not optimize.
3de87bf2 3273
74291a4b 3274@item -d@var{letters}
cd3bb277 3275@opindex d
74291a4b
MM
3276Says to make debugging dumps during compilation at times specified by
3277@var{letters}. This is used for debugging the compiler. The file names
375e2d5c 3278for most of the dumps are made by appending a pass number and a word to
ea67fe71
NS
3279the @var{dumpname}. @var{dumpname} is generated from the name of the
3280output file, if explicitly specified and it is not an executable,
3281otherwise it is the basename of the source file. In both cases any
98edbb7a 3282suffix is removed (e.g. @file{foo.01.rtl} or @file{foo.02.sibling}).
ea67fe71
NS
3283Here are the possible letters for use in @var{letters}, and their
3284meanings:
74291a4b
MM
3285
3286@table @samp
375e2d5c 3287@item A
cd3bb277 3288@opindex dA
375e2d5c 3289Annotate the assembler output with miscellaneous debugging information.
956d6950 3290@item b
cd3bb277 3291@opindex db
98edbb7a 3292Dump after computing branch probabilities, to @file{@var{file}.12.bp}.
48d9ade5 3293@item B
cd3bb277 3294@opindex dB
e5626198 3295Dump after block reordering, to @file{@var{file}.32.bbro}.
032713aa 3296@item c
cd3bb277 3297@opindex dc
98edbb7a 3298Dump after instruction combination, to the file @file{@var{file}.20.combine}.
470fc13d 3299@item C
cd3bb277 3300@opindex dC
98edbb7a
KH
3301Dump after the first if conversion, to the file @file{@var{file}.14.ce1}.
3302Also dump after the second if conversion, to the file @file{@var{file}.21.ce2}.
032713aa 3303@item d
cd3bb277 3304@opindex dd
e5626198
AZ
3305Dump after branch target load optimization, to to @file{@var{file}.33.btl}.
3306Also dump after delayed branch scheduling, to @file{@var{file}.37.dbr}.
032713aa 3307@item D
cd3bb277 3308@opindex dD
f5963e61
JL
3309Dump all macro definitions, at the end of preprocessing, in addition to
3310normal output.
470fc13d 3311@item E
cd3bb277 3312@opindex dE
e5626198 3313Dump after the third if conversion, to @file{@var{file}.31.ce3}.
74291a4b 3314@item f
cd3bb277 3315@opindex df
98edbb7a
KH
3316Dump after control and data flow analysis, to @file{@var{file}.11.cfg}.
3317Also dump after life analysis, to @file{@var{file}.19.life}.
74291a4b 3318@item g
cd3bb277 3319@opindex dg
e5626198 3320Dump after global register allocation, to @file{@var{file}.26.greg}.
02f52e19 3321@item G
cd3bb277 3322@opindex dG
98edbb7a 3323Dump after GCSE, to @file{@var{file}.08.gcse}.
34695841 3324Also dump after jump bypassing and control flow optimizations, to
98edbb7a 3325@file{@var{file}.10.bypass}.
7fedea11
KH
3326@item h
3327@opindex dh
a194aa56 3328Dump after finalization of EH handling code, to @file{@var{file}.03.eh}.
48d9ade5 3329@item i
cd3bb277 3330@opindex di
a194aa56 3331Dump after sibling call optimizations, to @file{@var{file}.02.sibling}.
032713aa 3332@item j
cd3bb277 3333@opindex dj
a194aa56 3334Dump after the first jump optimization, to @file{@var{file}.04.jump}.
74291a4b 3335@item k
cd3bb277 3336@opindex dk
e5626198 3337Dump after conversion from registers to stack, to @file{@var{file}.35.stack}.
032713aa 3338@item l
cd3bb277 3339@opindex dl
e5626198 3340Dump after local register allocation, to @file{@var{file}.25.lreg}.
032713aa 3341@item L
cd3bb277 3342@opindex dL
98edbb7a
KH
3343Dump after loop optimization passes, to @file{@var{file}.09.loop} and
3344@file{@var{file}.16.loop2}.
e5626198
AZ
3345@item m
3346@opindex dm
f26c1794 3347Dump after modulo scheduling, to @file{@var{file}.23.sms}.
032713aa 3348@item M
cd3bb277 3349@opindex dM
c0478a66 3350Dump after performing the machine dependent reorganization pass, to
e5626198 3351@file{@var{file}.36.mach}.
48d9ade5 3352@item n
cd3bb277 3353@opindex dn
e5626198 3354Dump after register renumbering, to @file{@var{file}.30.rnreg}.
032713aa 3355@item N
cd3bb277 3356@opindex dN
98edbb7a 3357Dump after the register move pass, to @file{@var{file}.22.regmove}.
7fedea11
KH
3358@item o
3359@opindex do
e5626198 3360Dump after post-reload optimizations, to @file{@var{file}.27.postreload}.
032713aa 3361@item r
cd3bb277 3362@opindex dr
a194aa56 3363Dump after RTL generation, to @file{@var{file}.01.rtl}.
032713aa 3364@item R
cd3bb277 3365@opindex dR
e5626198 3366Dump after the second scheduling pass, to @file{@var{file}.34.sched2}.
032713aa 3367@item s
cd3bb277 3368@opindex ds
032713aa 3369Dump after CSE (including the jump optimization that sometimes follows
98edbb7a 3370CSE), to @file{@var{file}.06.cse}.
032713aa 3371@item S
cd3bb277 3372@opindex dS
e5626198 3373Dump after the first scheduling pass, to @file{@var{file}.24.sched}.
032713aa 3374@item t
cd3bb277 3375@opindex dt
032713aa 3376Dump after the second CSE pass (including the jump optimization that
98edbb7a 3377sometimes follows CSE), to @file{@var{file}.18.cse2}.
4319ef2a
KH
3378@item T
3379@opindex dT
98edbb7a 3380Dump after running tracer, to @file{@var{file}.15.tracer}.
38c1593d
JH
3381@item u
3382@opindex du
98edbb7a 3383Dump after null pointer elimination pass to @file{@var{file}.05.null}.
a194aa56
JH
3384@item U
3385@opindex dU
3386Dump callgraph and unit-at-a-time optimization @file{@var{file}.00.unit}.
9313cfdd
KH
3387@item V
3388@opindex dV
3389Dump after the value profile transformations, to @file{@var{file}.13.vpt}.
014a1138 3390Also dump after variable tracking, to @file{@var{file}.35.vartrack}.
c80e4c17 3391@item w
cd3bb277 3392@opindex dw
e5626198 3393Dump after the second flow pass, to @file{@var{file}.28.flow2}.
48d9ade5 3394@item z
cd3bb277 3395@opindex dz
e5626198 3396Dump after the peephole pass, to @file{@var{file}.29.peephole2}.
9313cfdd
KH
3397@item Z
3398@opindex dZ
3399Dump after constructing the web, to @file{@var{file}.17.web}.
74291a4b 3400@item a
cd3bb277 3401@opindex da
74291a4b 3402Produce all the dumps listed above.
886e0865
GK
3403@item H
3404@opindex dH
3405Produce a core dump whenever an error occurs.
74291a4b 3406@item m
cd3bb277 3407@opindex dm
74291a4b
MM
3408Print statistics on memory usage, at the end of the run, to
3409standard error.
3410@item p
cd3bb277 3411@opindex dp
74291a4b 3412Annotate the assembler output with a comment indicating which
f20b5577
MM
3413pattern and alternative was used. The length of each instruction is
3414also printed.
2856c3e3 3415@item P
cd3bb277 3416@opindex dP
2856c3e3 3417Dump the RTL in the assembler output as a comment before each instruction.
630d3d5a 3418Also turns on @option{-dp} annotation.
375e2d5c 3419@item v
cd3bb277 3420@opindex dv
375e2d5c 3421For each of the other indicated dump files (except for
a194aa56 3422@file{@var{file}.01.rtl}), dump a representation of the control flow graph
b192711e 3423suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
62a1403d 3424@item x
cd3bb277 3425@opindex dx
62a1403d
AS
3426Just generate RTL for a function instead of compiling it. Usually used
3427with @samp{r}.
032713aa 3428@item y
cd3bb277 3429@opindex dy
032713aa 3430Dump debugging information during parsing, to standard error.
74291a4b
MM
3431@end table
3432
b707b450 3433@item -fdump-unnumbered
cd3bb277 3434@opindex fdump-unnumbered
695ac33f 3435When doing debugging dumps (see @option{-d} option above), suppress instruction
b707b450 3436numbers and line number note output. This makes it more feasible to
b192711e 3437use diff on debugging dumps for compiler invocations with different
695ac33f 3438options, in particular with and without @option{-g}.
b707b450 3439
f70a54cb
CR
3440@item -fdump-translation-unit @r{(C and C++ only)}
3441@itemx -fdump-translation-unit-@var{options} @r{(C and C++ only)}
3442@opindex fdump-translation-unit
3443Dump a representation of the tree structure for the entire translation
3444unit to a file. The file name is made by appending @file{.tu} to the
3445source file name. If the @samp{-@var{options}} form is used, @var{options}
3446controls the details of the dump as described for the
3447@option{-fdump-tree} options.
3448
aee96fe9 3449@item -fdump-class-hierarchy @r{(C++ only)}
22367161 3450@itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
cd3bb277 3451@opindex fdump-class-hierarchy
e76b4820 3452Dump a representation of each class's hierarchy and virtual function
767094dd 3453table layout to a file. The file name is made by appending @file{.class}
22367161
NS
3454to the source file name. If the @samp{-@var{options}} form is used,
3455@var{options} controls the details of the dump as described for the
3456@option{-fdump-tree} options.
3457
6de9cd9a
DN
3458@item -fdump-tree-@var{switch} @r{(C and C++ only)}
3459@itemx -fdump-tree-@var{switch}-@var{options} @r{(C and C++ only)}
22367161
NS
3460@opindex fdump-tree
3461Control the dumping at various stages of processing the intermediate
3462language tree to a file. The file name is generated by appending a switch
3463specific suffix to the source file name. If the @samp{-@var{options}}
3464form is used, @var{options} is a list of @samp{-} separated options that
3465control the details of the dump. Not all options are applicable to all
3466dumps, those which are not meaningful will be ignored. The following
3467options are available
f71f87f9 3468
e76b4820 3469@table @samp
22367161 3470@item address
767094dd 3471Print the address of each node. Usually this is not meaningful as it
22367161
NS
3472changes according to the environment and source file. Its primary use
3473is for tying up a dump file with a debug environment.
3474@item slim
3475Inhibit dumping of members of a scope or body of a function merely
6de9cd9a
DN
3476because that scope has been reached. Only dump such items when they
3477are directly reachable by some other path. When dumping pretty-printed
3478trees, this option inhibits dumping the bodies of control structures.
3479@item raw
3480Print a raw representation of the tree. By default, trees are
3481pretty-printed into a C-like representation.
3482@item details
3483Enable more detailed dumps (not honored by every dump option).
3484@item stats
3485Enable dumping various statistics about the pass (not honored by every dump
3486option).
3487@item blocks
3488Enable showing basic block boundaries (disabled in raw dumps).
3489@item vops
3490Enable showing virtual operands for every statement.
3491@item lineno
3492Enable showing line numbers for statements.
3493@item uid
3494Enable showing the unique ID (@code{DECL_UID}) for each variable.
22367161 3495@item all
6de9cd9a 3496Turn on all options, except @option{raw}, @option{slim} and @option{lineno}.
e76b4820
NS
3497@end table
3498
3499The following tree dumps are possible:
3500@table @samp
6de9cd9a 3501
e76b4820
NS
3502@item original
3503Dump before any tree based optimization, to @file{@var{file}.original}.
6de9cd9a 3504
e76b4820
NS
3505@item optimized
3506Dump after all tree based optimization, to @file{@var{file}.optimized}.
6de9cd9a 3507
6be77748 3508@item inlined
9c34dbbf 3509Dump after function inlining, to @file{@var{file}.inlined}.
6de9cd9a
DN
3510
3511@item gimple
3512@opindex fdump-tree-gimple
3513Dump each function before and after the gimplification pass to a file. The
3514file name is made by appending @file{.gimple} to the source file name.
3515
3516@item cfg
3517@opindex fdump-tree-cfg
3518Dump the control flow graph of each function to a file. The file name is
3519made by appending @file{.cfg} to the source file name.
3520
3521@item vcg
3522@opindex fdump-tree-vcg
3523Dump the control flow graph of each function to a file in VCG format. The
3524file name is made by appending @file{.vcg} to the source file name. Note
3525that if the file contains more than one function, the generated file cannot
3526be used directly by VCG. You will need to cut and paste each function's
3527graph into its own separate file first.
3528
3529@item ch
3530@opindex fdump-tree-ch
3531Dump each function after copying loop headers. The file name is made by
3532appending @file{.ch} to the source file name.
3533
3534@item ssa
3535@opindex fdump-tree-ssa
3536Dump SSA related information to a file. The file name is made by appending
3537@file{.ssa} to the source file name.
3538
3539@item alias
3540@opindex fdump-tree-alias
3541Dump aliasing information for each function. The file name is made by
3542appending @file{.alias} to the source file name.
3543
3544@item ccp
3545@opindex fdump-tree-ccp
3546Dump each function after CCP. The file name is made by appending
3547@file{.ccp} to the source file name.
3548
3549@item pre
3550@opindex fdump-tree-pre
3551Dump trees after partial redundancy elimination. The file name is made
3552by appending @file{.pre} to the source file name.
3553
ff2ad0f7
DN
3554@item fre
3555@opindex fdump-tree-fre
3556Dump trees after full redundancy elimination. The file name is made
3557by appending @file{.fre} to the source file name.
3558
6de9cd9a
DN
3559@item dce
3560@opindex fdump-tree-dce
3561Dump each function after dead code elimination. The file name is made by
3562appending @file{.dce} to the source file name.
3563
3564@item mudflap
3565@opindex fdump-tree-mudflap
3566Dump each function after adding mudflap instrumentation. The file name is
3567made by appending @file{.mudflap} to the source file name.
3568
3569@item sra
3570@opindex fdump-tree-sra
3571Dump each function after performing scalar replacement of aggregates. The
3572file name is made by appending @file{.sra} to the source file name.
3573
3574@item dom
3575@opindex fdump-tree-dom
3576Dump each function after applying dominator tree optimizations. The file
3577name is made by appending @file{.dom} to the source file name.
3578
3579@item dse
3580@opindex fdump-tree-dse
3581Dump each function after applying dead store elimination. The file
3582name is made by appending @file{.dse} to the source file name.
3583
3584@item phiopt
3585@opindex fdump-tree-phiopt
3586Dump each function after optimizing PHI nodes into straightline code. The file
3587name is made by appending @file{.phiopt} to the source file name.
3588
3589@item forwprop
3590@opindex fdump-tree-forwprop
3591Dump each function after forward propagating single use variables. The file
3592name is made by appending @file{.forwprop} to the source file name.
3593
3594@item copyrename
3595@opindex fdump-tree-copyrename
3596Dump each function after applying the copy rename optimization. The file
3597name is made by appending @file{.copyrename} to the source file name.
3598
3599@item nrv
3600@opindex fdump-tree-nrv
3601Dump each function after applying the named return value optimization on
3602generic trees. The file name is made by appending @file{.nrv} to the source
3603file name.
3604
3605@item all
3606@opindex fdump-tree-all
3607Enable all the available tree dumps with the flags provided in this option.
e76b4820 3608@end table
9965d119 3609
a37db56b
GK
3610@item -frandom-seed=@var{string}
3611@opindex frandom-string
3612This option provides a seed that GCC uses when it would otherwise use
e61a2eb7
NS
3613random numbers. It is used to generate certain symbol names
3614that have to be different in every compiled file. It is also used to
3615place unique stamps in coverage data files and the object files that
3616produce them. You can use the @option{-frandom-seed} option to produce
3617reproducibly identical object files.
a37db56b
GK
3618
3619The @var{string} should be different for every file you compile.
3620
e03b7153
RS
3621@item -fsched-verbose=@var{n}
3622@opindex fsched-verbose
3623On targets that use instruction scheduling, this option controls the
3624amount of debugging output the scheduler prints. This information is
3625written to standard error, unless @option{-dS} or @option{-dR} is
3626specified, in which case it is output to the usual dump
3627listing file, @file{.sched} or @file{.sched2} respectively. However
3628for @var{n} greater than nine, the output is always printed to standard
3629error.
3630
3631For @var{n} greater than zero, @option{-fsched-verbose} outputs the
3632same information as @option{-dRS}. For @var{n} greater than one, it
3633also output basic block probabilities, detailed ready list information
3634and unit/insn info. For @var{n} greater than two, it includes RTL
3635at abort point, control-flow and regions info. And for @var{n} over
3636four, @option{-fsched-verbose} also includes dependence info.
3637
74291a4b 3638@item -save-temps
cd3bb277 3639@opindex save-temps
74291a4b
MM
3640Store the usual ``temporary'' intermediate files permanently; place them
3641in the current directory and name them based on the source file. Thus,
3642compiling @file{foo.c} with @samp{-c -save-temps} would produce files
f2ecb02d
JM
3643@file{foo.i} and @file{foo.s}, as well as @file{foo.o}. This creates a
3644preprocessed @file{foo.i} output file even though the compiler now
3645normally uses an integrated preprocessor.
74291a4b 3646
03c41c05 3647@item -time
cd3bb277 3648@opindex time
03c41c05 3649Report the CPU time taken by each subprocess in the compilation
f2ecb02d
JM
3650sequence. For C source files, this is the compiler proper and assembler
3651(plus the linker if linking is done). The output looks like this:
03c41c05
ZW
3652
3653@smallexample
03c41c05
ZW
3654# cc1 0.12 0.01
3655# as 0.00 0.01
3656@end smallexample
3657
3658The first number on each line is the ``user time,'' that is time spent
3659executing the program itself. The second number is ``system time,''
3660time spent executing operating system routines on behalf of the program.
3661Both numbers are in seconds.
3662
014a1138
JZ
3663@item -fvar-tracking
3664@opindex fvar-tracking
3665Run variable tracking pass. It computes where variables are stored at each
3666position in code. Better debugging information is then generated
3667(if the debugging information format supports this information).
3668
3669It is enabled by default when compiling with optimization (@option{-Os},
3670@option{-O}, @option{-O2}, ...), debugging information (@option{-g}) and
3671the debug info format supports it.
3672
74291a4b 3673@item -print-file-name=@var{library}
cd3bb277 3674@opindex print-file-name
74291a4b
MM
3675Print the full absolute name of the library file @var{library} that
3676would be used when linking---and don't do anything else. With this
0c2d1a2a 3677option, GCC does not compile or link anything; it just prints the
74291a4b
MM
3678file name.
3679
b1018de6
AO
3680@item -print-multi-directory
3681@opindex print-multi-directory
3682Print the directory name corresponding to the multilib selected by any
3683other switches present in the command line. This directory is supposed
3684to exist in @env{GCC_EXEC_PREFIX}.
3685
3686@item -print-multi-lib
3687@opindex print-multi-lib
3688Print the mapping from multilib directory names to compiler switches
3689that enable them. The directory name is separated from the switches by
3690@samp{;}, and each switch starts with an @samp{@@} instead of the
3691@samp{-}, without spaces between multiple switches. This is supposed to
3692ease shell-processing.
3693
74291a4b 3694@item -print-prog-name=@var{program}
cd3bb277 3695@opindex print-prog-name
630d3d5a 3696Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
74291a4b
MM
3697
3698@item -print-libgcc-file-name
cd3bb277 3699@opindex print-libgcc-file-name
630d3d5a 3700Same as @option{-print-file-name=libgcc.a}.
74291a4b 3701
630d3d5a 3702This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
74291a4b
MM
3703but you do want to link with @file{libgcc.a}. You can do
3704
3ab51846 3705@smallexample
74291a4b 3706gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
3ab51846 3707@end smallexample
74291a4b
MM
3708
3709@item -print-search-dirs
cd3bb277 3710@opindex print-search-dirs
74291a4b 3711Print the name of the configured installation directory and a list of
2dd76960 3712program and library directories @command{gcc} will search---and don't do anything else.
74291a4b 3713
2dd76960 3714This is useful when @command{gcc} prints the error message
3c0b7970
JM
3715@samp{installation problem, cannot exec cpp0: No such file or directory}.
3716To resolve this you either need to put @file{cpp0} and the other compiler
2dd76960 3717components where @command{gcc} expects to find them, or you can set the environment
bedc7537 3718variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
74291a4b
MM
3719Don't forget the trailing '/'.
3720@xref{Environment Variables}.
1f0c3120
JM
3721
3722@item -dumpmachine
cd3bb277 3723@opindex dumpmachine
1f0c3120
JM
3724Print the compiler's target machine (for example,
3725@samp{i686-pc-linux-gnu})---and don't do anything else.
3726
3727@item -dumpversion
cd3bb277 3728@opindex dumpversion
1f0c3120
JM
3729Print the compiler version (for example, @samp{3.0})---and don't do
3730anything else.
3731
3732@item -dumpspecs
cd3bb277 3733@opindex dumpspecs
1f0c3120
JM
3734Print the compiler's built-in specs---and don't do anything else. (This
3735is used when GCC itself is being built.) @xref{Spec Files}.
73c68f61
SS
3736
3737@item -feliminate-unused-debug-types
3738@opindex feliminate-unused-debug-types
3739Normally, when producing DWARF2 output, GCC will emit debugging
3740information for all types declared in a compilation
3741unit, regardless of whether or not they are actually used
3742in that compilation unit. Sometimes this is useful, such as
3743if, in the debugger, you want to cast a value to a type that is
3744not actually used in your program (but is declared). More often,
3745however, this results in a significant amount of wasted space.
3746With this option, GCC will avoid producing debug symbol output
3747for types that are nowhere used in the source file being compiled.
74291a4b
MM
3748@end table
3749
3750@node Optimize Options
3751@section Options That Control Optimization
3752@cindex optimize options
3753@cindex options, optimization
3754
147d1cd3
JQ
3755These options control various sorts of optimizations.
3756
3757Without any optimization option, the compiler's goal is to reduce the
3758cost of compilation and to make debugging produce the expected
3759results. Statements are independent: if you stop the program with a
3760breakpoint between statements, you can then assign a new value to any
3761variable or change the program counter to any other statement in the
3762function and get exactly the results you would expect from the source
3763code.
3764
3765Turning on optimization flags makes the compiler attempt to improve
3766the performance and/or code size at the expense of compilation time
3767and possibly the ability to debug the program.
3768
a451b0bd 3769The compiler performs optimization based on the knowledge it has of
7797ff53
PB
3770the program. Optimization levels @option{-O2} and above, in
3771particular, enable @emph{unit-at-a-time} mode, which allows the
3772compiler to consider information gained from later functions in
3773the file when compiling a function. Compiling multiple files at
3774once to a single output file in @emph{unit-at-a-time} mode allows
d1bd0ded
GK
3775the compiler to use information gained from all of the files when
3776compiling each of them.
3777
147d1cd3
JQ
3778Not all optimizations are controlled directly by a flag. Only
3779optimizations that have a flag are listed.
74291a4b 3780
2642624b 3781@table @gcctabopt
74291a4b
MM
3782@item -O
3783@itemx -O1
cd3bb277
JM
3784@opindex O
3785@opindex O1
74291a4b
MM
3786Optimize. Optimizing compilation takes somewhat more time, and a lot
3787more memory for a large function.
3788
630d3d5a 3789With @option{-O}, the compiler tries to reduce code size and execution
9c34dbbf
ZW
3790time, without performing any optimizations that take a great deal of
3791compilation time.
74291a4b 3792
daf2f129 3793@option{-O} turns on the following optimization flags:
9a94f7f3
JM
3794@gccoptlist{-fdefer-pop @gol
3795-fmerge-constants @gol
3796-fthread-jumps @gol
3797-floop-optimize @gol
9a94f7f3
JM
3798-fif-conversion @gol
3799-fif-conversion2 @gol
3800-fdelayed-branch @gol
3801-fguess-branch-probability @gol
fad893da
JQ
3802-fcprop-registers}
3803
3804@option{-O} also turns on @option{-fomit-frame-pointer} on machines
3805where doing so does not interfere with debugging.
3806
74291a4b 3807@item -O2
cd3bb277 3808@opindex O2
0c2d1a2a 3809Optimize even more. GCC performs nearly all supported optimizations
74291a4b 3810that do not involve a space-speed tradeoff. The compiler does not
630d3d5a
JM
3811perform loop unrolling or function inlining when you specify @option{-O2}.
3812As compared to @option{-O}, this option increases both compilation time
74291a4b
MM
3813and the performance of the generated code.
3814
fad893da
JQ
3815@option{-O2} turns on all optimization flags specified by @option{-O}. It
3816also turns on the following optimization flags:
9a94f7f3
JM
3817@gccoptlist{-fforce-mem @gol
3818-foptimize-sibling-calls @gol
3819-fstrength-reduce @gol
3820-fcse-follow-jumps -fcse-skip-blocks @gol
3821-frerun-cse-after-loop -frerun-loop-opt @gol
f5f2e3cd 3822-fgcse -fgcse-lm -fgcse-sm -fgcse-las @gol
9a94f7f3
JM
3823-fdelete-null-pointer-checks @gol
3824-fexpensive-optimizations @gol
f5f2e3cd 3825-fregmove @gol
9a94f7f3
JM
3826-fschedule-insns -fschedule-insns2 @gol
3827-fsched-interblock -fsched-spec @gol
3828-fcaller-saves @gol
3829-fpeephole2 @gol
3830-freorder-blocks -freorder-functions @gol
3831-fstrict-aliasing @gol
23a44080 3832-funit-at-a-time @gol
9a94f7f3 3833-falign-functions -falign-jumps @gol
b684a3df
JH
3834-falign-loops -falign-labels @gol
3835-fcrossjumping}
74291a4b 3836
081ca317
BL
3837Please note the warning under @option{-fgcse} about
3838invoking @option{-O2} on programs that use computed gotos.
3839
74291a4b 3840@item -O3
cd3bb277 3841@opindex O3
630d3d5a 3842Optimize yet more. @option{-O3} turns on all optimizations specified by
dafc5b82 3843@option{-O2} and also turns on the @option{-finline-functions},
db643b91
SH
3844@option{-fweb}, @option{-frename-registers}
3845and @option{-fgcse-after-reload} options.
74291a4b
MM
3846
3847@item -O0
cd3bb277 3848@opindex O0
fad893da 3849Do not optimize. This is the default.
74291a4b 3850
c6aded7c 3851@item -Os
cd3bb277 3852@opindex Os
630d3d5a 3853Optimize for size. @option{-Os} enables all @option{-O2} optimizations that
c6aded7c
AG
3854do not typically increase code size. It also performs further
3855optimizations designed to reduce code size.
3856
fad893da 3857@option{-Os} disables the following optimization flags:
9a94f7f3 3858@gccoptlist{-falign-functions -falign-jumps -falign-loops @gol
750054a2 3859-falign-labels -freorder-blocks -freorder-blocks-and-partition -fprefetch-loop-arrays}
fad893da 3860
630d3d5a 3861If you use multiple @option{-O} options, with or without level numbers,
74291a4b
MM
3862the last such option is the one that is effective.
3863@end table
3864
630d3d5a 3865Options of the form @option{-f@var{flag}} specify machine-independent
74291a4b 3866flags. Most flags have both positive and negative forms; the negative
147d1cd3
JQ
3867form of @option{-ffoo} would be @option{-fno-foo}. In the table
3868below, only one of the forms is listed---the one you typically will
3869use. You can figure out the other form by either removing @samp{no-}
3870or adding it.
3871
3872The following options control specific optimizations. They are either
3873activated by @option{-O} options or are related to ones that are. You
3874can use the following flags in the rare cases when ``fine-tuning'' of
3875optimizations to be performed is desired.
74291a4b 3876
2642624b 3877@table @gcctabopt
74291a4b 3878@item -fno-default-inline
cd3bb277 3879@opindex fno-default-inline
74291a4b
MM
3880Do not make member functions inline by default merely because they are
3881defined inside the class scope (C++ only). Otherwise, when you specify
630d3d5a 3882@w{@option{-O}}, member functions defined inside class scope are compiled
74291a4b
MM
3883inline by default; i.e., you don't need to add @samp{inline} in front of
3884the member function name.
3885
3886@item -fno-defer-pop
cd3bb277 3887@opindex fno-defer-pop
74291a4b
MM
3888Always pop the arguments to each function call as soon as that function
3889returns. For machines which must pop arguments after a function call,
3890the compiler normally lets arguments accumulate on the stack for several
3891function calls and pops them all at once.
3892
38df970e
JQ
3893Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3894
74291a4b 3895@item -fforce-mem
cd3bb277 3896@opindex fforce-mem
74291a4b
MM
3897Force memory operands to be copied into registers before doing
3898arithmetic on them. This produces better code by making all memory
3899references potential common subexpressions. When they are not common
3900subexpressions, instruction combination should eliminate the separate
38df970e
JQ
3901register-load.
3902
3903Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
74291a4b
MM
3904
3905@item -fforce-addr
cd3bb277 3906@opindex fforce-addr
74291a4b
MM
3907Force memory address constants to be copied into registers before
3908doing arithmetic on them. This may produce better code just as
630d3d5a 3909@option{-fforce-mem} may.
74291a4b
MM
3910
3911@item -fomit-frame-pointer
cd3bb277 3912@opindex fomit-frame-pointer
74291a4b
MM
3913Don't keep the frame pointer in a register for functions that
3914don't need one. This avoids the instructions to save, set up and
3915restore frame pointers; it also makes an extra register available
3916in many functions. @strong{It also makes debugging impossible on
3917some machines.}
3918
8aeea6e6 3919On some machines, such as the VAX, this flag has no effect, because
74291a4b
MM
3920the standard calling sequence automatically handles the frame pointer
3921and nothing is saved by pretending it doesn't exist. The
3922machine-description macro @code{FRAME_POINTER_REQUIRED} controls
3923whether a target machine supports this flag. @xref{Registers,,Register
b11cc610 3924Usage, gccint, GNU Compiler Collection (GCC) Internals}.
74291a4b 3925
38df970e
JQ
3926Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
3927
1aaef9c1 3928@item -foptimize-sibling-calls
cd3bb277 3929@opindex foptimize-sibling-calls
1aaef9c1
JH
3930Optimize sibling and tail recursive calls.
3931
38df970e
JQ
3932Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
3933
74291a4b 3934@item -fno-inline
cd3bb277 3935@opindex fno-inline
74291a4b
MM
3936Don't pay attention to the @code{inline} keyword. Normally this option
3937is used to keep the compiler from expanding any functions inline.
3938Note that if you are not optimizing, no functions can be expanded inline.
3939
3940@item -finline-functions
cd3bb277 3941@opindex finline-functions
74291a4b
MM
3942Integrate all simple functions into their callers. The compiler
3943heuristically decides which functions are simple enough to be worth
3944integrating in this way.
3945
3946If all calls to a given function are integrated, and the function is
3947declared @code{static}, then the function is normally not output as
3948assembler code in its own right.
3949
38df970e
JQ
3950Enabled at level @option{-O3}.
3951
efa3896a 3952@item -finline-limit=@var{n}
cd3bb277 3953@opindex finline-limit
2dd76960 3954By default, GCC limits the size of functions that can be inlined. This flag
f9e814f1 3955allows the control of this limit for functions that are explicitly marked as
3364c33b 3956inline (i.e., marked with the inline keyword or defined within the class
02f52e19 3957definition in c++). @var{n} is the size of functions that can be inlined in
f9e814f1 3958number of pseudo instructions (not counting parameter handling). The default
93ee12c4
GP
3959value of @var{n} is 600.
3960Increasing this value can result in more inlined code at
f9e814f1 3961the cost of compilation time and memory consumption. Decreasing usually makes
02f52e19
AJ
3962the compilation faster and less code will be inlined (which presumably
3963means slower programs). This option is particularly useful for programs that
aee96fe9 3964use inlining heavily such as those based on recursive templates with C++.
f9e814f1 3965
bc522472
KG
3966Inlining is actually controlled by a number of parameters, which may be
3967specified individually by using @option{--param @var{name}=@var{value}}.
daf2f129 3968The @option{-finline-limit=@var{n}} option sets some of these parameters
bc522472
KG
3969as follows:
3970
3971@table @gcctabopt
bc522472
KG
3972 @item max-inline-insns-single
3973 is set to @var{n}/2.
6d7fe8b3 3974 @item max-inline-insns-auto
bc522472
KG
3975 is set to @var{n}/2.
3976 @item min-inline-insns
3977 is set to 130 or @var{n}/4, whichever is smaller.
3978 @item max-inline-insns-rtl
3979 is set to @var{n}.
3980@end table
3981
f7a01847 3982See below for a documentation of the individual
bc522472
KG
3983parameters controlling inlining.
3984
f9e814f1
TP
3985@emph{Note:} pseudo instruction represents, in this particular context, an
3986abstract measurement of function's size. In no way, it represents a count
3987of assembly instructions and as such its exact meaning might change from one
3988release to an another.
3989
74291a4b 3990@item -fkeep-inline-functions
cd3bb277 3991@opindex fkeep-inline-functions
74291a4b
MM
3992Even if all calls to a given function are integrated, and the function
3993is declared @code{static}, nevertheless output a separate run-time
3994callable version of the function. This switch does not affect
3995@code{extern inline} functions.
3996
3997@item -fkeep-static-consts
cd3bb277 3998@opindex fkeep-static-consts
74291a4b
MM
3999Emit variables declared @code{static const} when optimization isn't turned
4000on, even if the variables aren't referenced.
4001
0c2d1a2a 4002GCC enables this option by default. If you want to force the compiler to
74291a4b 4003check if the variable was referenced, regardless of whether or not
630d3d5a 4004optimization is turned on, use the @option{-fno-keep-static-consts} option.
74291a4b 4005
201556f0
JJ
4006@item -fmerge-constants
4007Attempt to merge identical constants (string constants and floating point
3364c33b 4008constants) across compilation units.
201556f0 4009
3364c33b
JQ
4010This option is the default for optimized compilation if the assembler and
4011linker support it. Use @option{-fno-merge-constants} to inhibit this
4012behavior.
201556f0 4013
38df970e
JQ
4014Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4015
201556f0
JJ
4016@item -fmerge-all-constants
4017Attempt to merge identical constants and identical variables.
4018
4019This option implies @option{-fmerge-constants}. In addition to
4020@option{-fmerge-constants} this considers e.g. even constant initialized
4021arrays or initialized constant variables with integral or floating point
4022types. Languages like C or C++ require each non-automatic variable to
4023have distinct location, so using this option will result in non-conforming
c21cd8b1 4024behavior.
201556f0 4025
e5626198
AZ
4026@item -fmodulo-sched
4027@opindex fmodulo-sched
4028Perform swing modulo scheduling immediately before the first scheduling
4029pass. This pass looks at innermost loops and reorders their
4030instructions by overlapping different iterations.
4031
ed8d2920
MM
4032@item -fnew-ra
4033@opindex fnew-ra
4034Use a graph coloring register allocator. Currently this option is meant
7db956db
DH
4035only for testing. Users should not specify this option, since it is not
4036yet ready for production use.
ed8d2920 4037
e03b7153
RS
4038@item -fno-branch-count-reg
4039@opindex fno-branch-count-reg
4040Do not use ``decrement and branch'' instructions on a count register,
4041but instead generate a sequence of instructions that decrement a
4042register, compare it against zero, then branch based upon the result.
4043This option is only meaningful on architectures that support such
4044instructions, which include x86, PowerPC, IA-64 and S/390.
4045
38df970e
JQ
4046The default is @option{-fbranch-count-reg}, enabled when
4047@option{-fstrength-reduce} is enabled.
4048
74291a4b 4049@item -fno-function-cse
cd3bb277 4050@opindex fno-function-cse
74291a4b
MM
4051Do not put function addresses in registers; make each instruction that
4052calls a constant function contain the function's address explicitly.
4053
4054This option results in less efficient code, but some strange hacks
4055that alter the assembler output may be confused by the optimizations
4056performed when this option is not used.
4057
38df970e
JQ
4058The default is @option{-ffunction-cse}
4059
27b41650
KG
4060@item -fno-zero-initialized-in-bss
4061@opindex fno-zero-initialized-in-bss
4062If the target supports a BSS section, GCC by default puts variables that
4063are initialized to zero into BSS@. This can save space in the resulting
4064code.
4065
4066This option turns off this behavior because some programs explicitly
4067rely on variables going to the data section. E.g., so that the
4068resulting executable can find the beginning of that section and/or make
4069assumptions based on that.
4070
4071The default is @option{-fzero-initialized-in-bss}.
e03b7153 4072
6de9cd9a
DN
4073@item -fbounds-check
4074@opindex fbounds-check
4075For front-ends that support it, generate additional code to check that
4076indices used to access arrays are within the declared range. This is
4077currently only supported by the Java and Fortran front-ends, where
4078this option defaults to true and false respectively.
4079
4080@item -fmudflap -fmudflapth -fmudflapir
4081@opindex fmudflap
4082@opindex fmudflapth
4083@opindex fmudflapir
4084@cindex bounds checking
4085@cindex mudflap
4086For front-ends that support it (C and C++), instrument all risky
4087pointer/array dereferencing operations, some standard library
4088string/heap functions, and some other associated constructs with
4089range/validity tests. Modules so instrumented should be immune to
4090buffer overflows, invalid heap use, and some other classes of C/C++
4091programming errors. The instrumentation relies on a separate runtime
4092library (@file{libmudflap}), which will be linked into a program if
4093@option{-fmudflap} is given at link time. Run-time behavior of the
4094instrumented program is controlled by the @env{MUDFLAP_OPTIONS}
4095environment variable. See @code{env MUDFLAP_OPTIONS=-help a.out}
4096for its options.
4097
4098Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to
4099link if your program is multi-threaded. Use @option{-fmudflapir}, in
4100addition to @option{-fmudflap} or @option{-fmudflapth}, if
4101instrumentation should ignore pointer reads. This produces less
4102instrumentation (and therefore faster execution) and still provides
4103some protection against outright memory corrupting writes, but allows
4104erroneously read data to propagate within a program.
4105
74291a4b 4106@item -fstrength-reduce
cd3bb277 4107@opindex fstrength-reduce
74291a4b
MM
4108Perform the optimizations of loop strength reduction and
4109elimination of iteration variables.
4110
38df970e
JQ
4111Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4112
74291a4b 4113@item -fthread-jumps
cd3bb277 4114@opindex fthread-jumps
74291a4b
MM
4115Perform optimizations where we check to see if a jump branches to a
4116location where another comparison subsumed by the first is found. If
4117so, the first branch is redirected to either the destination of the
4118second branch or a point immediately following it, depending on whether
4119the condition is known to be true or false.
4120
38df970e
JQ
4121Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4122
74291a4b 4123@item -fcse-follow-jumps
cd3bb277 4124@opindex fcse-follow-jumps
74291a4b
MM
4125In common subexpression elimination, scan through jump instructions
4126when the target of the jump is not reached by any other path. For
4127example, when CSE encounters an @code{if} statement with an
4128@code{else} clause, CSE will follow the jump when the condition
4129tested is false.
4130
38df970e
JQ
4131Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4132
74291a4b 4133@item -fcse-skip-blocks
cd3bb277 4134@opindex fcse-skip-blocks
630d3d5a 4135This is similar to @option{-fcse-follow-jumps}, but causes CSE to
74291a4b
MM
4136follow jumps which conditionally skip over blocks. When CSE
4137encounters a simple @code{if} statement with no else clause,
630d3d5a 4138@option{-fcse-skip-blocks} causes CSE to follow the jump around the
74291a4b
MM
4139body of the @code{if}.
4140
38df970e
JQ
4141Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4142
74291a4b 4143@item -frerun-cse-after-loop
cd3bb277 4144@opindex frerun-cse-after-loop
74291a4b
MM
4145Re-run common subexpression elimination after loop optimizations has been
4146performed.
4147
38df970e
JQ
4148Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4149
6d6d0fa0 4150@item -frerun-loop-opt
cd3bb277 4151@opindex frerun-loop-opt
6d6d0fa0
JL
4152Run the loop optimizer twice.
4153
38df970e
JQ
4154Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4155
7506f491 4156@item -fgcse
cd3bb277 4157@opindex fgcse
7506f491
DE
4158Perform a global common subexpression elimination pass.
4159This pass also performs global constant and copy propagation.
4160
081ca317
BL
4161@emph{Note:} When compiling a program using computed gotos, a GCC
4162extension, you may get better runtime performance if you disable
3364c33b 4163the global common subexpression elimination pass by adding
081ca317
BL
4164@option{-fno-gcse} to the command line.
4165
38df970e
JQ
4166Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4167
a13d4ebf 4168@item -fgcse-lm
cd3bb277 4169@opindex fgcse-lm
695ac33f 4170When @option{-fgcse-lm} is enabled, global common subexpression elimination will
767094dd 4171attempt to move loads which are only killed by stores into themselves. This
a13d4ebf 4172allows a loop containing a load/store sequence to be changed to a load outside
02f52e19 4173the loop, and a copy/store within the loop.
a13d4ebf 4174
38df970e
JQ
4175Enabled by default when gcse is enabled.
4176
a13d4ebf 4177@item -fgcse-sm
cd3bb277 4178@opindex fgcse-sm
f5f2e3cd
MH
4179When @option{-fgcse-sm} is enabled, a store motion pass is run after
4180global common subexpression elimination. This pass will attempt to move
4181stores out of loops. When used in conjunction with @option{-fgcse-lm},
4182loops containing a load/store sequence can be changed to a load before
4183the loop and a store after the loop.
4184
4185Enabled by default when gcse is enabled.
4186
4187@item -fgcse-las
4188@opindex fgcse-las
4189When @option{-fgcse-las} is enabled, the global common subexpression
4190elimination pass eliminates redundant loads that come after stores to the
2206e783 4191same memory location (both partial and full redundancies).
a13d4ebf 4192
38df970e
JQ
4193Enabled by default when gcse is enabled.
4194
db643b91
SH
4195@item -fgcse-after-reload
4196@opindex fgcse-after-reload
4197When @option{-fgcse-after-reload} is enabled, a redundant load elimination
4198pass is performed after reload. The purpose of this pass is to cleanup
4199redundant spilling.
4200
96327cdc
JH
4201@item -floop-optimize
4202@opindex floop-optimize
4203Perform loop optimizations: move constant expressions out of loops, simplify
4204exit test conditions and optionally do strength-reduction and loop unrolling as
4205well.
4206
38df970e
JQ
4207Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4208
5e962776
ZD
4209@item -floop-optimize2
4210@opindex floop-optimize2
4211Perform loop optimizations using the new loop optimizer. The optimizations
4212(loop unrolling, peeling and unswitching, loop invariant motion) are enabled
4213by separate flags.
4214
96327cdc
JH
4215@item -fcrossjumping
4216@opindex crossjumping
4217Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The
4218resulting code may or may not perform better than without cross-jumping.
4219
38df970e
JQ
4220Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4221
2c4b77f3
JH
4222@item -fif-conversion
4223@opindex if-conversion
4224Attempt to transform conditional jumps into branch-less equivalents. This
4225include use of conditional moves, min, max, set flags and abs instructions, and
4226some tricks doable by standard arithmetics. The use of conditional execution
4227on chips where it is available is controlled by @code{if-conversion2}.
4228
38df970e
JQ
4229Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4230
2c4b77f3
JH
4231@item -fif-conversion2
4232@opindex if-conversion2
4233Use conditional execution (where available) to transform conditional jumps into
4234branch-less equivalents.
4235
38df970e
JQ
4236Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4237
b6d24183 4238@item -fdelete-null-pointer-checks
cd3bb277 4239@opindex fdelete-null-pointer-checks
9c34dbbf
ZW
4240Use global dataflow analysis to identify and eliminate useless checks
4241for null pointers. The compiler assumes that dereferencing a null
4242pointer would have halted the program. If a pointer is checked after
4243it has already been dereferenced, it cannot be null.
4244
4245In some environments, this assumption is not true, and programs can
4246safely dereference null pointers. Use
4247@option{-fno-delete-null-pointer-checks} to disable this optimization
4248for programs which depend on that behavior.
b6d24183 4249
38df970e
JQ
4250Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4251
74291a4b 4252@item -fexpensive-optimizations
cd3bb277 4253@opindex fexpensive-optimizations
74291a4b
MM
4254Perform a number of minor optimizations that are relatively expensive.
4255
38df970e
JQ
4256Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4257
639726ba 4258@item -foptimize-register-move
59d40964 4259@itemx -fregmove
cd3bb277
JM
4260@opindex foptimize-register-move
4261@opindex fregmove
9ec36da5
JL
4262Attempt to reassign register numbers in move instructions and as
4263operands of other simple instructions in order to maximize the amount of
56159047 4264register tying. This is especially helpful on machines with two-operand
38df970e 4265instructions.
9ec36da5 4266
bedc7537 4267Note @option{-fregmove} and @option{-foptimize-register-move} are the same
9ec36da5
JL
4268optimization.
4269
38df970e
JQ
4270Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4271
74291a4b 4272@item -fdelayed-branch
cd3bb277 4273@opindex fdelayed-branch
74291a4b
MM
4274If supported for the target machine, attempt to reorder instructions
4275to exploit instruction slots available after delayed branch
4276instructions.
4277
38df970e
JQ
4278Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4279
74291a4b 4280@item -fschedule-insns
cd3bb277 4281@opindex fschedule-insns
74291a4b
MM
4282If supported for the target machine, attempt to reorder instructions to
4283eliminate execution stalls due to required data being unavailable. This
4284helps machines that have slow floating point or memory load instructions
4285by allowing other instructions to be issued until the result of the load
4286or floating point instruction is required.
4287
38df970e
JQ
4288Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4289
74291a4b 4290@item -fschedule-insns2
cd3bb277 4291@opindex fschedule-insns2
630d3d5a 4292Similar to @option{-fschedule-insns}, but requests an additional pass of
74291a4b
MM
4293instruction scheduling after register allocation has been done. This is
4294especially useful on machines with a relatively small number of
4295registers and where memory load instructions take more than one cycle.
4296
38df970e
JQ
4297Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4298
e03b7153
RS
4299@item -fno-sched-interblock
4300@opindex fno-sched-interblock
4301Don't schedule instructions across basic blocks. This is normally
4302enabled by default when scheduling before register allocation, i.e.@:
4303with @option{-fschedule-insns} or at @option{-O2} or higher.
4304
4305@item -fno-sched-spec
4306@opindex fno-sched-spec
4307Don't allow speculative motion of non-load instructions. This is normally
4308enabled by default when scheduling before register allocation, i.e.@:
4309with @option{-fschedule-insns} or at @option{-O2} or higher.
4310
4311@item -fsched-spec-load
4312@opindex fsched-spec-load
4313Allow speculative motion of some load instructions. This only makes
4314sense when scheduling before register allocation, i.e.@: with
4315@option{-fschedule-insns} or at @option{-O2} or higher.
4316
4317@item -fsched-spec-load-dangerous
4318@opindex fsched-spec-load-dangerous
4319Allow speculative motion of more load instructions. This only makes
4320sense when scheduling before register allocation, i.e.@: with
4321@option{-fschedule-insns} or at @option{-O2} or higher.
4322
569fa502
DN
4323@item -fsched-stalled-insns=@var{n}
4324@opindex fsched-stalled-insns
4325Define how many insns (if any) can be moved prematurely from the queue
4326of stalled insns into the ready list, during the second scheduling pass.
4327
4328@item -fsched-stalled-insns-dep=@var{n}
4329@opindex fsched-stalled-insns-dep
daf2f129
JM
4330Define how many insn groups (cycles) will be examined for a dependency
4331on a stalled insn that is candidate for premature removal from the queue
4332of stalled insns. Has an effect only during the second scheduling pass,
569fa502
DN
4333and only if @option{-fsched-stalled-insns} is used and its value is not zero.
4334
b9422b69
JH
4335@item -fsched2-use-superblocks
4336@opindex fsched2-use-superblocks
61aeb06f 4337When scheduling after register allocation, do use superblock scheduling
62b9c42c 4338algorithm. Superblock scheduling allows motion across basic block boundaries
b9422b69 4339resulting on faster schedules. This option is experimental, as not all machine
62b9c42c 4340descriptions used by GCC model the CPU closely enough to avoid unreliable
daf2f129 4341results from the algorithm.
b9422b69
JH
4342
4343This only makes sense when scheduling after register allocation, i.e.@: with
4344@option{-fschedule-insns2} or at @option{-O2} or higher.
4345
4346@item -fsched2-use-traces
4347@opindex fsched2-use-traces
4348Use @option{-fsched2-use-superblocks} algorithm when scheduling after register
4349allocation and additionally perform code duplication in order to increase the
4350size of superblocks using tracer pass. See @option{-ftracer} for details on
4351trace formation.
4352
62b9c42c 4353This mode should produce faster but significantly longer programs. Also
b9422b69
JH
4354without @code{-fbranch-probabilities} the traces constructed may not match the
4355reality and hurt the performance. This only makes
4356sense when scheduling after register allocation, i.e.@: with
4357@option{-fschedule-insns2} or at @option{-O2} or higher.
4358
74291a4b 4359@item -fcaller-saves
cd3bb277 4360@opindex fcaller-saves
74291a4b
MM
4361Enable values to be allocated in registers that will be clobbered by
4362function calls, by emitting extra instructions to save and restore the
4363registers around such calls. Such allocation is done only when it
4364seems to result in better code than would otherwise be produced.
4365
81610a0d
HPN
4366This option is always enabled by default on certain machines, usually
4367those which have no call-preserved registers to use instead.
4368
38df970e 4369Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
74291a4b 4370
6de9cd9a
DN
4371@item -ftree-pre
4372Perform Partial Redundancy Elimination (PRE) on trees. This flag is
4373enabled by default at -O and higher.
ff2ad0f7
DN
4374
4375@item -ftree-fre
4376Perform Full Redundancy Elimination (FRE) on trees. The difference
4377between FRE and PRE is that FRE only considers expressions
4378that are computed on all paths leading to the redundant computation.
4379This analysis faster than PRE, though it exposes fewer redundancies.
4380This flag is enabled by default at -O and higher.
6de9cd9a
DN
4381
4382@item -ftree-ccp
4383Perform sparse conditional constant propagation (CCP) on trees. This flag
4384is enabled by default at -O and higher.
4385
4386@item -ftree-dce
4387Perform dead code elimination (DCE) on trees. This flag is enabled by
4388default at -O and higher.
4389
4390@item -ftree-dominator-opts
4391Perform dead code elimination (DCE) on trees. This flag is enabled by
4392default at -O and higher.
4393
4394@item -ftree-ch
4395Perform loop header copying on trees. This is beneficial since it increases
4396effectivity of code motion optimizations. It also saves one jump. This flag
4397is enabled by default at -O and higher. It is not enabled for -Os, since it
4398usually increases code size.
4399
c66b6c66
ZD
4400@item -ftree-loop-optimize
4401Perform loop optimizations on trees. This flag is enabled by default at -O
4402and higher.
4403
6de9cd9a
DN
4404@item -ftree-sra
4405Perform scalar replacement of aggregates. This pass replaces structure
4406references with scalars to prevent committing structures to memory too
4407early. This flag is enabled by default at -O and higher.
4408
4409@item -ftree-copyrename
f26c1794
EC
4410Perform copy renaming on trees. This pass attempts to rename compiler
4411temporaries to other variables at copy locations, usually resulting in
4412variable names which more closely resemble the original variables. This flag
6de9cd9a
DN
4413is enabled by default at -O and higher.
4414
4415@item -ftree-ter
4416Perform temporary expression replacement during the SSA->normal phase. Single
f26c1794
EC
4417use/single def temporaries are replaced at their use location with their
4418defining expression. This results in non-GIMPLE code, but gives the expanders
6de9cd9a
DN
4419much more complex trees to work on resulting in better RTL generation. This is
4420enabled by default at -O and higher.
4421
4422@item -ftree-lrs
f26c1794
EC
4423Perform live range splitting during the SSA->normal phase. Distinct live
4424ranges of a variable are split into unique variables, allowing for better
6de9cd9a
DN
4425optimization later. This is enabled by default at -O and higher.
4426
4427@item -ftracer
4428@opindex ftracer
4429Perform tail duplication to enlarge superblock size. This transformation
4430simplifies the control flow of the function allowing other optimizations to do
4431better job.
4432
4433@item -funroll-loops
4434@opindex funroll-loops
4435Unroll loops whose number of iterations can be determined at compile
4436time or upon entry to the loop. @option{-funroll-loops} implies both
4437@option{-fstrength-reduce} and @option{-frerun-cse-after-loop}. This
4438option makes code larger, and may or may not make it run faster.
4439
4440@item -funroll-all-loops
4441@opindex funroll-all-loops
4442Unroll all loops, even if their number of iterations is uncertain when
4443the loop is entered. This usually makes programs run more slowly.
4444@option{-funroll-all-loops} implies the same options as
4445@option{-funroll-loops},
4446
4447@item -fprefetch-loop-arrays
4448@opindex fprefetch-loop-arrays
4449If supported by the target machine, generate instructions to prefetch
4450memory to improve the performance of loops that access large arrays.
4451
e5eb27e5 4452@item -fmove-all-movables
cd3bb277 4453@opindex fmove-all-movables
e5eb27e5
JL
4454Forces all invariant computations in loops to be moved
4455outside the loop.
4456
4457@item -freduce-all-givs
cd3bb277 4458@opindex freduce-all-givs
e5eb27e5
JL
4459Forces all general-induction variables in loops to be
4460strength-reduced.
4461
4462@emph{Note:} When compiling programs written in Fortran,
630d3d5a 4463@option{-fmove-all-movables} and @option{-freduce-all-givs} are enabled
e5eb27e5
JL
4464by default when you use the optimizer.
4465
4466These options may generate better or worse code; results are highly
4467dependent on the structure of loops within the source code.
4468
4469These two options are intended to be removed someday, once
4470they have helped determine the efficacy of various
4471approaches to improving loop optimizations.
4472
962e6e00
JM
4473Please contact @w{@email{gcc@@gcc.gnu.org}}, and describe how use of
4474these options affects the performance of your production code.
4475Examples of code that runs @emph{slower} when these options are
4476@emph{enabled} are very valuable.
e5eb27e5 4477
74291a4b 4478@item -fno-peephole
6cfc0341 4479@itemx -fno-peephole2
cd3bb277 4480@opindex fno-peephole
6cfc0341
RH
4481@opindex fno-peephole2
4482Disable any machine-specific peephole optimizations. The difference
630d3d5a 4483between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
6cfc0341
RH
4484are implemented in the compiler; some targets use one, some use the
4485other, a few use both.
861bb6c1 4486
38df970e
JQ
4487@option{-fpeephole} is enabled by default.
4488@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4489
454d0cc7 4490@item -fno-guess-branch-probability
cd3bb277 4491@opindex fno-guess-branch-probability
9c34dbbf
ZW
4492Do not guess branch probabilities using a randomized model.
4493
2dd76960 4494Sometimes GCC will opt to use a randomized model to guess branch
9c34dbbf
ZW
4495probabilities, when none are available from either profiling feedback
4496(@option{-fprofile-arcs}) or @samp{__builtin_expect}. This means that
4497different runs of the compiler on the same program may produce different
4498object code.
4499
4500In a hard real-time system, people don't want different runs of the
4501compiler to produce code that has different behavior; minimizing
4502non-determinism is of paramount import. This switch allows users to
4503reduce non-determinism, possibly at the expense of inferior
4504optimization.
454d0cc7 4505
38df970e
JQ
4506The default is @option{-fguess-branch-probability} at levels
4507@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4508
194734e9
JH
4509@item -freorder-blocks
4510@opindex freorder-blocks
4511Reorder basic blocks in the compiled function in order to reduce number of
4512taken branches and improve code locality.
4513
3f8b659d 4514Enabled at levels @option{-O2}, @option{-O3}.
38df970e 4515
750054a2
CT
4516@item -freorder-blocks-and-partition
4517@opindex freorder-blocks-and-partition
4518In addition to reordering basic blocks in the compiled function, in order
4519to reduce number of taken branches, partitions hot and cold basic blocks
4520into separate sections of the assembly and .o files, to improve
4521paging and cache locality performance.
4522
194734e9
JH
4523@item -freorder-functions
4524@opindex freorder-functions
4525Reorder basic blocks in the compiled function in order to reduce number of
4526taken branches and improve code locality. This is implemented by using special
3a4bdd05
RH
4527subsections @code{.text.hot} for most frequently executed functions and
4528@code{.text.unlikely} for unlikely executed functions. Reordering is done by
194734e9 4529the linker so object file format must support named sections and linker must
3364c33b 4530place them in a reasonable way.
194734e9
JH
4531
4532Also profile feedback must be available in to make this option effective. See
4533@option{-fprofile-arcs} for details.
4534
38df970e
JQ
4535Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4536
41472af8 4537@item -fstrict-aliasing
cd3bb277 4538@opindex fstrict-aliasing
41472af8
MM
4539Allows the compiler to assume the strictest aliasing rules applicable to
4540the language being compiled. For C (and C++), this activates
4541optimizations based on the type of expressions. In particular, an
4542object of one type is assumed never to reside at the same address as an
4543object of a different type, unless the types are almost the same. For
4544example, an @code{unsigned int} can alias an @code{int}, but not a
4545@code{void*} or a @code{double}. A character type may alias any other
02f52e19 4546type.
41472af8
MM
4547
4548Pay special attention to code like this:
3ab51846 4549@smallexample
02f52e19 4550union a_union @{
41472af8
MM
4551 int i;
4552 double d;
4553@};
4554
4555int f() @{
4556 a_union t;
4557 t.d = 3.0;
4558 return t.i;
4559@}
3ab51846 4560@end smallexample
41472af8
MM
4561The practice of reading from a different union member than the one most
4562recently written to (called ``type-punning'') is common. Even with
630d3d5a 4563@option{-fstrict-aliasing}, type-punning is allowed, provided the memory
41472af8
MM
4564is accessed through the union type. So, the code above will work as
4565expected. However, this code might not:
3ab51846 4566@smallexample
02f52e19 4567int f() @{
41472af8
MM
4568 a_union t;
4569 int* ip;
4570 t.d = 3.0;
4571 ip = &t.i;
4572 return *ip;
4573@}
3ab51846 4574@end smallexample
41472af8 4575
41472af8
MM
4576Every language that wishes to perform language-specific alias analysis
4577should define a function that computes, given an @code{tree}
4578node, an alias set for the node. Nodes in different alias sets are not
4579allowed to alias. For an example, see the C front-end function
4580@code{c_get_alias_set}.
41472af8 4581
38df970e 4582Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
852b81bb 4583
efa3896a
GK
4584@item -falign-functions
4585@itemx -falign-functions=@var{n}
cd3bb277 4586@opindex falign-functions
efa3896a
GK
4587Align the start of functions to the next power-of-two greater than
4588@var{n}, skipping up to @var{n} bytes. For instance,
630d3d5a
JM
4589@option{-falign-functions=32} aligns functions to the next 32-byte
4590boundary, but @option{-falign-functions=24} would align to the next
efa3896a
GK
459132-byte boundary only if this can be done by skipping 23 bytes or less.
4592
630d3d5a 4593@option{-fno-align-functions} and @option{-falign-functions=1} are
efa3896a
GK
4594equivalent and mean that functions will not be aligned.
4595
4596Some assemblers only support this flag when @var{n} is a power of two;
4597in that case, it is rounded up.
4598
561913cb 4599If @var{n} is not specified or is zero, use a machine-dependent default.
efa3896a 4600
38df970e
JQ
4601Enabled at levels @option{-O2}, @option{-O3}.
4602
efa3896a
GK
4603@item -falign-labels
4604@itemx -falign-labels=@var{n}
cd3bb277 4605@opindex falign-labels
efa3896a 4606Align all branch targets to a power-of-two boundary, skipping up to
630d3d5a 4607@var{n} bytes like @option{-falign-functions}. This option can easily
efa3896a
GK
4608make code slower, because it must insert dummy operations for when the
4609branch target is reached in the usual flow of the code.
4610
561913cb
AP
4611@option{-fno-align-labels} and @option{-falign-labels=1} are
4612equivalent and mean that labels will not be aligned.
4613
630d3d5a 4614If @option{-falign-loops} or @option{-falign-jumps} are applicable and
efa3896a
GK
4615are greater than this value, then their values are used instead.
4616
561913cb
AP
4617If @var{n} is not specified or is zero, use a machine-dependent default
4618which is very likely to be @samp{1}, meaning no alignment.
efa3896a 4619
38df970e
JQ
4620Enabled at levels @option{-O2}, @option{-O3}.
4621
efa3896a
GK
4622@item -falign-loops
4623@itemx -falign-loops=@var{n}
cd3bb277 4624@opindex falign-loops
efa3896a 4625Align loops to a power-of-two boundary, skipping up to @var{n} bytes
630d3d5a 4626like @option{-falign-functions}. The hope is that the loop will be
efa3896a
GK
4627executed many times, which will make up for any execution of the dummy
4628operations.
4629
561913cb
AP
4630@option{-fno-align-loops} and @option{-falign-loops=1} are
4631equivalent and mean that loops will not be aligned.
4632
4633If @var{n} is not specified or is zero, use a machine-dependent default.
efa3896a 4634
38df970e
JQ
4635Enabled at levels @option{-O2}, @option{-O3}.
4636
efa3896a
GK
4637@item -falign-jumps
4638@itemx -falign-jumps=@var{n}
cd3bb277 4639@opindex falign-jumps
efa3896a
GK
4640Align branch targets to a power-of-two boundary, for branch targets
4641where the targets can only be reached by jumping, skipping up to @var{n}
630d3d5a 4642bytes like @option{-falign-functions}. In this case, no dummy operations
efa3896a
GK
4643need be executed.
4644
561913cb
AP
4645@option{-fno-align-jumps} and @option{-falign-jumps=1} are
4646equivalent and mean that loops will not be aligned.
4647
4648If @var{n} is not specified or is zero, use a machine-dependent default.
efa3896a 4649
38df970e
JQ
4650Enabled at levels @option{-O2}, @option{-O3}.
4651
7797ff53
PB
4652@item -funit-at-a-time
4653@opindex funit-at-a-time
4654Parse the whole compilation unit before starting to produce code.
4655This allows some extra optimizations to take place but consumes
4656more memory (in general). There are some compatibility issues
4657with @emph{unit-at-at-time} mode:
4658@itemize @bullet
4659@item
4660enabling @emph{unit-at-a-time} mode may change the order
4661in which functions, variables, and top-level @code{asm} statements
4662are emitted, and will likely break code relying on some particular
4663ordering. The majority of such top-level @code{asm} statements,
4664though, can be replaced by @code{section} attributes.
4665
4666@item
4667@emph{unit-at-a-time} mode removes unreferenced static variables
4668and functions are removed. This may result in undefined references
4669when an @code{asm} statement refers directly to variables or functions
4670that are otherwise unused. In that case either the variable/function
4671shall be listed as an operand of the @code{asm} statement operand or,
4672in the case of top-level @code{asm} statements the attribute @code{used}
4673shall be used on the declaration.
4674
4675@item
4676Static functions now can use non-standard passing conventions that
4677may break @code{asm} statements calling functions directly. Again,
4678attribute @code{used} will prevent this behavior.
4679@end itemize
4680
4681As a temporary workaround, @option{-fno-unit-at-a-time} can be used,
f26c1794 4682but this scheme may not be supported by future releases of GCC.
7797ff53
PB
4683
4684Enabled at levels @option{-O2}, @option{-O3}.
4685
7260e9a0
JH
4686@item -fweb
4687@opindex fweb
4688Constructs webs as commonly used for register allocation purposes and assign
962e6e00 4689each web individual pseudo register. This allows the register allocation pass
7260e9a0
JH
4690to operate on pseudos directly, but also strengthens several other optimization
4691passes, such as CSE, loop optimizer and trivial dead code remover. It can,
4692however, make debugging impossible, since variables will no longer stay in a
4693``home register''.
4694
38d396e5
PB
4695Enabled at levels @option{-O2}, @option{-O3}, @option{-Os},
4696on targets where the default format for debugging information supports
4697variable tracking.
d4463dfc
JQ
4698
4699@item -fno-cprop-registers
4700@opindex fno-cprop-registers
4701After register allocation and post-register allocation instruction splitting,
4702we perform a copy-propagation pass to try to reduce scheduling dependencies
4703and occasionally eliminate the copy.
4704
4705Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4706
a8a5f53a
JH
4707@item -fprofile-generate
4708@opindex fprofile-generate
a8a5f53a 4709
33adcb6c
MM
4710Enable options usually used for instrumenting application to produce
4711profile useful for later recompilation with profile feedback based
4712optimization. You must use @code{-fprofile-generate} both when
4713compiling and when linking your program.
4714
4715The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
a8a5f53a
JH
4716
4717@item -fprofile-use
4718@opindex fprofile-use
4719Enable profile feedback directed optimizations, and optimizations
4720generally profitable only with profile feedback available.
4721
4722The following options are enabled: @code{-fbranch-probabilities},
4723@code{-fvpt}, @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}.
4724
d4463dfc
JQ
4725@end table
4726
4727The following options control compiler behavior regarding floating
4728point arithmetic. These options trade off between speed and
4729correctness. All must be specifically enabled.
4730
4731@table @gcctabopt
4732@item -ffloat-store
4733@opindex ffloat-store
4734Do not store floating point variables in registers, and inhibit other
4735options that might change whether a floating point value is taken from a
4736register or memory.
4737
4738@cindex floating point precision
4739This option prevents undesirable excess precision on machines such as
4740the 68000 where the floating registers (of the 68881) keep more
4741precision than a @code{double} is supposed to have. Similarly for the
4742x86 architecture. For most programs, the excess precision does only
4743good, but a few programs rely on the precise definition of IEEE floating
4744point. Use @option{-ffloat-store} for such programs, after modifying
4745them to store all pertinent intermediate computations into variables.
4746
4747@item -ffast-math
4748@opindex ffast-math
4749Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @*
039c3d42
RS
4750@option{-fno-trapping-math}, @option{-ffinite-math-only},
4751@option{-fno-rounding-math} and @option{-fno-signaling-nans}.
d4463dfc
JQ
4752
4753This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
4754
4755This option should never be turned on by any @option{-O} option since
4756it can result in incorrect output for programs which depend on
4757an exact implementation of IEEE or ISO rules/specifications for
4758math functions.
4759
4760@item -fno-math-errno
4761@opindex fno-math-errno
4762Do not set ERRNO after calling math functions that are executed
4763with a single instruction, e.g., sqrt. A program that relies on
4764IEEE exceptions for math error handling may want to use this flag
4765for speed while maintaining IEEE arithmetic compatibility.
4766
4767This option should never be turned on by any @option{-O} option since
4768it can result in incorrect output for programs which depend on
4769an exact implementation of IEEE or ISO rules/specifications for
4770math functions.
4771
4772The default is @option{-fmath-errno}.
4773
4774@item -funsafe-math-optimizations
4775@opindex funsafe-math-optimizations
4776Allow optimizations for floating-point arithmetic that (a) assume
4777that arguments and results are valid and (b) may violate IEEE or
4778ANSI standards. When used at link-time, it may include libraries
4779or startup files that change the default FPU control word or other
4780similar optimizations.
4781
4782This option should never be turned on by any @option{-O} option since
4783it can result in incorrect output for programs which depend on
4784an exact implementation of IEEE or ISO rules/specifications for
4785math functions.
4786
4787The default is @option{-fno-unsafe-math-optimizations}.
4788
4789@item -ffinite-math-only
4790@opindex ffinite-math-only
4791Allow optimizations for floating-point arithmetic that assume
4792that arguments and results are not NaNs or +-Infs.
4793
4794This option should never be turned on by any @option{-O} option since
4795it can result in incorrect output for programs which depend on
4796an exact implementation of IEEE or ISO rules/specifications.
4797
4798The default is @option{-fno-finite-math-only}.
4799
4800@item -fno-trapping-math
4801@opindex fno-trapping-math
4802Compile code assuming that floating-point operations cannot generate
4803user-visible traps. These traps include division by zero, overflow,
4804underflow, inexact result and invalid operation. This option implies
4805@option{-fno-signaling-nans}. Setting this option may allow faster
4806code if one relies on ``non-stop'' IEEE arithmetic, for example.
4807
4808This option should never be turned on by any @option{-O} option since
4809it can result in incorrect output for programs which depend on
4810an exact implementation of IEEE or ISO rules/specifications for
4811math functions.
4812
4813The default is @option{-ftrapping-math}.
4814
039c3d42
RS
4815@item -frounding-math
4816@opindex frounding-math
4817Disable transformations and optimizations that assume default floating
4818point rounding behavior. This is round-to-zero for all floating point
4819to integer conversions, and round-to-nearest for all other arithmetic
4820truncations. This option should be specified for programs that change
4821the FP rounding mode dynamically, or that may be executed with a
4822non-default rounding mode. This option disables constant folding of
4823floating point expressions at compile-time (which may be affected by
4824rounding mode) and arithmetic transformations that are unsafe in the
4825presence of sign-dependent rounding modes.
4826
4827The default is @option{-fno-rounding-math}.
4828
4829This option is experimental and does not currently guarantee to
4830disable all GCC optimizations that are affected by rounding mode.
2dd76960 4831Future versions of GCC may provide finer control of this setting
039c3d42
RS
4832using C99's @code{FENV_ACCESS} pragma. This command line option
4833will be used to specify the default state for @code{FENV_ACCESS}.
4834
d4463dfc
JQ
4835@item -fsignaling-nans
4836@opindex fsignaling-nans
4837Compile code assuming that IEEE signaling NaNs may generate user-visible
4838traps during floating-point operations. Setting this option disables
4839optimizations that may change the number of exceptions visible with
4840signaling NaNs. This option implies @option{-ftrapping-math}.
4841
4842This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
4843be defined.
4844
4845The default is @option{-fno-signaling-nans}.
4846
4847This option is experimental and does not currently guarantee to
4848disable all GCC optimizations that affect signaling NaN behavior.
4849
4850@item -fsingle-precision-constant
4851@opindex fsingle-precision-constant
4852Treat floating point constant as single precision constant instead of
4853implicitly converting it to double precision constant.
4854
4855
4856@end table
4857
4858The following options control optimizations that may improve
4859performance, but are not enabled by any @option{-O} options. This
4860section includes experimental options that may produce broken code.
4861
4862@table @gcctabopt
4863@item -fbranch-probabilities
4864@opindex fbranch-probabilities
4865After running a program compiled with @option{-fprofile-arcs}
4866(@pxref{Debugging Options,, Options for Debugging Your Program or
4867@command{gcc}}), you can compile it a second time using
4868@option{-fbranch-probabilities}, to improve optimizations based on
4869the number of times each branch was taken. When the program
4870compiled with @option{-fprofile-arcs} exits it saves arc execution
a4878735 4871counts to a file called @file{@var{sourcename}.gcda} for each source
d4463dfc
JQ
4872file The information in this data file is very dependent on the
4873structure of the generated code, so you must use the same source code
4874and the same optimization options for both compilations.
4875
daf2f129 4876With @option{-fbranch-probabilities}, GCC puts a
d4463dfc
JQ
4877@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
4878These can be used to improve optimization. Currently, they are only
4879used in one place: in @file{reorg.c}, instead of guessing which path a
4880branch is mostly to take, the @samp{REG_BR_PROB} values are used to
4881exactly determine which path is taken more often.
4882
fc5eb4a1
ZD
4883@item -fprofile-values
4884@opindex fprofile-values
4885If combined with @option{-fprofile-arcs}, it adds code so that some
4886data about values of expressions in the program is gathered.
4887
6e885ee3
ZD
4888With @option{-fbranch-probabilities}, it reads back the data gathered
4889from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
4890notes to instructions for their later usage in optimizations.
4891
7797ff53 4892Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
8d3b3fb7 4893
fca9dc00
ZD
4894@item -fvpt
4895@opindex fvpt
4896If combined with @option{-fprofile-arcs}, it instructs the compiler to add
4897a code to gather information about values of expressions.
4898
4899With @option{-fbranch-probabilities}, it reads back the data gathered
4900and actually performs the optimizations based on them.
4901Currently the optimizations include specialization of division operation
4902using the knowledge about the value of the denominator.
4903
7797ff53 4904Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
8d3b3fb7 4905
a7b1dc36
PB
4906@item -frename-registers
4907@opindex frename-registers
4908Attempt to avoid false dependencies in scheduled code by making use
4909of registers left over after register allocation. This optimization
4910will most benefit processors with lots of registers. Depending on the
4911debug information format adopted by the target, however, it can
4912make debugging impossible, since variables will no longer stay in
4913a ``home register''.
4914
4915Not enabled by default at any level because it has known bugs.
4916
d4463dfc
JQ
4917@item -fnew-ra
4918@opindex fnew-ra
4919Use a graph coloring register allocator. Currently this option is meant
4920for testing, so we are interested to hear about miscompilations with
4921@option{-fnew-ra}.
4922
4923@item -ftracer
4924@opindex ftracer
4925Perform tail duplication to enlarge superblock size. This transformation
4926simplifies the control flow of the function allowing other optimizations to do
4927better job.
4928
7797ff53 4929Enabled with @option{-fprofile-use}.
8d3b3fb7 4930
d4463dfc
JQ
4931@item -funroll-loops
4932@opindex funroll-loops
b17d5d7c
ZD
4933Unroll loops whose number of iterations can be determined at compile time or
4934upon entry to the loop. @option{-funroll-loops} implies
4935@option{-frerun-cse-after-loop}. It also turns on complete loop peeling
4936(i.e. complete removal of loops with small constant number of iterations).
4937This option makes code larger, and may or may not make it run faster.
d4463dfc 4938
7797ff53 4939Enabled with @option{-fprofile-use}.
8d3b3fb7 4940
d4463dfc
JQ
4941@item -funroll-all-loops
4942@opindex funroll-all-loops
4943Unroll all loops, even if their number of iterations is uncertain when
4944the loop is entered. This usually makes programs run more slowly.
4945@option{-funroll-all-loops} implies the same options as
b17d5d7c
ZD
4946@option{-funroll-loops}.
4947
4948@item -fpeel-loops
4949@opindex fpeel-loops
4950Peels the loops for that there is enough information that they do not
4951roll much (from profile feedback). It also turns on complete loop peeling
4952(i.e. complete removal of loops with small constant number of iterations).
4953
7797ff53 4954Enabled with @option{-fprofile-use}.
8d3b3fb7 4955
5e962776
ZD
4956@item -fmove-loop-invariants
4957@opindex fmove-loop-invariants
4958Enables the loop invariant motion pass in the new loop optimizer. Enabled
4959at level @option{-O1}
4960
b17d5d7c
ZD
4961@item -funswitch-loops
4962@opindex funswitch-loops
4963Move branches with loop invariant conditions out of the loop, with duplicates
4964of the loop on both branches (modified according to result of the condition).
4965
4966@item -fold-unroll-loops
4967@opindex fold-unroll-loops
4968Unroll loops whose number of iterations can be determined at compile
4969time or upon entry to the loop, using the old loop unroller whose loop
4970recognition is based on notes from frontend. @option{-fold-unroll-loops} implies
4971both @option{-fstrength-reduce} and @option{-frerun-cse-after-loop}. This
4972option makes code larger, and may or may not make it run faster.
4973
4974@item -fold-unroll-all-loops
4975@opindex fold-unroll-all-loops
4976Unroll all loops, even if their number of iterations is uncertain when
4977the loop is entered. This is done using the old loop unroller whose loop
4978recognition is based on notes from frontend. This usually makes programs run more slowly.
4979@option{-fold-unroll-all-loops} implies the same options as
4980@option{-fold-unroll-loops}.
daf2f129 4981
d4463dfc
JQ
4982@item -fprefetch-loop-arrays
4983@opindex fprefetch-loop-arrays
4984If supported by the target machine, generate instructions to prefetch
4985memory to improve the performance of loops that access large arrays.
4986
4987Disabled at level @option{-Os}.
4988
4989@item -ffunction-sections
4990@itemx -fdata-sections
4991@opindex ffunction-sections
4992@opindex fdata-sections
4993Place each function or data item into its own section in the output
4994file if the target supports arbitrary sections. The name of the
4995function or the name of the data item determines the section's name
4996in the output file.
4997
4998Use these options on systems where the linker can perform optimizations
f401d0f5
JDA
4999to improve locality of reference in the instruction space. Most systems
5000using the ELF object format and SPARC processors running Solaris 2 have
5001linkers with such optimizations. AIX may have these optimizations in
5002the future.
d4463dfc
JQ
5003
5004Only use these options when there are significant benefits from doing
5005so. When you specify these options, the assembler and linker will
5006create larger object and executable files and will also be slower.
5007You will not be able to use @code{gprof} on all systems if you
5008specify this option and you may have problems with debugging if
5009you specify both this option and @option{-g}.
5010
fe3ad572
SC
5011@item -fbranch-target-load-optimize
5012@opindex fbranch-target-load-optimize
5013Perform branch target register load optimization before prologue / epilogue
5014threading.
5015The use of target registers can typically be exposed only during reload,
5016thus hoisting loads out of loops and doing inter-block scheduling needs
5017a separate optimization pass.
5018
5019@item -fbranch-target-load-optimize2
5020@opindex fbranch-target-load-optimize2
5021Perform branch target register load optimization after prologue / epilogue
5022threading.
5023
1194fc79
R
5024@item -fbtr-bb-exclusive
5025@opindex fbtr-bb-exclusive
8d3b3fb7 5026When performing branch target register load optimization, don't reuse
1194fc79
R
5027branch target registers in within any basic block.
5028
3af64fd6 5029@item --param @var{name}=@var{value}
cd3bb277 5030@opindex param
3af64fd6
MM
5031In some places, GCC uses various constants to control the amount of
5032optimization that is done. For example, GCC will not inline functions
5033that contain more that a certain number of instructions. You can
5034control some of these constants on the command-line using the
630d3d5a 5035@option{--param} option.
3af64fd6 5036
b00567b0
ILT
5037The names of specific parameters, and the meaning of the values, are
5038tied to the internals of the compiler, and are subject to change
5039without notice in future releases.
5040
4fe9b91c 5041In each case, the @var{value} is an integer. The allowable choices for
3af64fd6
MM
5042@var{name} are given in the following table:
5043
5044@table @gcctabopt
5f24e0dc
RH
5045@item max-crossjump-edges
5046The maximum number of incoming edges to consider for crossjumping.
d203738b 5047The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
5f24e0dc
RH
5048the number of edges incoming to each block. Increasing values mean
5049more aggressive optimization, making the compile time increase with
5050probably small improvement in executable size.
5051
1c4c47db
JO
5052@item max-delay-slot-insn-search
5053The maximum number of instructions to consider when looking for an
5054instruction to fill a delay slot. If more than this arbitrary number of
5055instructions is searched, the time savings from filling the delay slot
5056will be minimal so stop searching. Increasing values mean more
5057aggressive optimization, making the compile time increase with probably
5058small improvement in executable run time.
5059
5060@item max-delay-slot-live-search
5061When trying to fill delay slots, the maximum number of instructions to
5062consider when searching for a block with valid live register
5063information. Increasing this arbitrarily chosen value means more
5064aggressive optimization, increasing the compile time. This parameter
5065should be removed when the delay slot code is rewritten to maintain the
5066control-flow graph.
33d3b05b
MM
5067
5068@item max-gcse-memory
5069The approximate maximum amount of memory that will be allocated in
5070order to perform the global common subexpression elimination
5071optimization. If more memory than specified is required, the
5072optimization will not be done.
3af64fd6 5073
740f35a0 5074@item max-gcse-passes
8d3b3fb7 5075The maximum number of passes of GCSE to run. The default is 1.
740f35a0 5076
4a121cc3 5077@item max-pending-list-length
0c688a7d 5078The maximum number of pending dependencies scheduling will allow
4a121cc3
AM
5079before flushing the current state and starting over. Large functions
5080with few branches or calls can create excessively large lists which
5081needlessly consume memory and resources.
5082
bc522472
KG
5083@item max-inline-insns-single
5084Several parameters control the tree inliner used in gcc.
2dd76960 5085This number sets the maximum number of instructions (counted in GCC's
daf2f129 5086internal representation) in a single function that the tree inliner
bc522472
KG
5087will consider for inlining. This only affects functions declared
5088inline and methods implemented in a class declaration (C++).
1f95c733 5089The default value is 500.
bc522472
KG
5090
5091@item max-inline-insns-auto
5092When you use @option{-finline-functions} (included in @option{-O3}),
5093a lot of functions that would otherwise not be considered for inlining
5094by the compiler will be investigated. To those functions, a different
5095(more restrictive) limit compared to functions declared inline can
5096be applied.
3b75d796 5097The default value is 120.
bc522472 5098
b58b1157
JH
5099@item large-function-insns
5100The limit specifying really large functions. For functions greater than this
5101limit inlining is constrained by @option{--param large-function-growth}.
a2b172fb 5102This parameter is useful primarily to avoid extreme compilation time caused by non-linear
b58b1157
JH
5103algorithms used by the backend.
5104This parameter is ignored when @option{-funit-at-a-time} is not used.
3b75d796 5105The default value is 3000.
b58b1157
JH
5106
5107@item large-function-growth
e53e0c56 5108Specifies maximal growth of large function caused by inlining in percents.
b58b1157
JH
5109This parameter is ignored when @option{-funit-at-a-time} is not used.
5110The default value is 200.
5111
5112@item inline-unit-growth
5113Specifies maximal overall growth of the compilation unit caused by inlining.
5114This parameter is ignored when @option{-funit-at-a-time} is not used.
5115The default value is 150.
5116
6de9cd9a
DN
5117@item max-inline-insns-recursive
5118@itemx max-inline-insns-recursive-auto
5119Specifies maximum number of instructions out-of-line copy of self recursive inline
5120function can grow into by performing recursive inlining.
5121
5122For functions declared inline @option{--param max-inline-insns-recursive} is
5123taken into acount. For function not declared inline, recursive inlining
5124happens only when @option{-finline-functions} (included in @option{-O3}) is
5125enabled and @option{--param max-inline-insns-recursive-auto} is used. The
5126default value is 500.
5127
5128@item max-inline-recursive-depth
5129@itemx max-inline-recursive-depth-auto
5130Specifies maximum recursion depth used by the recursive inlining.
5131
5132For functions declared inline @option{--param max-inline-recursive-depth} is
5133taken into acount. For function not declared inline, recursive inlining
5134happens only when @option{-finline-functions} (included in @option{-O3}) is
5135enabled and @option{--param max-inline-recursive-depth-auto} is used. The
5136default value is 500.
5137
bc522472
KG
5138@item max-inline-insns-rtl
5139For languages that use the RTL inliner (this happens at a later stage
daf2f129 5140than tree inlining), you can set the maximum allowable size (counted
bc522472
KG
5141in RTL instructions) for the RTL inliner with this parameter.
5142The default value is 600.
5143
03e9dbc9
MM
5144@item max-unrolled-insns
5145The maximum number of instructions that a loop should have if that loop
5146is unrolled, and if the loop is unrolled, it determines how many times
5147the loop code is unrolled.
5148
b17d5d7c
ZD
5149@item max-average-unrolled-insns
5150The maximum number of instructions biased by probabilities of their execution
5151that a loop should have if that loop is unrolled, and if the loop is unrolled,
5152it determines how many times the loop code is unrolled.
5153
5154@item max-unroll-times
5155The maximum number of unrollings of a single loop.
5156
5157@item max-peeled-insns
5158The maximum number of instructions that a loop should have if that loop
5159is peeled, and if the loop is peeled, it determines how many times
5160the loop code is peeled.
5161
5162@item max-peel-times
5163The maximum number of peelings of a single loop.
5164
5165@item max-completely-peeled-insns
5166The maximum number of insns of a completely peeled loop.
5167
5168@item max-completely-peel-times
5169The maximum number of iterations of a loop to be suitable for complete peeling.
5170
01a132bb
ZD
5171@item max-unswitch-insns
5172The maximum number of insns of an unswitched loop.
5173
5174@item max-unswitch-level
5175The maximum number of branches unswitched in a single loop.
5176
194734e9
JH
5177@item hot-bb-count-fraction
5178Select fraction of the maximal count of repetitions of basic block in program
5179given basic block needs to have to be considered hot.
5180
5181@item hot-bb-frequency-fraction
5182Select fraction of the maximal frequency of executions of basic block in
5183function given basic block needs to have to be considered hot
5c856b23
JH
5184
5185@item tracer-dynamic-coverage
5186@itemx tracer-dynamic-coverage-feedback
5187
3364c33b
JQ
5188This value is used to limit superblock formation once the given percentage of
5189executed instructions is covered. This limits unnecessary code size
5190expansion.
5c856b23
JH
5191
5192The @option{tracer-dynamic-coverage-feedback} is used only when profile
5193feedback is available. The real profiles (as opposed to statically estimated
5194ones) are much less balanced allowing the threshold to be larger value.
5195
5196@item tracer-max-code-growth
5197Stop tail duplication once code growth has reached given percentage. This is
3364c33b 5198rather hokey argument, as most of the duplicates will be eliminated later in
5c856b23
JH
5199cross jumping, so it may be set to much higher values than is the desired code
5200growth.
5201
5202@item tracer-min-branch-ratio
5203
5204Stop reverse growth when the reverse probability of best edge is less than this
5205threshold (in percent).
5206
5207@item tracer-min-branch-ratio
5208@itemx tracer-min-branch-ratio-feedback
5209
5210Stop forward growth if the best edge do have probability lower than this
5211threshold.
5212
3364c33b 5213Similarly to @option{tracer-dynamic-coverage} two values are present, one for
5c856b23
JH
5214compilation for profile feedback and one for compilation without. The value
5215for compilation with profile feedback needs to be more conservative (higher) in
5216order to make tracer effective.
5217
c48ec590
ZD
5218@item max-cse-path-length
5219
8d3b3fb7 5220Maximum number of basic blocks on path that cse considers. The default is 10.
c48ec590 5221
6de9cd9a
DN
5222@item global-var-threshold
5223
5224Counts the number of function calls (N) and the number of
5225call-clobbered variables (V). If NxV is larger than this limit, a
5226single artificial variable will be created to represent all the
5227call-clobbered variables at function call sites. This artificial
5228variable will then be made to alias every call-clobbered variable.
5229(done as int * size_t on the host machine; beware overflow).
5230
5231@item max-aliased-vops
5232
5233Maxiumum number of virtual operands allowed to represent aliases
5234before triggering the alias grouping heuristic. Alias grouping
5235reduces compile times and memory consumption needed for aliasing at
5236the expense of precision loss in alias information.
5237
3788cc17
ZW
5238@item ggc-min-expand
5239
5240GCC uses a garbage collector to manage its own memory allocation. This
5241parameter specifies the minimum percentage by which the garbage
5242collector's heap should be allowed to expand between collections.
5243Tuning this may improve compilation speed; it has no effect on code
5244generation.
5245
9ac121af 5246The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
16226f1e
KG
5247RAM >= 1GB. If @code{getrlimit} is available, the notion of "RAM" is
5248the smallest of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS. If
5249GCC is not able to calculate RAM on a particular platform, the lower
5250bound of 30% is used. Setting this parameter and
737c38d1
GK
5251@option{ggc-min-heapsize} to zero causes a full collection to occur at
5252every opportunity. This is extremely slow, but can be useful for
5253debugging.
3788cc17
ZW
5254
5255@item ggc-min-heapsize
5256
5257Minimum size of the garbage collector's heap before it begins bothering
5258to collect garbage. The first collection occurs after the heap expands
5259by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}. Again,
5260tuning this may improve compilation speed, and has no effect on code
5261generation.
5262
9ac121af 5263The default is RAM/8, with a lower bound of 4096 (four megabytes) and an
16226f1e
KG
5264upper bound of 131072 (128 megabytes). If @code{getrlimit} is
5265available, the notion of "RAM" is the smallest of actual RAM,
5266RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS. If GCC is not able to calculate
9ac121af
KG
5267RAM on a particular platform, the lower bound is used. Setting this
5268parameter very large effectively disables garbage collection. Setting
5269this parameter and @option{ggc-min-expand} to zero causes a full
5270collection to occur at every opportunity.
3788cc17 5271
0bcf8261
JH
5272@item max-reload-search-insns
5273The maximum number of instruction reload should look backward for equivalent
5274register. Increasing values mean more aggressive optimization, making the
5275compile time increase with probably slightly better performance. The default
5276value is 100.
5277
c65ecebc
JH
5278@item max-cselib-memory-location
5279The maximum number of memory locations cselib should take into acount.
5280Increasing values mean more aggressive optimization, making the compile time
5281increase with probably slightly better performance. The default value is 500.
5282
26f74aa3
JH
5283@item reorder-blocks-duplicate
5284@itemx reorder-blocks-duplicate-feedback
5285
65d2d764 5286Used by basic block reordering pass to decide whether to use unconditional
b222f49a 5287branch or duplicate the code on its destination. Code is duplicated when its
26f74aa3 5288estimated size is smaller than this value multiplied by the estimated size of
65d2d764 5289unconditional jump in the hot spots of the program.
26f74aa3
JH
5290
5291The @option{reorder-block-duplicate-feedback} is used only when profile
5292feedback is available and may be set to higher values than
5293@option{reorder-block-duplicate} since information about the hot spots is more
5294accurate.
f72c6b56
DE
5295
5296@item max-sched-region-blocks
5297The maximum number of blocks in a region to be considered for
5298interblock scheduling. The default value is 10.
5299
fbce7685 5300@item max-sched-region-insns
f72c6b56
DE
5301The maximum number of insns in a region to be considered for
5302interblock scheduling. The default value is 100.
1c4c47db 5303@end table
74291a4b
MM
5304@end table
5305
5306@node Preprocessor Options
5307@section Options Controlling the Preprocessor
5308@cindex preprocessor options
5309@cindex options, preprocessor
5310
5311These options control the C preprocessor, which is run on each C source
5312file before actual compilation.
5313
630d3d5a
JM
5314If you use the @option{-E} option, nothing is done except preprocessing.
5315Some of these options make sense only together with @option{-E} because
74291a4b
MM
5316they cause the preprocessor output to be unsuitable for actual
5317compilation.
5318
4977bab6 5319@table @gcctabopt
cd3bb277 5320@opindex Wp
40adaa27
NB
5321You can use @option{-Wp,@var{option}} to bypass the compiler driver
5322and pass @var{option} directly through to the preprocessor. If
5323@var{option} contains commas, it is split into multiple options at the
5324commas. However, many options are modified, translated or interpreted
5325by the compiler driver before being passed to the preprocessor, and
5326@option{-Wp} forcibly bypasses this phase. The preprocessor's direct
5327interface is undocumented and subject to change, so whenever possible
5328you should avoid using @option{-Wp} and let the driver handle the
5329options instead.
5330
4977bab6
ZW
5331@item -Xpreprocessor @var{option}
5332@opindex preprocessor
5333Pass @var{option} as an option to the preprocessor. You can use this to
5334supply system-specific preprocessor options which GCC does not know how to
5335recognize.
5336
5337If you want to pass an option that takes an argument, you must use
5338@option{-Xpreprocessor} twice, once for the option and once for the argument.
5339@end table
5340
40adaa27 5341@include cppopts.texi
74291a4b
MM
5342
5343@node Assembler Options
5344@section Passing Options to the Assembler
5345
5346@c prevent bad page break with this line
5347You can pass options to the assembler.
5348
2642624b 5349@table @gcctabopt
aee96fe9 5350@item -Wa,@var{option}
cd3bb277 5351@opindex Wa
74291a4b
MM
5352Pass @var{option} as an option to the assembler. If @var{option}
5353contains commas, it is split into multiple options at the commas.
4977bab6
ZW
5354
5355@item -Xassembler @var{option}
5356@opindex Xassembler
5357Pass @var{option} as an option to the assembler. You can use this to
5358supply system-specific assembler options which GCC does not know how to
5359recognize.
5360
5361If you want to pass an option that takes an argument, you must use
5362@option{-Xassembler} twice, once for the option and once for the argument.
5363
74291a4b
MM
5364@end table
5365
5366@node Link Options
5367@section Options for Linking
5368@cindex link options
5369@cindex options, linking
5370
5371These options come into play when the compiler links object files into
5372an executable output file. They are meaningless if the compiler is
5373not doing a link step.
5374
2642624b 5375@table @gcctabopt
74291a4b
MM
5376@cindex file names
5377@item @var{object-file-name}
5378A file name that does not end in a special recognized suffix is
5379considered to name an object file or library. (Object files are
5380distinguished from libraries by the linker according to the file
5381contents.) If linking is done, these object files are used as input
5382to the linker.
5383
5384@item -c
5385@itemx -S
5386@itemx -E
cd3bb277
JM
5387@opindex c
5388@opindex S
5389@opindex E
74291a4b
MM
5390If any of these options is used, then the linker is not run, and
5391object file names should not be used as arguments. @xref{Overall
5392Options}.
5393
5394@cindex Libraries
5395@item -l@var{library}
4275c4c4 5396@itemx -l @var{library}
cd3bb277 5397@opindex l
4275c4c4
JS
5398Search the library named @var{library} when linking. (The second
5399alternative with the library as a separate argument is only for
5400POSIX compliance and is not recommended.)
74291a4b
MM
5401
5402It makes a difference where in the command you write this option; the
4275c4c4 5403linker searches and processes libraries and object files in the order they
74291a4b
MM
5404are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
5405after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers
5406to functions in @samp{z}, those functions may not be loaded.
5407
5408The linker searches a standard list of directories for the library,
5409which is actually a file named @file{lib@var{library}.a}. The linker
5410then uses this file as if it had been specified precisely by name.
5411
5412The directories searched include several standard system directories
630d3d5a 5413plus any that you specify with @option{-L}.
74291a4b
MM
5414
5415Normally the files found this way are library files---archive files
5416whose members are object files. The linker handles an archive file by
5417scanning through it for members which define symbols that have so far
5418been referenced but not defined. But if the file that is found is an
5419ordinary object file, it is linked in the usual fashion. The only
630d3d5a
JM
5420difference between using an @option{-l} option and specifying a file name
5421is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
74291a4b
MM
5422and searches several directories.
5423
5424@item -lobjc
cd3bb277 5425@opindex lobjc
630d3d5a 5426You need this special case of the @option{-l} option in order to
2147b154 5427link an Objective-C program.
74291a4b
MM
5428
5429@item -nostartfiles
cd3bb277 5430@opindex nostartfiles
74291a4b 5431Do not use the standard system startup files when linking.
bedc7537
NC
5432The standard system libraries are used normally, unless @option{-nostdlib}
5433or @option{-nodefaultlibs} is used.
74291a4b
MM
5434
5435@item -nodefaultlibs
cd3bb277 5436@opindex nodefaultlibs
74291a4b
MM
5437Do not use the standard system libraries when linking.
5438Only the libraries you specify will be passed to the linker.
bedc7537 5439The standard startup files are used normally, unless @option{-nostartfiles}
8f99553f
JM
5440is used. The compiler may generate calls to @code{memcmp},
5441@code{memset}, @code{memcpy} and @code{memmove}.
5442These entries are usually resolved by entries in
4754172c
CM
5443libc. These entry points should be supplied through some other
5444mechanism when this option is specified.
74291a4b
MM
5445
5446@item -nostdlib
cd3bb277 5447@opindex nostdlib
74291a4b
MM
5448Do not use the standard system startup files or libraries when linking.
5449No startup files and only the libraries you specify will be passed to
8f99553f
JM
5450the linker. The compiler may generate calls to @code{memcmp}, @code{memset},
5451@code{memcpy} and @code{memmove}.
5452These entries are usually resolved by entries in
4754172c
CM
5453libc. These entry points should be supplied through some other
5454mechanism when this option is specified.
74291a4b 5455
630d3d5a
JM
5456@cindex @option{-lgcc}, use with @option{-nostdlib}
5457@cindex @option{-nostdlib} and unresolved references
5458@cindex unresolved references and @option{-nostdlib}
5459@cindex @option{-lgcc}, use with @option{-nodefaultlibs}
5460@cindex @option{-nodefaultlibs} and unresolved references
5461@cindex unresolved references and @option{-nodefaultlibs}
5462One of the standard libraries bypassed by @option{-nostdlib} and
5463@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
0c2d1a2a 5464that GCC uses to overcome shortcomings of particular machines, or special
74291a4b 5465needs for some languages.
b11cc610
JM
5466(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
5467Collection (GCC) Internals},
74291a4b 5468for more discussion of @file{libgcc.a}.)
74291a4b 5469In most cases, you need @file{libgcc.a} even when you want to avoid
630d3d5a
JM
5470other standard libraries. In other words, when you specify @option{-nostdlib}
5471or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
0c2d1a2a 5472This ensures that you have no unresolved references to internal GCC
74291a4b 5473library subroutines. (For example, @samp{__main}, used to ensure C++
b11cc610
JM
5474constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
5475GNU Compiler Collection (GCC) Internals}.)
74291a4b 5476
24a4dd31
JJ
5477@item -pie
5478@opindex pie
5479Produce a position independent executable on targets which support it.
5480For predictable results, you must also specify the same set of options
5481that were used to generate code (@option{-fpie}, @option{-fPIE},
5482or model suboptions) when you specify this option.
5483
74291a4b 5484@item -s
cd3bb277 5485@opindex s
74291a4b
MM
5486Remove all symbol table and relocation information from the executable.
5487
5488@item -static
cd3bb277 5489@opindex static
74291a4b
MM
5490On systems that support dynamic linking, this prevents linking with the shared
5491libraries. On other systems, this option has no effect.
5492
5493@item -shared
cd3bb277 5494@opindex shared
74291a4b 5495Produce a shared object which can then be linked with other objects to
1d3b0e2c 5496form an executable. Not all systems support this option. For predictable
02f52e19 5497results, you must also specify the same set of options that were used to
630d3d5a 5498generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
2642624b 5499when you specify this option.@footnote{On some systems, @samp{gcc -shared}
767094dd 5500needs to build supplementary stub code for constructors to work. On
2642624b 5501multi-libbed systems, @samp{gcc -shared} must select the correct support
1d3b0e2c 5502libraries to link against. Failing to supply the correct flags may lead
767094dd 5503to subtle defects. Supplying them in cases where they are not necessary
1d3b0e2c 5504is innocuous.}
74291a4b 5505
9db0819e
RH
5506@item -shared-libgcc
5507@itemx -static-libgcc
cd3bb277
JM
5508@opindex shared-libgcc
5509@opindex static-libgcc
9db0819e
RH
5510On systems that provide @file{libgcc} as a shared library, these options
5511force the use of either the shared or static version respectively.
5512If no shared version of @file{libgcc} was built when the compiler was
5513configured, these options have no effect.
5514
5515There are several situations in which an application should use the
5516shared @file{libgcc} instead of the static version. The most common
5517of these is when the application wishes to throw and catch exceptions
5518across different shared libraries. In that case, each of the libraries
5519as well as the application itself should use the shared @file{libgcc}.
5520
5c181756
AO
5521Therefore, the G++ and GCJ drivers automatically add
5522@option{-shared-libgcc} whenever you build a shared library or a main
5523executable, because C++ and Java programs typically use exceptions, so
5524this is the right thing to do.
5525
5526If, instead, you use the GCC driver to create shared libraries, you may
5527find that they will not always be linked with the shared @file{libgcc}.
d3144423
EB
5528If GCC finds, at its configuration time, that you have a non-GNU linker
5529or a GNU linker that does not support option @option{--eh-frame-hdr},
5530it will link the shared version of @file{libgcc} into shared libraries
5531by default. Otherwise, it will take advantage of the linker and optimize
5532away the linking with the shared version of @file{libgcc}, linking with
5533the static version of libgcc by default. This allows exceptions to
5534propagate through such shared libraries, without incurring relocation
5535costs at library load time.
5c181756
AO
5536
5537However, if a library or main executable is supposed to throw or catch
5538exceptions, you must link it using the G++ or GCJ driver, as appropriate
5539for the languages used in the program, or using the option
5540@option{-shared-libgcc}, such that it is linked with the shared
049f6ec9 5541@file{libgcc}.
9db0819e 5542
74291a4b 5543@item -symbolic
cd3bb277 5544@opindex symbolic
74291a4b
MM
5545Bind references to global symbols when building a shared object. Warn
5546about any unresolved references (unless overridden by the link editor
5547option @samp{-Xlinker -z -Xlinker defs}). Only a few systems support
5548this option.
5549
5550@item -Xlinker @var{option}
cd3bb277 5551@opindex Xlinker
74291a4b 5552Pass @var{option} as an option to the linker. You can use this to
0c2d1a2a 5553supply system-specific linker options which GCC does not know how to
74291a4b
MM
5554recognize.
5555
5556If you want to pass an option that takes an argument, you must use
630d3d5a
JM
5557@option{-Xlinker} twice, once for the option and once for the argument.
5558For example, to pass @option{-assert definitions}, you must write
74291a4b 5559@samp{-Xlinker -assert -Xlinker definitions}. It does not work to write
630d3d5a 5560@option{-Xlinker "-assert definitions"}, because this passes the entire
74291a4b
MM
5561string as a single argument, which is not what the linker expects.
5562
aee96fe9 5563@item -Wl,@var{option}
cd3bb277 5564@opindex Wl
74291a4b
MM
5565Pass @var{option} as an option to the linker. If @var{option} contains
5566commas, it is split into multiple options at the commas.
5567
5568@item -u @var{symbol}
cd3bb277 5569@opindex u
74291a4b 5570Pretend the symbol @var{symbol} is undefined, to force linking of
630d3d5a 5571library modules to define it. You can use @option{-u} multiple times with
74291a4b
MM
5572different symbols to force loading of additional library modules.
5573@end table
5574
5575@node Directory Options
5576@section Options for Directory Search
5577@cindex directory options
5578@cindex options, directory search
5579@cindex search path
5580
5581These options specify directories to search for header files, for
5582libraries and for parts of the compiler:
5583
2642624b 5584@table @gcctabopt
74291a4b 5585@item -I@var{dir}
cd3bb277 5586@opindex I
861bb6c1
JL
5587Add the directory @var{dir} to the head of the list of directories to be
5588searched for header files. This can be used to override a system header
5589file, substituting your own version, since these directories are
d0a5eb32
RK
5590searched before the system header file directories. However, you should
5591not use this option to add directories that contain vendor-supplied
767094dd 5592system header files (use @option{-isystem} for that). If you use more than
630d3d5a 5593one @option{-I} option, the directories are scanned in left-to-right
74291a4b
MM
5594order; the standard system directories come after.
5595
dbead49c 5596If a standard system include directory, or a directory specified with
48209ce5
JDA
5597@option{-isystem}, is also specified with @option{-I}, the @option{-I}
5598option will be ignored. The directory will still be searched but as a
5599system directory at its normal position in the system include chain.
5600This is to ensure that GCC's procedure to fix buggy system headers and
3364c33b 5601the ordering for the include_next directive are not inadvertently changed.
48209ce5
JDA
5602If you really need to change the search order for system directories,
5603use the @option{-nostdinc} and/or @option{-isystem} options.
dbead49c 5604
4bed3787
MS
5605@item -iquote@var{dir}
5606@opindex iquote
5607Add the directory @var{dir} to the head of the list of directories to
5608be searched for header files only for the case of @samp{#include
5609"@var{file}"}; they are not searched for @samp{#include <@var{file}>},
5610otherwise just like @option{-I}.
74291a4b
MM
5611
5612@item -L@var{dir}
cd3bb277 5613@opindex L
74291a4b 5614Add directory @var{dir} to the list of directories to be searched
630d3d5a 5615for @option{-l}.
74291a4b
MM
5616
5617@item -B@var{prefix}
cd3bb277 5618@opindex B
74291a4b
MM
5619This option specifies where to find the executables, libraries,
5620include files, and data files of the compiler itself.
5621
5622The compiler driver program runs one or more of the subprograms
5623@file{cpp}, @file{cc1}, @file{as} and @file{ld}. It tries
5624@var{prefix} as a prefix for each program it tries to run, both with and
5625without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
5626
5627For each subprogram to be run, the compiler driver first tries the
630d3d5a 5628@option{-B} prefix, if any. If that name is not found, or if @option{-B}
74291a4b 5629was not specified, the driver tries two standard prefixes, which are
8e5f33ff 5630@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}. If neither of
74291a4b
MM
5631those results in a file name that is found, the unmodified program
5632name is searched for using the directories specified in your
bedc7537 5633@env{PATH} environment variable.
74291a4b 5634
07804c3b
NC
5635The compiler will check to see if the path provided by the @option{-B}
5636refers to a directory, and if necessary it will add a directory
5637separator character at the end of the path.
5638
630d3d5a 5639@option{-B} prefixes that effectively specify directory names also apply
74291a4b 5640to libraries in the linker, because the compiler translates these
630d3d5a 5641options into @option{-L} options for the linker. They also apply to
74291a4b 5642includes files in the preprocessor, because the compiler translates these
630d3d5a 5643options into @option{-isystem} options for the preprocessor. In this case,
74291a4b
MM
5644the compiler appends @samp{include} to the prefix.
5645
5646The run-time support file @file{libgcc.a} can also be searched for using
630d3d5a 5647the @option{-B} prefix, if needed. If it is not found there, the two
74291a4b
MM
5648standard prefixes above are tried, and that is all. The file is left
5649out of the link if it is not found by those means.
5650
630d3d5a 5651Another way to specify a prefix much like the @option{-B} prefix is to use
bedc7537 5652the environment variable @env{GCC_EXEC_PREFIX}. @xref{Environment
74291a4b 5653Variables}.
861bb6c1 5654
07804c3b 5655As a special kludge, if the path provided by @option{-B} is
bf4eebe0
NC
5656@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
56579, then it will be replaced by @file{[dir/]include}. This is to help
7dac2f89 5658with boot-strapping the compiler.
07804c3b 5659
861bb6c1 5660@item -specs=@var{file}
cd3bb277 5661@opindex specs
861bb6c1
JL
5662Process @var{file} after the compiler reads in the standard @file{specs}
5663file, in order to override the defaults that the @file{gcc} driver
5664program uses when determining what switches to pass to @file{cc1},
5665@file{cc1plus}, @file{as}, @file{ld}, etc. More than one
630d3d5a 5666@option{-specs=@var{file}} can be specified on the command line, and they
861bb6c1 5667are processed in order, from left to right.
4bed3787
MS
5668
5669@item -I-
5670@opindex I-
5671This option has been deprecated. Please use @option{-iquote} instead for
5672@option{-I} directories before the @option{-I-} and remove the @option{-I-}.
5673Any directories you specify with @option{-I} options before the @option{-I-}
5674option are searched only for the case of @samp{#include "@var{file}"};
5675they are not searched for @samp{#include <@var{file}>}.
5676
5677If additional directories are specified with @option{-I} options after
5678the @option{-I-}, these directories are searched for all @samp{#include}
5679directives. (Ordinarily @emph{all} @option{-I} directories are used
5680this way.)
5681
5682In addition, the @option{-I-} option inhibits the use of the current
5683directory (where the current input file came from) as the first search
5684directory for @samp{#include "@var{file}"}. There is no way to
5685override this effect of @option{-I-}. With @option{-I.} you can specify
5686searching the directory which was current when the compiler was
5687invoked. That is not exactly the same as what the preprocessor does
5688by default, but it is often satisfactory.
5689
5690@option{-I-} does not inhibit the use of the standard system directories
5691for header files. Thus, @option{-I-} and @option{-nostdinc} are
5692independent.
74291a4b
MM
5693@end table
5694
ee457005
JM
5695@c man end
5696
a743d340
NC
5697@node Spec Files
5698@section Specifying subprocesses and the switches to pass to them
5699@cindex Spec Files
d2d42a91 5700
bedc7537 5701@command{gcc} is a driver program. It performs its job by invoking a
a743d340
NC
5702sequence of other programs to do the work of compiling, assembling and
5703linking. GCC interprets its command-line parameters and uses these to
5704deduce which programs it should invoke, and which command-line options
c21cd8b1 5705it ought to place on their command lines. This behavior is controlled
a743d340
NC
5706by @dfn{spec strings}. In most cases there is one spec string for each
5707program that GCC can invoke, but a few programs have multiple spec
c21cd8b1 5708strings to control their behavior. The spec strings built into GCC can
630d3d5a 5709be overridden by using the @option{-specs=} command-line switch to specify
a743d340
NC
5710a spec file.
5711
5712@dfn{Spec files} are plaintext files that are used to construct spec
5713strings. They consist of a sequence of directives separated by blank
5714lines. The type of directive is determined by the first non-whitespace
5715character on the line and it can be one of the following:
5716
5717@table @code
5718@item %@var{command}
5719Issues a @var{command} to the spec file processor. The commands that can
02f52e19 5720appear here are:
a743d340
NC
5721
5722@table @code
5723@item %include <@var{file}>
5724@cindex %include
5725Search for @var{file} and insert its text at the current point in the
5726specs file.
5727
5728@item %include_noerr <@var{file}>
5729@cindex %include_noerr
5730Just like @samp{%include}, but do not generate an error message if the include
5731file cannot be found.
5732
5733@item %rename @var{old_name} @var{new_name}
5734@cindex %rename
5735Rename the spec string @var{old_name} to @var{new_name}.
5736
5737@end table
5738
5739@item *[@var{spec_name}]:
5740This tells the compiler to create, override or delete the named spec
5741string. All lines after this directive up to the next directive or
5742blank line are considered to be the text for the spec string. If this
5743results in an empty string then the spec will be deleted. (Or, if the
5744spec did not exist, then nothing will happened.) Otherwise, if the spec
5745does not currently exist a new spec will be created. If the spec does
5746exist then its contents will be overridden by the text of this
5747directive, unless the first character of that text is the @samp{+}
5748character, in which case the text will be appended to the spec.
5749
5750@item [@var{suffix}]:
5751Creates a new @samp{[@var{suffix}] spec} pair. All lines after this directive
5752and up to the next directive or blank line are considered to make up the
02f52e19 5753spec string for the indicated suffix. When the compiler encounters an
a743d340
NC
5754input file with the named suffix, it will processes the spec string in
5755order to work out how to compile that file. For example:
5756
5757@smallexample
5758.ZZ:
5759z-compile -input %i
5760@end smallexample
5761
5762This says that any input file whose name ends in @samp{.ZZ} should be
5763passed to the program @samp{z-compile}, which should be invoked with the
630d3d5a 5764command-line switch @option{-input} and with the result of performing the
a743d340
NC
5765@samp{%i} substitution. (See below.)
5766
5767As an alternative to providing a spec string, the text that follows a
5768suffix directive can be one of the following:
5769
5770@table @code
5771@item @@@var{language}
5772This says that the suffix is an alias for a known @var{language}. This is
bedc7537 5773similar to using the @option{-x} command-line switch to GCC to specify a
a743d340
NC
5774language explicitly. For example:
5775
5776@smallexample
5777.ZZ:
5778@@c++
5779@end smallexample
5780
5781Says that .ZZ files are, in fact, C++ source files.
5782
5783@item #@var{name}
5784This causes an error messages saying:
5785
5786@smallexample
5787@var{name} compiler not installed on this system.
5788@end smallexample
5789@end table
5790
5791GCC already has an extensive list of suffixes built into it.
5792This directive will add an entry to the end of the list of suffixes, but
5793since the list is searched from the end backwards, it is effectively
5794possible to override earlier entries using this technique.
5795
5796@end table
5797
5798GCC has the following spec strings built into it. Spec files can
5799override these strings or create their own. Note that individual
02f52e19 5800targets can also add their own spec strings to this list.
a743d340
NC
5801
5802@smallexample
5803asm Options to pass to the assembler
5804asm_final Options to pass to the assembler post-processor
5805cpp Options to pass to the C preprocessor
5806cc1 Options to pass to the C compiler
5807cc1plus Options to pass to the C++ compiler
5808endfile Object files to include at the end of the link
5809link Options to pass to the linker
5810lib Libraries to include on the command line to the linker
5811libgcc Decides which GCC support library to pass to the linker
5812linker Sets the name of the linker
5813predefines Defines to be passed to the C preprocessor
310668e8
JM
5814signed_char Defines to pass to CPP to say whether @code{char} is signed
5815 by default
a743d340
NC
5816startfile Object files to include at the start of the link
5817@end smallexample
5818
5819Here is a small example of a spec file:
5820
5821@smallexample
5822%rename lib old_lib
5823
5824*lib:
5825--start-group -lgcc -lc -leval1 --end-group %(old_lib)
5826@end smallexample
5827
5828This example renames the spec called @samp{lib} to @samp{old_lib} and
5829then overrides the previous definition of @samp{lib} with a new one.
5830The new definition adds in some extra command-line options before
5831including the text of the old definition.
5832
5833@dfn{Spec strings} are a list of command-line options to be passed to their
5834corresponding program. In addition, the spec strings can contain
5835@samp{%}-prefixed sequences to substitute variable text or to
5836conditionally insert text into the command line. Using these constructs
5837it is possible to generate quite complex command lines.
5838
5839Here is a table of all defined @samp{%}-sequences for spec
5840strings. Note that spaces are not generated automatically around the
5841results of expanding these sequences. Therefore you can concatenate them
02f52e19 5842together or combine them with constant text in a single argument.
a743d340
NC
5843
5844@table @code
5845@item %%
5846Substitute one @samp{%} into the program name or argument.
5847
5848@item %i
5849Substitute the name of the input file being processed.
5850
5851@item %b
5852Substitute the basename of the input file being processed.
5853This is the substring up to (and not including) the last period
5854and not including the directory.
5855
371e300b
NC
5856@item %B
5857This is the same as @samp{%b}, but include the file suffix (text after
5858the last period).
5859
a743d340
NC
5860@item %d
5861Marks the argument containing or following the @samp{%d} as a
5862temporary file name, so that that file will be deleted if GCC exits
5863successfully. Unlike @samp{%g}, this contributes no text to the
02f52e19 5864argument.
a743d340
NC
5865
5866@item %g@var{suffix}
5867Substitute a file name that has suffix @var{suffix} and is chosen
5868once per compilation, and mark the argument in the same way as
5869@samp{%d}. To reduce exposure to denial-of-service attacks, the file
02f52e19 5870name is now chosen in a way that is hard to predict even when previously
695ac33f 5871chosen file names are known. For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
a743d340
NC
5872might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}. @var{suffix} matches
5873the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
5874treated exactly as if @samp{%O} had been preprocessed. Previously, @samp{%g}
5875was simply substituted with a file name chosen once per compilation,
5876without regard to any appended suffix (which was therefore treated
5877just like ordinary text), making such attacks more likely to succeed.
5878
5879@item %u@var{suffix}
5880Like @samp{%g}, but generates a new temporary file name even if
5881@samp{%u@var{suffix}} was already seen.
5882
5883@item %U@var{suffix}
5884Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
5885new one if there is no such last file name. In the absence of any
5886@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
695ac33f 5887the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
a743d340
NC
5888would involve the generation of two distinct file names, one
5889for each @samp{%g.s} and another for each @samp{%U.s}. Previously, @samp{%U} was
5890simply substituted with a file name chosen for the previous @samp{%u},
5891without regard to any appended suffix.
5892
4977bab6 5893@item %j@var{suffix}
aee96fe9 5894Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
371e300b
NC
5895writable, and if save-temps is off; otherwise, substitute the name
5896of a temporary file, just like @samp{%u}. This temporary file is not
5897meant for communication between processes, but rather as a junk
5898disposal mechanism.
5899
4977bab6
ZW
5900@item %|@var{suffix}
5901@itemx %m@var{suffix}
5902Like @samp{%g}, except if @option{-pipe} is in effect. In that case
5903@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
5904all. These are the two most common ways to instruct a program that it
5905should read from standard input or write to standard output. If you
5906need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
5907construct: see for example @file{f/lang-specs.h}.
5908
371e300b
NC
5909@item %.@var{SUFFIX}
5910Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
767094dd 5911when it is subsequently output with @samp{%*}. @var{SUFFIX} is
371e300b
NC
5912terminated by the next space or %.
5913
a743d340
NC
5914@item %w
5915Marks the argument containing or following the @samp{%w} as the
5916designated output file of this compilation. This puts the argument
5917into the sequence of arguments that @samp{%o} will substitute later.
5918
5919@item %o
5920Substitutes the names of all the output files, with spaces
5921automatically placed around them. You should write spaces
5922around the @samp{%o} as well or the results are undefined.
5923@samp{%o} is for use in the specs for running the linker.
5924Input files whose names have no recognized suffix are not compiled
5925at all, but they are included among the output files, so they will
5926be linked.
5927
5928@item %O
5929Substitutes the suffix for object files. Note that this is
5930handled specially when it immediately follows @samp{%g, %u, or %U},
5931because of the need for those to form complete file names. The
5932handling is such that @samp{%O} is treated exactly as if it had already
5933been substituted, except that @samp{%g, %u, and %U} do not currently
5934support additional @var{suffix} characters following @samp{%O} as they would
5935following, for example, @samp{.o}.
5936
5937@item %p
5938Substitutes the standard macro predefinitions for the
5939current target machine. Use this when running @code{cpp}.
5940
5941@item %P
5942Like @samp{%p}, but puts @samp{__} before and after the name of each
5943predefined macro, except for macros that start with @samp{__} or with
c1030c7c 5944@samp{_@var{L}}, where @var{L} is an uppercase letter. This is for ISO
161d7b59 5945C@.
a743d340
NC
5946
5947@item %I
047d636f
DJ
5948Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
5949@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}), and
5950@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
5951as necessary.
a743d340
NC
5952
5953@item %s
5954Current argument is the name of a library or startup file of some sort.
5955Search for that file in a standard list of directories and substitute
02f52e19 5956the full name found.
a743d340
NC
5957
5958@item %e@var{str}
5959Print @var{str} as an error message. @var{str} is terminated by a newline.
5960Use this when inconsistent options are detected.
5961
a743d340
NC
5962@item %(@var{name})
5963Substitute the contents of spec string @var{name} at this point.
5964
5965@item %[@var{name}]
630d3d5a 5966Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
a743d340
NC
5967
5968@item %x@{@var{option}@}
5969Accumulate an option for @samp{%X}.
5970
5971@item %X
630d3d5a 5972Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
a743d340
NC
5973spec string.
5974
5975@item %Y
630d3d5a 5976Output the accumulated assembler options specified by @option{-Wa}.
a743d340
NC
5977
5978@item %Z
630d3d5a 5979Output the accumulated preprocessor options specified by @option{-Wp}.
a743d340 5980
a743d340
NC
5981@item %a
5982Process the @code{asm} spec. This is used to compute the
5983switches to be passed to the assembler.
5984
5985@item %A
5986Process the @code{asm_final} spec. This is a spec string for
5987passing switches to an assembler post-processor, if such a program is
5988needed.
5989
5990@item %l
5991Process the @code{link} spec. This is the spec for computing the
5992command line passed to the linker. Typically it will make use of the
5993@samp{%L %G %S %D and %E} sequences.
5994
5995@item %D
630d3d5a 5996Dump out a @option{-L} option for each directory that GCC believes might
a743d340 5997contain startup files. If the target supports multilibs then the
02f52e19 5998current multilib directory will be prepended to each of these paths.
a743d340 5999
371e300b 6000@item %M
c771326b 6001Output the multilib directory with directory separators replaced with
695ac33f
JM
6002@samp{_}. If multilib directories are not set, or the multilib directory is
6003@file{.} then this option emits nothing.
371e300b 6004
a743d340
NC
6005@item %L
6006Process the @code{lib} spec. This is a spec string for deciding which
02f52e19 6007libraries should be included on the command line to the linker.
a743d340
NC
6008
6009@item %G
6010Process the @code{libgcc} spec. This is a spec string for deciding
02f52e19 6011which GCC support library should be included on the command line to the linker.
a743d340
NC
6012
6013@item %S
6014Process the @code{startfile} spec. This is a spec for deciding which
6015object files should be the first ones passed to the linker. Typically
02f52e19 6016this might be a file named @file{crt0.o}.
a743d340
NC
6017
6018@item %E
6019Process the @code{endfile} spec. This is a spec string that specifies
02f52e19 6020the last object files that will be passed to the linker.
a743d340
NC
6021
6022@item %C
6023Process the @code{cpp} spec. This is used to construct the arguments
6024to be passed to the C preprocessor.
6025
a743d340
NC
6026@item %1
6027Process the @code{cc1} spec. This is used to construct the options to be
6028passed to the actual C compiler (@samp{cc1}).
6029
6030@item %2
6031Process the @code{cc1plus} spec. This is used to construct the options to be
6032passed to the actual C++ compiler (@samp{cc1plus}).
6033
6034@item %*
6035Substitute the variable part of a matched option. See below.
6036Note that each comma in the substituted string is replaced by
6037a single space.
6038
4977bab6
ZW
6039@item %<@code{S}
6040Remove all occurrences of @code{-S} from the command line. Note---this
6041command is position dependent. @samp{%} commands in the spec string
6042before this one will see @code{-S}, @samp{%} commands in the spec string
6043after this one will not.
6044
f3226a90
JT
6045@item %:@var{function}(@var{args})
6046Call the named function @var{function}, passing it @var{args}.
6047@var{args} is first processed as a nested spec string, then split
6048into an argument vector in the usual fashion. The function returns
6049a string which is processed as if it had appeared literally as part
6050of the current spec.
6051
6052The following built-in spec functions are provided:
6053
6054@table @code
6055@item @code{if-exists}
6056The @code{if-exists} spec function takes one argument, an absolute
6057pathname to a file. If the file exists, @code{if-exists} returns the
6058pathname. Here is a small example of its usage:
6059
6060@smallexample
6061*startfile:
6062crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
6063@end smallexample
152a5a9c
JT
6064
6065@item @code{if-exists-else}
6066The @code{if-exists-else} spec function is similar to the @code{if-exists}
6067spec function, except that it takes two arguments. The first argument is
6068an absolute pathname to a file. If the file exists, @code{if-exists-else}
6069returns the pathname. If it does not exist, it returns the second argument.
6070This way, @code{if-exists-else} can be used to select one file or another,
6071based on the existence of the first. Here is a small example of its usage:
6072
daf2f129 6073@smallexample
152a5a9c 6074*startfile:
f5034c5e
JM
6075crt0%O%s %:if-exists(crti%O%s) \
6076%:if-exists-else(crtbeginT%O%s crtbegin%O%s)
152a5a9c 6077@end smallexample
daf2f129 6078@end table
f3226a90 6079
a743d340 6080@item %@{@code{S}@}
161d7b59 6081Substitutes the @code{-S} switch, if that switch was given to GCC@.
a743d340
NC
6082If that switch was not specified, this substitutes nothing. Note that
6083the leading dash is omitted when specifying this option, and it is
6084automatically inserted if the substitution is performed. Thus the spec
630d3d5a
JM
6085string @samp{%@{foo@}} would match the command-line option @option{-foo}
6086and would output the command line option @option{-foo}.
a743d340
NC
6087
6088@item %W@{@code{S}@}
6089Like %@{@code{S}@} but mark last argument supplied within as a file to be
02f52e19 6090deleted on failure.
a743d340
NC
6091
6092@item %@{@code{S}*@}
6093Substitutes all the switches specified to GCC whose names start
6094with @code{-S}, but which also take an argument. This is used for
695ac33f 6095switches like @option{-o}, @option{-D}, @option{-I}, etc.
630d3d5a 6096GCC considers @option{-o foo} as being
a743d340 6097one switch whose names starts with @samp{o}. %@{o*@} would substitute this
02f52e19 6098text, including the space. Thus two arguments would be generated.
a743d340 6099
371e300b
NC
6100@item %@{@code{S}*&@code{T}*@}
6101Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
6102(the order of @code{S} and @code{T} in the spec is not significant).
6103There can be any number of ampersand-separated variables; for each the
6104wild card is optional. Useful for CPP as @samp{%@{D*&U*&A*@}}.
6105
a743d340 6106@item %@{@code{S}:@code{X}@}
4977bab6 6107Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.
a743d340
NC
6108
6109@item %@{!@code{S}:@code{X}@}
4977bab6 6110Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.
a743d340 6111
4977bab6
ZW
6112@item %@{@code{S}*:@code{X}@}
6113Substitutes @code{X} if one or more switches whose names start with
6114@code{-S} are specified to GCC@. Normally @code{X} is substituted only
6115once, no matter how many such switches appeared. However, if @code{%*}
6116appears somewhere in @code{X}, then @code{X} will be substituted once
6117for each matching switch, with the @code{%*} replaced by the part of
6118that switch that matched the @code{*}.
a743d340
NC
6119
6120@item %@{.@code{S}:@code{X}@}
4977bab6 6121Substitutes @code{X}, if processing a file with suffix @code{S}.
a743d340
NC
6122
6123@item %@{!.@code{S}:@code{X}@}
4977bab6 6124Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
a743d340
NC
6125
6126@item %@{@code{S}|@code{P}:@code{X}@}
4977bab6
ZW
6127Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC@.
6128This may be combined with @samp{!}, @samp{.}, and @code{*} sequences as well,
6129although they have a stronger binding than the @samp{|}. If @code{%*}
6130appears in @code{X}, all of the alternatives must be starred, and only
6131the first matching alternative is substituted.
6132
6133For example, a spec string like this:
a743d340
NC
6134
6135@smallexample
6136%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
6137@end smallexample
6138
6139will output the following command-line options from the following input
6140command-line options:
6141
6142@smallexample
6143fred.c -foo -baz
6144jim.d -bar -boggle
6145-d fred.c -foo -baz -boggle
6146-d jim.d -bar -baz -boggle
6147@end smallexample
6148
4977bab6
ZW
6149@item %@{S:X; T:Y; :D@}
6150
c0cbdbd9
KH
6151If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
6152given to GCC, substitutes @code{Y}; else substitutes @code{D}. There can
daf2f129 6153be as many clauses as you need. This may be combined with @code{.},
4977bab6
ZW
6154@code{!}, @code{|}, and @code{*} as needed.
6155
6156
a743d340
NC
6157@end table
6158
4977bab6
ZW
6159The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
6160construct may contain other nested @samp{%} constructs or spaces, or
6161even newlines. They are processed as usual, as described above.
6162Trailing white space in @code{X} is ignored. White space may also
6163appear anywhere on the left side of the colon in these constructs,
6164except between @code{.} or @code{*} and the corresponding word.
a743d340 6165
4977bab6
ZW
6166The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
6167handled specifically in these constructs. If another value of
6168@option{-O} or the negated form of a @option{-f}, @option{-m}, or
6169@option{-W} switch is found later in the command line, the earlier
6170switch value is ignored, except with @{@code{S}*@} where @code{S} is
6171just one letter, which passes all matching options.
a743d340 6172
4977bab6
ZW
6173The character @samp{|} at the beginning of the predicate text is used to
6174indicate that a command should be piped to the following command, but
6175only if @option{-pipe} is specified.
a743d340
NC
6176
6177It is built into GCC which switches take arguments and which do not.
6178(You might think it would be useful to generalize this to allow each
6179compiler's spec to say which switches take arguments. But this cannot
6180be done in a consistent fashion. GCC cannot even decide which input
6181files have been specified without knowing which switches take arguments,
6182and it must know which input files to compile in order to tell which
02f52e19 6183compilers to run).
a743d340 6184
630d3d5a 6185GCC also knows implicitly that arguments starting in @option{-l} are to be
a743d340
NC
6186treated as compiler output files, and passed to the linker in their
6187proper position among the other output files.
6188
ee457005
JM
6189@c man begin OPTIONS
6190
74291a4b
MM
6191@node Target Options
6192@section Specifying Target Machine and Compiler Version
6193@cindex target options
6194@cindex cross compiling
6195@cindex specifying machine version
6196@cindex specifying compiler version and target machine
6197@cindex compiler version, specifying
6198@cindex target machine, specifying
6199
37a4aa31
GK
6200The usual way to run GCC is to run the executable called @file{gcc}, or
6201@file{<machine>-gcc} when cross-compiling, or
6202@file{<machine>-gcc-<version>} to run a version other than the one that
6203was installed last. Sometimes this is inconvenient, so GCC provides
6204options that will switch to another cross-compiler or version.
74291a4b 6205
2642624b 6206@table @gcctabopt
74291a4b 6207@item -b @var{machine}
cd3bb277 6208@opindex b
74291a4b 6209The argument @var{machine} specifies the target machine for compilation.
74291a4b
MM
6210
6211The value to use for @var{machine} is the same as was specified as the
0c2d1a2a 6212machine type when configuring GCC as a cross-compiler. For
74291a4b
MM
6213example, if a cross-compiler was configured with @samp{configure
6214i386v}, meaning to compile for an 80386 running System V, then you
630d3d5a 6215would specify @option{-b i386v} to run that cross compiler.
74291a4b 6216
37a4aa31
GK
6217@item -V @var{version}
6218@opindex V
6219The argument @var{version} specifies which version of GCC to run.
6220This is useful when multiple versions are installed. For example,
6221@var{version} might be @samp{2.0}, meaning to run GCC version 2.0.
74291a4b
MM
6222@end table
6223
37a4aa31
GK
6224The @option{-V} and @option{-b} options work by running the
6225@file{<machine>-gcc-<version>} executable, so there's no real reason to
6226use them if you can just run that directly.
74291a4b
MM
6227
6228@node Submodel Options
6229@section Hardware Models and Configurations
6230@cindex submodel options
6231@cindex specifying hardware config
6232@cindex hardware models and configurations, specifying
6233@cindex machine dependent options
6234
630d3d5a 6235Earlier we discussed the standard option @option{-b} which chooses among
74291a4b 6236different installed compilers for completely different target
8aeea6e6 6237machines, such as VAX vs.@: 68000 vs.@: 80386.
74291a4b
MM
6238
6239In addition, each of these target machine types can have its own
6240special options, starting with @samp{-m}, to choose among various
6241hardware models or configurations---for example, 68010 vs 68020,
6242floating coprocessor or none. A single installed version of the
6243compiler can compile for any model or configuration, according to the
6244options specified.
6245
6246Some configurations of the compiler also support additional special
6247options, usually for compatibility with other compilers on the same
6248platform.
6249
74291a4b
MM
6250These options are defined by the macro @code{TARGET_SWITCHES} in the
6251machine description. The default for the options is also defined by
6252that macro, which enables you to change the defaults.
74291a4b 6253
39bc1876
NS
6254@c This list is ordered alphanumerically by subsection name.
6255@c It should be the same order and spelling as these options are listed
6256@c in Machine Dependent Options
6257
74291a4b 6258@menu
39bc1876 6259* ARC Options::
74291a4b 6260* ARM Options::
39bc1876
NS
6261* AVR Options::
6262* CRIS Options::
48aec0bc 6263* Darwin Options::
74291a4b 6264* DEC Alpha Options::
d7c23cdc 6265* DEC Alpha/VMS Options::
39bc1876 6266* FRV Options::
74291a4b 6267* H8/300 Options::
39bc1876
NS
6268* HPPA Options::
6269* i386 and x86-64 Options::
6270* IA-64 Options::
6271* M32R/D Options::
6272* M680x0 Options::
6273* M68hc1x Options::
6274* MCore Options::
6275* MIPS Options::
6276* MMIX Options::
6277* MN10300 Options::
6278* NS32K Options::
6279* PDP-11 Options::
6280* PowerPC Options::
6281* RS/6000 and PowerPC Options::
6282* S/390 and zSeries Options::
74291a4b 6283* SH Options::
39bc1876 6284* SPARC Options::
74291a4b 6285* System V Options::
282a61e6 6286* TMS320C3x/C4x Options::
f84271d9 6287* V850 Options::
39bc1876
NS
6288* VAX Options::
6289* x86-64 Options::
69a0611f 6290* Xstormy16 Options::
03984308 6291* Xtensa Options::
39bc1876 6292* zSeries Options::
74291a4b
MM
6293@end menu
6294
39bc1876
NS
6295@node ARC Options
6296@subsection ARC Options
6297@cindex ARC Options
74291a4b 6298
39bc1876 6299These options are defined for ARC implementations:
74291a4b 6300
2642624b 6301@table @gcctabopt
39bc1876
NS
6302@item -EL
6303@opindex EL
6304Compile code for little endian mode. This is the default.
74cf1c6d 6305
39bc1876
NS
6306@item -EB
6307@opindex EB
6308Compile code for big endian mode.
74291a4b 6309
39bc1876
NS
6310@item -mmangle-cpu
6311@opindex mmangle-cpu
6312Prepend the name of the cpu to all public symbol names.
6313In multiple-processor systems, there are many ARC variants with different
6314instruction and register set characteristics. This flag prevents code
6315compiled for one cpu to be linked with code compiled for another.
6316No facility exists for handling variants that are ``almost identical''.
6317This is an all or nothing option.
74291a4b 6318
39bc1876
NS
6319@item -mcpu=@var{cpu}
6320@opindex mcpu
6321Compile code for ARC variant @var{cpu}.
6322Which variants are supported depend on the configuration.
6323All variants support @option{-mcpu=base}, this is the default.
74291a4b 6324
39bc1876
NS
6325@item -mtext=@var{text-section}
6326@itemx -mdata=@var{data-section}
6327@itemx -mrodata=@var{readonly-data-section}
6328@opindex mtext
6329@opindex mdata
6330@opindex mrodata
6331Put functions, data, and readonly data in @var{text-section},
6332@var{data-section}, and @var{readonly-data-section} respectively
6333by default. This can be overridden with the @code{section} attribute.
6334@xref{Variable Attributes}.
74291a4b 6335
39bc1876 6336@end table
74291a4b 6337
39bc1876
NS
6338@node ARM Options
6339@subsection ARM Options
6340@cindex ARM options
74291a4b 6341
39bc1876
NS
6342These @samp{-m} options are defined for Advanced RISC Machines (ARM)
6343architectures:
74cf1c6d 6344
39bc1876
NS
6345@table @gcctabopt
6346@item -mabi=@var{name}
6347@opindex mabi
6348Generate code for the specified ABI. Permissible values are: @samp{apcs-gnu},
6349@samp{atpcs}, @samp{aapcs} and @samp{iwmmxt}.
74cf1c6d 6350
39bc1876
NS
6351@item -mapcs-frame
6352@opindex mapcs-frame
6353Generate a stack frame that is compliant with the ARM Procedure Call
6354Standard for all functions, even if this is not strictly necessary for
6355correct execution of the code. Specifying @option{-fomit-frame-pointer}
6356with this option will cause the stack frames not to be generated for
6357leaf functions. The default is @option{-mno-apcs-frame}.
74291a4b 6358
39bc1876
NS
6359@item -mapcs
6360@opindex mapcs
6361This is a synonym for @option{-mapcs-frame}.
74291a4b 6362
39bc1876
NS
6363@ignore
6364@c not currently implemented
6365@item -mapcs-stack-check
6366@opindex mapcs-stack-check
6367Generate code to check the amount of stack space available upon entry to
6368every function (that actually uses some stack space). If there is
6369insufficient space available then either the function
6370@samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
6371called, depending upon the amount of stack space required. The run time
6372system is required to provide these functions. The default is
6373@option{-mno-apcs-stack-check}, since this produces smaller code.
74cf1c6d 6374
39bc1876
NS
6375@c not currently implemented
6376@item -mapcs-float
6377@opindex mapcs-float
6378Pass floating point arguments using the float point registers. This is
6379one of the variants of the APCS@. This option is recommended if the
6380target hardware has a floating point unit or if a lot of floating point
6381arithmetic is going to be performed by the code. The default is
6382@option{-mno-apcs-float}, since integer only code is slightly increased in
6383size if @option{-mapcs-float} is used.
74291a4b 6384
39bc1876
NS
6385@c not currently implemented
6386@item -mapcs-reentrant
6387@opindex mapcs-reentrant
6388Generate reentrant, position independent code. The default is
6389@option{-mno-apcs-reentrant}.
6390@end ignore
74291a4b 6391
39bc1876
NS
6392@item -mthumb-interwork
6393@opindex mthumb-interwork
6394Generate code which supports calling between the ARM and Thumb
6395instruction sets. Without this option the two instruction sets cannot
6396be reliably used inside one program. The default is
6397@option{-mno-thumb-interwork}, since slightly larger code is generated
6398when @option{-mthumb-interwork} is specified.
6399
6400@item -mno-sched-prolog
6401@opindex mno-sched-prolog
6402Prevent the reordering of instructions in the function prolog, or the
6403merging of those instruction with the instructions in the function's
6404body. This means that all functions will start with a recognizable set
6405of instructions (or in fact one of a choice from a small set of
6406different function prologues), and this information can be used to
6407locate the start if functions inside an executable piece of code. The
6408default is @option{-msched-prolog}.
6409
6410@item -mhard-float
6411@opindex mhard-float
6412Generate output containing floating point instructions. This is the
6413default.
861bb6c1 6414
74291a4b 6415@item -msoft-float
cd3bb277 6416@opindex msoft-float
74291a4b 6417Generate output containing library calls for floating point.
39bc1876 6418@strong{Warning:} the requisite libraries are not available for all ARM
74291a4b 6419targets. Normally the facilities of the machine's usual C compiler are
39bc1876
NS
6420used, but this cannot be done directly in cross-compilation. You must make
6421your own arrangements to provide suitable library functions for
6422cross-compilation.
74291a4b 6423
39bc1876
NS
6424@option{-msoft-float} changes the calling convention in the output file;
6425therefore, it is only useful if you compile @emph{all} of a program with
6426this option. In particular, you need to compile @file{libgcc.a}, the
6427library that comes with GCC, with @option{-msoft-float} in order for
6428this to work.
74291a4b 6429
39bc1876
NS
6430@item -mfloat-abi=@var{name}
6431@opindex mfloat-abi
6432Specifies which ABI to use for floating point values. Permissible values
6433are: @samp{soft}, @samp{softfp} and @samp{hard}.
74291a4b 6434
39bc1876
NS
6435@samp{soft} and @samp{hard} are equivalent to @option{-msoft-float}
6436and @option{-mhard-float} respectively. @samp{softfp} allows the generation
6437of floating point instructions, but still uses the soft-float calling
6438conventions.
74291a4b 6439
39bc1876
NS
6440@item -mlittle-endian
6441@opindex mlittle-endian
6442Generate code for a processor running in little-endian mode. This is
6443the default for all standard configurations.
74291a4b 6444
39bc1876
NS
6445@item -mbig-endian
6446@opindex mbig-endian
6447Generate code for a processor running in big-endian mode; the default is
6448to compile code for a little-endian processor.
74291a4b 6449
39bc1876
NS
6450@item -mwords-little-endian
6451@opindex mwords-little-endian
6452This option only applies when generating code for big-endian processors.
6453Generate code for a little-endian word order but a big-endian byte
6454order. That is, a byte order of the form @samp{32107654}. Note: this
6455option should only be used if you require compatibility with code for
6456big-endian ARM processors generated by versions of the compiler prior to
64572.8.
74291a4b 6458
39bc1876
NS
6459@item -mcpu=@var{name}
6460@opindex mcpu
6461This specifies the name of the target ARM processor. GCC uses this name
6462to determine what kind of instructions it can emit when generating
6463assembly code. Permissible names are: @samp{arm2}, @samp{arm250},
6464@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
6465@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
6466@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
6467@samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
6468@samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm8},
6469@samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
6470@samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
6471@samp{arm920t}, @samp{arm926ejs}, @samp{arm940t}, @samp{arm9tdmi},
6472@samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ejs},
6473@samp{arm1136js}, @samp{arm1136jfs} ,@samp{xscale}, @samp{iwmmxt},
6474@samp{ep9312}.
74291a4b 6475
39bc1876
NS
6476@itemx -mtune=@var{name}
6477@opindex mtune
6478This option is very similar to the @option{-mcpu=} option, except that
6479instead of specifying the actual target processor type, and hence
6480restricting which instructions can be used, it specifies that GCC should
6481tune the performance of the code as if the target were of the type
6482specified in this option, but still choosing the instructions that it
6483will generate based on the cpu specified by a @option{-mcpu=} option.
6484For some ARM implementations better performance can be obtained by using
6485this option.
861bb6c1 6486
39bc1876
NS
6487@item -march=@var{name}
6488@opindex march
6489This specifies the name of the target ARM architecture. GCC uses this
6490name to determine what kind of instructions it can emit when generating
6491assembly code. This option can be used in conjunction with or instead
6492of the @option{-mcpu=} option. Permissible names are: @samp{armv2},
6493@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
6494@samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6}, @samp{armv6j},
6495@samp{iwmmxt}, @samp{ep9312}.
861bb6c1 6496
39bc1876
NS
6497@item -mfpu=@var{name}
6498@itemx -mfpe=@var{number}
6499@itemx -mfp=@var{number}
6500@opindex mfpu
6501@opindex mfpe
6502@opindex mfp
6503This specifies what floating point hardware (or hardware emulation) is
6504available on the target. Permissible names are: @samp{fpa}, @samp{fpe2},
6505@samp{fpe3}, @samp{maverick}, @samp{vfp}. @option{-mfp} and @option{-mfpe}
6506are synonyms for @option{-mfpu}=@samp{fpe}@var{number}, for compatibility
6507with older versions of GCC@.
861bb6c1 6508
39bc1876
NS
6509If @option{-msoft-float} is specified this specifies the format of
6510floating point values.
fb868474 6511
39bc1876
NS
6512@item -mstructure-size-boundary=@var{n}
6513@opindex mstructure-size-boundary
6514The size of all structures and unions will be rounded up to a multiple
6515of the number of bits set by this option. Permissible values are 8, 32
6516and 64. The default value varies for different toolchains. For the COFF
6517targeted toolchain the default value is 8. A value of 64 is only allowed
6518if the underlying ABI supports it.
b71733d5 6519
39bc1876
NS
6520Specifying the larger number can produce faster, more efficient code, but
6521can also increase the size of the program. Different values are potentially
6522incompatible. Code compiled with one value cannot necessarily expect to
6523work with code or libraries compiled with another value, if they exchange
6524information using structures or unions.
24f9c4df 6525
39bc1876
NS
6526@item -mabort-on-noreturn
6527@opindex mabort-on-noreturn
6528Generate a call to the function @code{abort} at the end of a
6529@code{noreturn} function. It will be executed if the function tries to
6530return.
24f9c4df 6531
39bc1876
NS
6532@item -mlong-calls
6533@itemx -mno-long-calls
6534@opindex mlong-calls
6535@opindex mno-long-calls
6536Tells the compiler to perform function calls by first loading the
6537address of the function into a register and then performing a subroutine
6538call on this register. This switch is needed if the target function
6539will lie outside of the 64 megabyte addressing range of the offset based
6540version of subroutine call instruction.
24f9c4df 6541
39bc1876
NS
6542Even if this switch is enabled, not all function calls will be turned
6543into long calls. The heuristic is that static functions, functions
6544which have the @samp{short-call} attribute, functions that are inside
6545the scope of a @samp{#pragma no_long_calls} directive and functions whose
6546definitions have already been compiled within the current compilation
6547unit, will not be turned into long calls. The exception to this rule is
6548that weak function definitions, functions with the @samp{long-call}
6549attribute or the @samp{section} attribute, and functions that are within
6550the scope of a @samp{#pragma long_calls} directive, will always be
6551turned into long calls.
24f9c4df 6552
39bc1876
NS
6553This feature is not enabled by default. Specifying
6554@option{-mno-long-calls} will restore the default behavior, as will
6555placing the function calls within the scope of a @samp{#pragma
6556long_calls_off} directive. Note these switches have no effect on how
6557the compiler generates code to handle function calls via function
6558pointers.
24f9c4df 6559
39bc1876
NS
6560@item -mnop-fun-dllimport
6561@opindex mnop-fun-dllimport
6562Disable support for the @code{dllimport} attribute.
74291a4b 6563
39bc1876
NS
6564@item -msingle-pic-base
6565@opindex msingle-pic-base
6566Treat the register used for PIC addressing as read-only, rather than
6567loading it in the prologue for each function. The run-time system is
6568responsible for initializing this register with an appropriate value
6569before execution begins.
2856c3e3 6570
39bc1876
NS
6571@item -mpic-register=@var{reg}
6572@opindex mpic-register
6573Specify the register to be used for PIC addressing. The default is R10
6574unless stack-checking is enabled, when R9 is used.
2856c3e3 6575
39bc1876
NS
6576@item -mcirrus-fix-invalid-insns
6577@opindex mcirrus-fix-invalid-insns
6578@opindex mno-cirrus-fix-invalid-insns
6579Insert NOPs into the instruction stream to in order to work around
6580problems with invalid Maverick instruction combinations. This option
6581is only valid if the @option{-mcpu=ep9312} option has been used to
6582enable generation of instructions for the Cirrus Maverick floating
6583point co-processor. This option is not enabled by default, since the
6584problem is only present in older Maverick implementations. The default
6585can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
6586switch.
2856c3e3 6587
39bc1876
NS
6588@item -mpoke-function-name
6589@opindex mpoke-function-name
6590Write the name of each function into the text section, directly
6591preceding the function prologue. The generated code is similar to this:
2856c3e3 6592
39bc1876
NS
6593@smallexample
6594 t0
6595 .ascii "arm_poke_function_name", 0
6596 .align
6597 t1
6598 .word 0xff000000 + (t1 - t0)
6599 arm_poke_function_name
6600 mov ip, sp
6601 stmfd sp!, @{fp, ip, lr, pc@}
6602 sub fp, ip, #4
6603@end smallexample
f077f169 6604
39bc1876
NS
6605When performing a stack backtrace, code can inspect the value of
6606@code{pc} stored at @code{fp + 0}. If the trace function then looks at
6607location @code{pc - 12} and the top 8 bits are set, then we know that
6608there is a function name embedded immediately preceding this location
6609and has length @code{((pc[-3]) & 0xff000000)}.
2856c3e3 6610
39bc1876
NS
6611@item -mthumb
6612@opindex mthumb
6613Generate code for the 16-bit Thumb instruction set. The default is to
6614use the 32-bit ARM instruction set.
8a0b86f5 6615
39bc1876
NS
6616@item -mtpcs-frame
6617@opindex mtpcs-frame
6618Generate a stack frame that is compliant with the Thumb Procedure Call
6619Standard for all non-leaf functions. (A leaf function is one that does
6620not call any other functions.) The default is @option{-mno-tpcs-frame}.
058edcdb 6621
39bc1876
NS
6622@item -mtpcs-leaf-frame
6623@opindex mtpcs-leaf-frame
6624Generate a stack frame that is compliant with the Thumb Procedure Call
6625Standard for all leaf functions. (A leaf function is one that does
6626not call any other functions.) The default is @option{-mno-apcs-leaf-frame}.
2856c3e3 6627
39bc1876
NS
6628@item -mcallee-super-interworking
6629@opindex mcallee-super-interworking
6630Gives all externally visible functions in the file being compiled an ARM
6631instruction set header which switches to Thumb mode before executing the
6632rest of the function. This allows these functions to be called from
6633non-interworking code.
6634
6635@item -mcaller-super-interworking
6636@opindex mcaller-super-interworking
6637Allows calls via function pointers (including virtual functions) to
6638execute correctly regardless of whether the target code has been
6639compiled for interworking or not. There is a small overhead in the cost
6640of executing a function pointer if this option is enabled.
2856c3e3
SC
6641
6642@end table
6643
39bc1876
NS
6644@node AVR Options
6645@subsection AVR Options
6646@cindex AVR Options
74291a4b 6647
39bc1876 6648These options are defined for AVR implementations:
74291a4b 6649
2642624b 6650@table @gcctabopt
39bc1876
NS
6651@item -mmcu=@var{mcu}
6652@opindex mmcu
6653Specify ATMEL AVR instruction set or MCU type.
74291a4b 6654
39bc1876
NS
6655Instruction set avr1 is for the minimal AVR core, not supported by the C
6656compiler, only for assembler programs (MCU types: at90s1200, attiny10,
6657attiny11, attiny12, attiny15, attiny28).
74291a4b 6658
39bc1876
NS
6659Instruction set avr2 (default) is for the classic AVR core with up to
66608K program memory space (MCU types: at90s2313, at90s2323, attiny22,
6661at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
6662at90c8534, at90s8535).
74291a4b 6663
39bc1876
NS
6664Instruction set avr3 is for the classic AVR core with up to 128K program
6665memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).
74291a4b 6666
39bc1876
NS
6667Instruction set avr4 is for the enhanced AVR core with up to 8K program
6668memory space (MCU types: atmega8, atmega83, atmega85).
74291a4b 6669
39bc1876
NS
6670Instruction set avr5 is for the enhanced AVR core with up to 128K program
6671memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
6672atmega64, atmega128, at43usb355, at94k).
74291a4b 6673
39bc1876
NS
6674@item -msize
6675@opindex msize
6676Output instruction sizes to the asm file.
74291a4b 6677
39bc1876
NS
6678@item -minit-stack=@var{N}
6679@opindex minit-stack
6680Specify the initial stack address, which may be a symbol or numeric value,
6681@samp{__stack} is the default.
74291a4b 6682
39bc1876
NS
6683@item -mno-interrupts
6684@opindex mno-interrupts
6685Generated code is not compatible with hardware interrupts.
6686Code size will be smaller.
74291a4b 6687
39bc1876
NS
6688@item -mcall-prologues
6689@opindex mcall-prologues
6690Functions prologues/epilogues expanded as call to appropriate
6691subroutines. Code size will be smaller.
74291a4b 6692
39bc1876
NS
6693@item -mno-tablejump
6694@opindex mno-tablejump
6695Do not generate tablejump insns which sometimes increase code size.
74291a4b 6696
39bc1876
NS
6697@item -mtiny-stack
6698@opindex mtiny-stack
6699Change only the low 8 bits of the stack pointer.
74291a4b 6700
39bc1876
NS
6701@item -mint8
6702@opindex mint8
6703Assume int to be 8 bit integer. This affects the sizes of all types: A
6704char will be 1 byte, an int will be 1 byte, an long will be 2 bytes
6705and long long will be 4 bytes. Please note that this option does not
6706comply to the C standards, but it will provide you with smaller code
6707size.
6708@end table
74291a4b 6709
39bc1876
NS
6710@node CRIS Options
6711@subsection CRIS Options
6712@cindex CRIS Options
74291a4b 6713
39bc1876 6714These options are defined specifically for the CRIS ports.
74291a4b 6715
39bc1876
NS
6716@table @gcctabopt
6717@item -march=@var{architecture-type}
6718@itemx -mcpu=@var{architecture-type}
6719@opindex march
6720@opindex mcpu
6721Generate code for the specified architecture. The choices for
6722@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
6723respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX.
6724Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
6725@samp{v10}.
c219ddf7 6726
39bc1876
NS
6727@item -mtune=@var{architecture-type}
6728@opindex mtune
6729Tune to @var{architecture-type} everything applicable about the generated
6730code, except for the ABI and the set of available instructions. The
6731choices for @var{architecture-type} are the same as for
6732@option{-march=@var{architecture-type}}.
54284728 6733
39bc1876
NS
6734@item -mmax-stack-frame=@var{n}
6735@opindex mmax-stack-frame
6736Warn when the stack frame of a function exceeds @var{n} bytes.
54284728 6737
39bc1876
NS
6738@item -melinux-stacksize=@var{n}
6739@opindex melinux-stacksize
6740Only available with the @samp{cris-axis-aout} target. Arranges for
6741indications in the program to the kernel loader that the stack of the
6742program should be set to @var{n} bytes.
54284728 6743
39bc1876
NS
6744@item -metrax4
6745@itemx -metrax100
6746@opindex metrax4
6747@opindex metrax100
6748The options @option{-metrax4} and @option{-metrax100} are synonyms for
6749@option{-march=v3} and @option{-march=v8} respectively.
c0498f43 6750
39bc1876
NS
6751@item -mmul-bug-workaround
6752@itemx -mno-mul-bug-workaround
6753@opindex mmul-bug-workaround
6754@opindex mno-mul-bug-workaround
6755Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
6756models where it applies. This option is active by default.
c0498f43 6757
39bc1876
NS
6758@item -mpdebug
6759@opindex mpdebug
6760Enable CRIS-specific verbose debug-related information in the assembly
6761code. This option also has the effect to turn off the @samp{#NO_APP}
6762formatted-code indicator to the assembler at the beginning of the
6763assembly file.
c0498f43 6764
39bc1876
NS
6765@item -mcc-init
6766@opindex mcc-init
6767Do not use condition-code results from previous instruction; always emit
6768compare and test instructions before use of condition codes.
74291a4b 6769
39bc1876
NS
6770@item -mno-side-effects
6771@opindex mno-side-effects
6772Do not emit instructions with side-effects in addressing modes other than
6773post-increment.
238b11b5 6774
39bc1876
NS
6775@item -mstack-align
6776@itemx -mno-stack-align
6777@itemx -mdata-align
6778@itemx -mno-data-align
6779@itemx -mconst-align
6780@itemx -mno-const-align
6781@opindex mstack-align
6782@opindex mno-stack-align
6783@opindex mdata-align
6784@opindex mno-data-align
6785@opindex mconst-align
6786@opindex mno-const-align
6787These options (no-options) arranges (eliminate arrangements) for the
6788stack-frame, individual data and constants to be aligned for the maximum
6789single data access size for the chosen CPU model. The default is to
6790arrange for 32-bit alignment. ABI details such as structure layout are
6791not affected by these options.
238b11b5 6792
39bc1876
NS
6793@item -m32-bit
6794@itemx -m16-bit
6795@itemx -m8-bit
6796@opindex m32-bit
6797@opindex m16-bit
6798@opindex m8-bit
6799Similar to the stack- data- and const-align options above, these options
6800arrange for stack-frame, writable data and constants to all be 32-bit,
680116-bit or 8-bit aligned. The default is 32-bit alignment.
238b11b5 6802
39bc1876
NS
6803@item -mno-prologue-epilogue
6804@itemx -mprologue-epilogue
6805@opindex mno-prologue-epilogue
6806@opindex mprologue-epilogue
6807With @option{-mno-prologue-epilogue}, the normal function prologue and
6808epilogue that sets up the stack-frame are omitted and no return
6809instructions or return sequences are generated in the code. Use this
6810option only together with visual inspection of the compiled code: no
6811warnings or errors are generated when call-saved registers must be saved,
6812or storage for local variable needs to be allocated.
238b11b5 6813
39bc1876
NS
6814@item -mno-gotplt
6815@itemx -mgotplt
6816@opindex mno-gotplt
6817@opindex mgotplt
6818With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
6819instruction sequences that load addresses for functions from the PLT part
6820of the GOT rather than (traditional on other architectures) calls to the
6821PLT. The default is @option{-mgotplt}.
238b11b5 6822
39bc1876
NS
6823@item -maout
6824@opindex maout
6825Legacy no-op option only recognized with the cris-axis-aout target.
c0498f43 6826
39bc1876
NS
6827@item -melf
6828@opindex melf
6829Legacy no-op option only recognized with the cris-axis-elf and
6830cris-axis-linux-gnu targets.
74291a4b 6831
39bc1876
NS
6832@item -melinux
6833@opindex melinux
6834Only recognized with the cris-axis-aout target, where it selects a
6835GNU/linux-like multilib, include files and instruction set for
6836@option{-march=v8}.
ded17aad 6837
39bc1876
NS
6838@item -mlinux
6839@opindex mlinux
6840Legacy no-op option only recognized with the cris-axis-linux-gnu target.
ded17aad 6841
39bc1876
NS
6842@item -sim
6843@opindex sim
6844This option, recognized for the cris-axis-aout and cris-axis-elf arranges
6845to link with input-output functions from a simulator library. Code,
6846initialized data and zero-initialized data are allocated consecutively.
74291a4b 6847
39bc1876
NS
6848@item -sim2
6849@opindex sim2
6850Like @option{-sim}, but pass linker options to locate initialized data at
68510x40000000 and zero-initialized data at 0x80000000.
74291a4b
MM
6852@end table
6853
39bc1876
NS
6854@node Darwin Options
6855@subsection Darwin Options
6856@cindex Darwin options
74291a4b 6857
39bc1876
NS
6858These options are defined for all architectures running the Darwin operating
6859system. They are useful for compatibility with other Mac OS compilers.
74291a4b 6860
2642624b 6861@table @gcctabopt
39bc1876
NS
6862@item -F@var{dir}
6863@opindex F
6864Add the framework directory @var{dir} to the head of the list of
6865directories to be searched for header files. These directories are
6866interleaved with those specified by @option{-I} options and are
6867scanned in a left-to-right order.
5848830f 6868
39bc1876
NS
6869A framework directory is a directory with frameworks in it. A
6870framework is a directory with a @samp{"Headers"} and/or
6871@samp{"PrivateHeaders"} directory contained directly in it that ends
6872in @samp{".framework"}. The name of a framework is the name of this
6873directory excluding the @samp{".framework"}. Headers associated with
6874the framework are found in one of those two directories, with
6875@samp{"Headers"} being searched first. A subframework is a framework
6876directory that is in a framework's @samp{"Frameworks"} directory.
6877Includes of subframework headers can only appear in a header of a
6878framework that contains the subframework, or in a sibling subframework
6879header. Two subframeworks are siblings if they occur in the same
6880framework. A subframework should not have the same name as a
6881framework, a warning will be issued if this is violated. Currently a
6882subframework cannot have subframeworks, in the future, the mechanism
6883may be extended to support this. The standard frameworks can be found
6884in @samp{"/System/Library/Frameworks"}, @samp{"/Library/Frameworks"}
6885and @samp{"/Local/Library/Frameworks"}. An example include looks like
6886@code{#include <Framework/header.h>}, where @samp{Framework} denotes
6887the name of the framework and header.h is found in the
6888@samp{"PrivateHeaders"} or @samp{"Headers"} directory.
157a620e 6889
39bc1876
NS
6890@item -all_load
6891@opindex all_load
6892Loads all members of static archive libraries.
6893See man ld(1) for more information.
74291a4b 6894
39bc1876
NS
6895@item -arch_errors_fatal
6896@opindex arch_errors_fatal
6897Cause the errors having to do with files that have the wrong architecture
6898to be fatal.
157a620e 6899
39bc1876
NS
6900@item -bind_at_load
6901@opindex bind_at_load
6902Causes the output file to be marked such that the dynamic linker will
6903bind all undefined references when the file is loaded or launched.
157a620e 6904
39bc1876
NS
6905@item -bundle
6906@opindex bundle
6907Produce a Mach-o bundle format file.
6908See man ld(1) for more information.
157a620e 6909
39bc1876
NS
6910@item -bundle_loader @var{executable}
6911@opindex bundle_loader
6912This specifies the @var{executable} that will be loading the build
6913output file being linked. See man ld(1) for more information.
157a620e 6914
39bc1876
NS
6915@item -allowable_client @var{client_name}
6916@itemx -arch_only
157a620e 6917
39bc1876
NS
6918@itemx -client_name
6919@itemx -compatibility_version
6920@itemx -current_version
6921@itemx -dependency-file
6922@itemx -dylib_file
6923@itemx -dylinker_install_name
6924@itemx -dynamic
6925@itemx -dynamiclib
6926@itemx -exported_symbols_list
6927@itemx -filelist
6928@itemx -flat_namespace
6929@itemx -force_cpusubtype_ALL
6930@itemx -force_flat_namespace
6931@itemx -headerpad_max_install_names
6932@itemx -image_base
6933@itemx -init
6934@itemx -install_name
6935@itemx -keep_private_externs
6936@itemx -multi_module
6937@itemx -multiply_defined
6938@itemx -multiply_defined_unused
6939@itemx -noall_load
6940@itemx -nofixprebinding
6941@itemx -nomultidefs
6942@itemx -noprebind
6943@itemx -noseglinkedit
6944@itemx -pagezero_size
6945@itemx -prebind
6946@itemx -prebind_all_twolevel_modules
6947@itemx -private_bundle
6948@itemx -read_only_relocs
6949@itemx -sectalign
6950@itemx -sectobjectsymbols
6951@itemx -whyload
6952@itemx -seg1addr
6953@itemx -sectcreate
6954@itemx -sectobjectsymbols
6955@itemx -sectorder
6956@itemx -seg_addr_table
6957@itemx -seg_addr_table_filename
6958@itemx -seglinkedit
6959@itemx -segprot
6960@itemx -segs_read_only_addr
6961@itemx -segs_read_write_addr
6962@itemx -single_module
6963@itemx -static
6964@itemx -sub_library
6965@itemx -sub_umbrella
6966@itemx -twolevel_namespace
6967@itemx -umbrella
6968@itemx -undefined
6969@itemx -unexported_symbols_list
6970@itemx -weak_reference_mismatches
6971@itemx -whatsloaded
74291a4b 6972
39bc1876
NS
6973@opindex allowable_client
6974@opindex arch_only
6975@opindex client_name
6976@opindex compatibility_version
6977@opindex current_version
6978@opindex dependency-file
6979@opindex dylib_file
6980@opindex dylinker_install_name
6981@opindex dynamic
6982@opindex dynamiclib
6983@opindex exported_symbols_list
6984@opindex filelist
6985@opindex flat_namespace
6986@opindex force_cpusubtype_ALL
6987@opindex force_flat_namespace
6988@opindex headerpad_max_install_names
6989@opindex image_base
6990@opindex init
6991@opindex install_name
6992@opindex keep_private_externs
6993@opindex multi_module
6994@opindex multiply_defined
6995@opindex multiply_defined_unused
6996@opindex noall_load
6997@opindex nofixprebinding
6998@opindex nomultidefs
6999@opindex noprebind
7000@opindex noseglinkedit
7001@opindex pagezero_size
7002@opindex prebind
7003@opindex prebind_all_twolevel_modules
7004@opindex private_bundle
7005@opindex read_only_relocs
7006@opindex sectalign
7007@opindex sectobjectsymbols
7008@opindex whyload
7009@opindex seg1addr
7010@opindex sectcreate
7011@opindex sectobjectsymbols
7012@opindex sectorder
7013@opindex seg_addr_table
7014@opindex seg_addr_table_filename
7015@opindex seglinkedit
7016@opindex segprot
7017@opindex segs_read_only_addr
7018@opindex segs_read_write_addr
7019@opindex single_module
7020@opindex static
7021@opindex sub_library
7022@opindex sub_umbrella
7023@opindex twolevel_namespace
7024@opindex umbrella
7025@opindex undefined
7026@opindex unexported_symbols_list
7027@opindex weak_reference_mismatches
7028@opindex whatsloaded
7029
7030These options are available for Darwin linker. Darwin linker man page
7031describes them in detail.
7032@end table
7033
7034@node DEC Alpha Options
7035@subsection DEC Alpha Options
7036
7037These @samp{-m} options are defined for the DEC Alpha implementations:
7038
7039@table @gcctabopt
7040@item -mno-soft-float
7041@itemx -msoft-float
7042@opindex mno-soft-float
cd3bb277 7043@opindex msoft-float
39bc1876
NS
7044Use (do not use) the hardware floating-point instructions for
7045floating-point operations. When @option{-msoft-float} is specified,
7046functions in @file{libgcc.a} will be used to perform floating-point
7047operations. Unless they are replaced by routines that emulate the
7048floating-point operations, or compiled in such a way as to call such
7049emulations routines, these routines will issue floating-point
7050operations. If you are compiling for an Alpha without floating-point
7051operations, you must ensure that the library is built so as not to call
7052them.
74291a4b 7053
39bc1876
NS
7054Note that Alpha implementations without floating-point operations are
7055required to have floating-point registers.
74291a4b 7056
39bc1876
NS
7057@item -mfp-reg
7058@itemx -mno-fp-regs
7059@opindex mfp-reg
7060@opindex mno-fp-regs
7061Generate code that uses (does not use) the floating-point register set.
7062@option{-mno-fp-regs} implies @option{-msoft-float}. If the floating-point
7063register set is not used, floating point operands are passed in integer
7064registers as if they were integers and floating-point results are passed
7065in @code{$0} instead of @code{$f0}. This is a non-standard calling sequence,
7066so any function with a floating-point argument or return value called by code
7067compiled with @option{-mno-fp-regs} must also be compiled with that
7068option.
9b66ebb1 7069
39bc1876
NS
7070A typical use of this option is building a kernel that does not use,
7071and hence need not save and restore, any floating-point registers.
9b66ebb1 7072
39bc1876
NS
7073@item -mieee
7074@opindex mieee
7075The Alpha architecture implements floating-point hardware optimized for
7076maximum performance. It is mostly compliant with the IEEE floating
7077point standard. However, for full compliance, software assistance is
7078required. This option generates code fully IEEE compliant code
7079@emph{except} that the @var{inexact-flag} is not maintained (see below).
7080If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
7081defined during compilation. The resulting code is less efficient but is
7082able to correctly support denormalized numbers and exceptional IEEE
7083values such as not-a-number and plus/minus infinity. Other Alpha
7084compilers call this option @option{-ieee_with_no_inexact}.
74291a4b 7085
39bc1876
NS
7086@item -mieee-with-inexact
7087@opindex mieee-with-inexact
7088This is like @option{-mieee} except the generated code also maintains
7089the IEEE @var{inexact-flag}. Turning on this option causes the
7090generated code to implement fully-compliant IEEE math. In addition to
7091@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
7092macro. On some Alpha implementations the resulting code may execute
7093significantly slower than the code generated by default. Since there is
7094very little code that depends on the @var{inexact-flag}, you should
7095normally not specify this option. Other Alpha compilers call this
7096option @option{-ieee_with_inexact}.
74291a4b 7097
39bc1876
NS
7098@item -mfp-trap-mode=@var{trap-mode}
7099@opindex mfp-trap-mode
7100This option controls what floating-point related traps are enabled.
7101Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
7102The trap mode can be set to one of four values:
74291a4b 7103
39bc1876
NS
7104@table @samp
7105@item n
7106This is the default (normal) setting. The only traps that are enabled
7107are the ones that cannot be disabled in software (e.g., division by zero
7108trap).
62b10bbc 7109
39bc1876
NS
7110@item u
7111In addition to the traps enabled by @samp{n}, underflow traps are enabled
7112as well.
157a620e 7113
39bc1876
NS
7114@item su
7115Like @samp{su}, but the instructions are marked to be safe for software
7116completion (see Alpha architecture manual for details).
157a620e 7117
39bc1876
NS
7118@item sui
7119Like @samp{su}, but inexact traps are enabled as well.
7120@end table
9b66ebb1 7121
39bc1876
NS
7122@item -mfp-rounding-mode=@var{rounding-mode}
7123@opindex mfp-rounding-mode
7124Selects the IEEE rounding mode. Other Alpha compilers call this option
7125@option{-fprm @var{rounding-mode}}. The @var{rounding-mode} can be one
7126of:
157a620e 7127
39bc1876
NS
7128@table @samp
7129@item n
7130Normal IEEE rounding mode. Floating point numbers are rounded towards
7131the nearest machine number or towards the even machine number in case
7132of a tie.
5848830f 7133
39bc1876
NS
7134@item m
7135Round towards minus infinity.
157a620e 7136
39bc1876
NS
7137@item c
7138Chopped rounding mode. Floating point numbers are rounded towards zero.
f5a1b0d2 7139
39bc1876
NS
7140@item d
7141Dynamic rounding mode. A field in the floating point control register
7142(@var{fpcr}, see Alpha architecture reference manual) controls the
7143rounding mode in effect. The C library initializes this register for
7144rounding towards plus infinity. Thus, unless your program modifies the
7145@var{fpcr}, @samp{d} corresponds to round towards plus infinity.
7146@end table
c27ba912 7147
39bc1876
NS
7148@item -mtrap-precision=@var{trap-precision}
7149@opindex mtrap-precision
7150In the Alpha architecture, floating point traps are imprecise. This
7151means without software assistance it is impossible to recover from a
7152floating trap and program execution normally needs to be terminated.
7153GCC can generate code that can assist operating system trap handlers
7154in determining the exact location that caused a floating point trap.
7155Depending on the requirements of an application, different levels of
7156precisions can be selected:
c27ba912 7157
39bc1876
NS
7158@table @samp
7159@item p
7160Program precision. This option is the default and means a trap handler
7161can only identify which program caused a floating point exception.
c27ba912 7162
39bc1876
NS
7163@item f
7164Function precision. The trap handler can determine the function that
7165caused a floating point exception.
62b10bbc 7166
39bc1876
NS
7167@item i
7168Instruction precision. The trap handler can determine the exact
7169instruction that caused a floating point exception.
7170@end table
ed0e6530 7171
39bc1876
NS
7172Other Alpha compilers provide the equivalent options called
7173@option{-scope_safe} and @option{-resumption_safe}.
ed0e6530 7174
39bc1876
NS
7175@item -mieee-conformant
7176@opindex mieee-conformant
7177This option marks the generated code as IEEE conformant. You must not
7178use this option unless you also specify @option{-mtrap-precision=i} and either
7179@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}. Its only effect
7180is to emit the line @samp{.eflag 48} in the function prologue of the
7181generated assembly file. Under DEC Unix, this has the effect that
7182IEEE-conformant math library routines will be linked in.
9b6b54e2 7183
39bc1876
NS
7184@item -mbuild-constants
7185@opindex mbuild-constants
7186Normally GCC examines a 32- or 64-bit integer constant to
7187see if it can construct it from smaller constants in two or three
7188instructions. If it cannot, it will output the constant as a literal and
7189generate code to load it from the data segment at runtime.
74291a4b 7190
39bc1876
NS
7191Use this option to require GCC to construct @emph{all} integer constants
7192using code, even if it takes more instructions (the maximum is six).
157a620e 7193
39bc1876
NS
7194You would typically use this option to build a shared library dynamic
7195loader. Itself a shared library, it must relocate itself in memory
7196before it can find the variables and constants in its own data segment.
7197
7198@item -malpha-as
7199@itemx -mgas
7200@opindex malpha-as
7201@opindex mgas
7202Select whether to generate code to be assembled by the vendor-supplied
7203assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
7204
7205@item -mbwx
7206@itemx -mno-bwx
7207@itemx -mcix
7208@itemx -mno-cix
7209@itemx -mfix
7210@itemx -mno-fix
7211@itemx -mmax
7212@itemx -mno-max
7213@opindex mbwx
7214@opindex mno-bwx
7215@opindex mcix
7216@opindex mno-cix
7217@opindex mfix
7218@opindex mno-fix
7219@opindex mmax
7220@opindex mno-max
7221Indicate whether GCC should generate code to use the optional BWX,
7222CIX, FIX and MAX instruction sets. The default is to use the instruction
7223sets supported by the CPU type specified via @option{-mcpu=} option or that
7224of the CPU on which GCC was built if none was specified.
157a620e 7225
39bc1876
NS
7226@item -mfloat-vax
7227@itemx -mfloat-ieee
7228@opindex mfloat-vax
7229@opindex mfloat-ieee
7230Generate code that uses (does not use) VAX F and G floating point
7231arithmetic instead of IEEE single and double precision.
157a620e 7232
39bc1876
NS
7233@item -mexplicit-relocs
7234@itemx -mno-explicit-relocs
7235@opindex mexplicit-relocs
7236@opindex mno-explicit-relocs
7237Older Alpha assemblers provided no way to generate symbol relocations
7238except via assembler macros. Use of these macros does not allow
7239optimal instruction scheduling. GNU binutils as of version 2.12
7240supports a new syntax that allows the compiler to explicitly mark
7241which relocations should apply to which instructions. This option
7242is mostly useful for debugging, as GCC detects the capabilities of
7243the assembler when it is built and sets the default accordingly.
157a620e 7244
39bc1876
NS
7245@item -msmall-data
7246@itemx -mlarge-data
7247@opindex msmall-data
7248@opindex mlarge-data
7249When @option{-mexplicit-relocs} is in effect, static data is
7250accessed via @dfn{gp-relative} relocations. When @option{-msmall-data}
7251is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
7252(the @code{.sdata} and @code{.sbss} sections) and are accessed via
725316-bit relocations off of the @code{$gp} register. This limits the
7254size of the small data area to 64KB, but allows the variables to be
7255directly accessed via a single instruction.
62b10bbc 7256
39bc1876
NS
7257The default is @option{-mlarge-data}. With this option the data area
7258is limited to just below 2GB. Programs that require more than 2GB of
7259data must use @code{malloc} or @code{mmap} to allocate the data in the
7260heap instead of in the program's data segment.
62b10bbc 7261
39bc1876
NS
7262When generating code for shared libraries, @option{-fpic} implies
7263@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
4bdc1ac7 7264
39bc1876
NS
7265@item -msmall-text
7266@itemx -mlarge-text
7267@opindex msmall-text
7268@opindex mlarge-text
7269When @option{-msmall-text} is used, the compiler assumes that the
7270code of the entire program (or shared library) fits in 4MB, and is
7271thus reachable with a branch instruction. When @option{-msmall-data}
7272is used, the compiler can assume that all local symbols share the
7273same @code{$gp} value, and thus reduce the number of instructions
7274required for a function call from 4 to 1.
157a620e 7275
39bc1876 7276The default is @option{-mlarge-text}.
d2d42a91 7277
39bc1876
NS
7278@item -mcpu=@var{cpu_type}
7279@opindex mcpu
7280Set the instruction set and instruction scheduling parameters for
7281machine type @var{cpu_type}. You can specify either the @samp{EV}
7282style name or the corresponding chip number. GCC supports scheduling
7283parameters for the EV4, EV5 and EV6 family of processors and will
7284choose the default values for the instruction set from the processor
7285you specify. If you do not specify a processor type, GCC will default
7286to the processor on which the compiler was built.
6d6d0fa0 7287
39bc1876 7288Supported values for @var{cpu_type} are
6d6d0fa0 7289
39bc1876
NS
7290@table @samp
7291@item ev4
7292@itemx ev45
7293@itemx 21064
7294Schedules as an EV4 and has no instruction set extensions.
ecff22ab 7295
39bc1876
NS
7296@item ev5
7297@itemx 21164
7298Schedules as an EV5 and has no instruction set extensions.
705ac34f 7299
39bc1876
NS
7300@item ev56
7301@itemx 21164a
7302Schedules as an EV5 and supports the BWX extension.
705ac34f 7303
39bc1876
NS
7304@item pca56
7305@itemx 21164pc
7306@itemx 21164PC
7307Schedules as an EV5 and supports the BWX and MAX extensions.
c474f76b 7308
39bc1876
NS
7309@item ev6
7310@itemx 21264
7311Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
ecff22ab 7312
39bc1876
NS
7313@item ev67
7314@itemx 21264a
7315Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
6d6d0fa0
JL
7316@end table
7317
39bc1876
NS
7318@item -mtune=@var{cpu_type}
7319@opindex mtune
7320Set only the instruction scheduling parameters for machine type
7321@var{cpu_type}. The instruction set is not changed.
ecff22ab 7322
39bc1876
NS
7323@item -mmemory-latency=@var{time}
7324@opindex mmemory-latency
7325Sets the latency the scheduler should assume for typical memory
7326references as seen by the application. This number is highly
7327dependent on the memory access patterns used by the application
7328and the size of the external cache on the machine.
861bb6c1 7329
39bc1876 7330Valid options for @var{time} are
6975bd2c 7331
39bc1876
NS
7332@table @samp
7333@item @var{number}
7334A decimal number representing clock cycles.
98180123 7335
39bc1876
NS
7336@item L1
7337@itemx L2
7338@itemx L3
7339@itemx main
7340The compiler contains estimates of the number of clock cycles for
7341``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
7342(also called Dcache, Scache, and Bcache), as well as to main memory.
7343Note that L3 is only valid for EV5.
de41e41c 7344
39bc1876
NS
7345@end table
7346@end table
861bb6c1 7347
39bc1876
NS
7348@node DEC Alpha/VMS Options
7349@subsection DEC Alpha/VMS Options
861bb6c1 7350
39bc1876 7351These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
861bb6c1 7352
39bc1876
NS
7353@table @gcctabopt
7354@item -mvms-return-codes
7355@opindex mvms-return-codes
7356Return VMS condition codes from main. The default is to return POSIX
7357style condition (e.g.@ error) codes.
7358@end table
861bb6c1 7359
39bc1876
NS
7360@node FRV Options
7361@subsection FRV Options
7362@cindex FRV Options
861bb6c1 7363
39bc1876
NS
7364@table @gcctabopt
7365@item -mgpr-32
7366@opindex mgpr-32
861bb6c1 7367
39bc1876 7368Only use the first 32 general purpose registers.
861bb6c1 7369
39bc1876
NS
7370@item -mgpr-64
7371@opindex mgpr-64
861bb6c1 7372
39bc1876 7373Use all 64 general purpose registers.
861bb6c1 7374
39bc1876
NS
7375@item -mfpr-32
7376@opindex mfpr-32
861bb6c1 7377
39bc1876 7378Use only the first 32 floating point registers.
ad126521 7379
39bc1876
NS
7380@item -mfpr-64
7381@opindex mfpr-64
ad126521 7382
39bc1876 7383Use all 64 floating point registers
ad126521 7384
39bc1876
NS
7385@item -mhard-float
7386@opindex mhard-float
ad126521 7387
39bc1876 7388Use hardware instructions for floating point operations.
ad126521 7389
39bc1876
NS
7390@item -msoft-float
7391@opindex msoft-float
ad126521 7392
39bc1876 7393Use library routines for floating point operations.
ad126521 7394
39bc1876
NS
7395@item -malloc-cc
7396@opindex malloc-cc
ad126521 7397
39bc1876 7398Dynamically allocate condition code registers.
ad126521 7399
39bc1876
NS
7400@item -mfixed-cc
7401@opindex mfixed-cc
861bb6c1 7402
39bc1876
NS
7403Do not try to dynamically allocate condition code registers, only
7404use @code{icc0} and @code{fcc0}.
74291a4b 7405
39bc1876
NS
7406@item -mdword
7407@opindex mdword
74291a4b 7408
39bc1876 7409Change ABI to use double word insns.
74291a4b 7410
39bc1876
NS
7411@item -mno-dword
7412@opindex mno-dword
74291a4b 7413
39bc1876 7414Do not use double word instructions.
74291a4b 7415
39bc1876
NS
7416@item -mdouble
7417@opindex mdouble
74291a4b 7418
39bc1876 7419Use floating point double instructions.
7fe90e7b 7420
39bc1876
NS
7421@item -mno-double
7422@opindex mno-double
74291a4b 7423
39bc1876 7424Do not use floating point double instructions.
74291a4b 7425
39bc1876
NS
7426@item -mmedia
7427@opindex mmedia
74291a4b 7428
39bc1876 7429Use media instructions.
9c34dbbf 7430
39bc1876
NS
7431@item -mno-media
7432@opindex mno-media
74291a4b 7433
39bc1876 7434Do not use media instructions.
74291a4b 7435
39bc1876
NS
7436@item -mmuladd
7437@opindex mmuladd
9c34dbbf 7438
39bc1876 7439Use multiply and add/subtract instructions.
66188a7e 7440
39bc1876
NS
7441@item -mno-muladd
7442@opindex mno-muladd
74291a4b 7443
39bc1876 7444Do not use multiply and add/subtract instructions.
74291a4b 7445
39bc1876
NS
7446@item -mlibrary-pic
7447@opindex mlibrary-pic
0ac081f6 7448
39bc1876 7449Generate position-independent EABI code.
6c8875e5 7450
39bc1876
NS
7451@item -macc-4
7452@opindex macc-4
6c8875e5 7453
39bc1876 7454Use only the first four media accumulator registers.
6c8875e5 7455
39bc1876
NS
7456@item -macc-8
7457@opindex macc-8
993f19a8 7458
39bc1876 7459Use all eight media accumulator registers.
5da702b1 7460
39bc1876
NS
7461@item -mpack
7462@opindex mpack
74291a4b 7463
39bc1876 7464Pack VLIW instructions.
74291a4b 7465
39bc1876
NS
7466@item -mno-pack
7467@opindex mno-pack
74291a4b 7468
39bc1876 7469Do not pack VLIW instructions.
7fe90e7b 7470
39bc1876
NS
7471@item -mno-eflags
7472@opindex mno-eflags
74291a4b 7473
39bc1876 7474Do not mark ABI switches in e_flags.
861bb6c1 7475
39bc1876
NS
7476@item -mcond-move
7477@opindex mcond-move
6184e8a4 7478
39bc1876 7479Enable the use of conditional-move instructions (default).
74291a4b 7480
39bc1876
NS
7481This switch is mainly for debugging the compiler and will likely be removed
7482in a future version.
74291a4b 7483
39bc1876
NS
7484@item -mno-cond-move
7485@opindex mno-cond-move
74291a4b 7486
39bc1876 7487Disable the use of conditional-move instructions.
861bb6c1 7488
39bc1876
NS
7489This switch is mainly for debugging the compiler and will likely be removed
7490in a future version.
861bb6c1 7491
39bc1876
NS
7492@item -mscc
7493@opindex mscc
74291a4b 7494
39bc1876 7495Enable the use of conditional set instructions (default).
74291a4b 7496
39bc1876
NS
7497This switch is mainly for debugging the compiler and will likely be removed
7498in a future version.
74291a4b 7499
39bc1876
NS
7500@item -mno-scc
7501@opindex mno-scc
74291a4b 7502
39bc1876 7503Disable the use of conditional set instructions.
74291a4b 7504
39bc1876
NS
7505This switch is mainly for debugging the compiler and will likely be removed
7506in a future version.
74291a4b 7507
39bc1876
NS
7508@item -mcond-exec
7509@opindex mcond-exec
74291a4b 7510
39bc1876 7511Enable the use of conditional execution (default).
74291a4b 7512
39bc1876
NS
7513This switch is mainly for debugging the compiler and will likely be removed
7514in a future version.
ab82a49f 7515
39bc1876
NS
7516@item -mno-cond-exec
7517@opindex mno-cond-exec
79ae11c4 7518
39bc1876 7519Disable the use of conditional execution.
daf2f129 7520
39bc1876
NS
7521This switch is mainly for debugging the compiler and will likely be removed
7522in a future version.
cbe26ab8 7523
39bc1876
NS
7524@item -mvliw-branch
7525@opindex mvliw-branch
7526
7527Run a pass to pack branches into VLIW instructions (default).
7528
7529This switch is mainly for debugging the compiler and will likely be removed
7530in a future version.
7531
7532@item -mno-vliw-branch
7533@opindex mno-vliw-branch
7534
7535Do not run a pass to pack branches into VLIW instructions.
7536
7537This switch is mainly for debugging the compiler and will likely be removed
7538in a future version.
74291a4b 7539
39bc1876
NS
7540@item -mmulti-cond-exec
7541@opindex mmulti-cond-exec
74291a4b 7542
39bc1876
NS
7543Enable optimization of @code{&&} and @code{||} in conditional execution
7544(default).
74291a4b 7545
39bc1876
NS
7546This switch is mainly for debugging the compiler and will likely be removed
7547in a future version.
74291a4b 7548
39bc1876
NS
7549@item -mno-multi-cond-exec
7550@opindex mno-multi-cond-exec
74291a4b 7551
39bc1876 7552Disable optimization of @code{&&} and @code{||} in conditional execution.
48180d68 7553
39bc1876
NS
7554This switch is mainly for debugging the compiler and will likely be removed
7555in a future version.
edf1b3f3 7556
39bc1876
NS
7557@item -mnested-cond-exec
7558@opindex mnested-cond-exec
9904592e 7559
39bc1876 7560Enable nested conditional execution optimizations (default).
9904592e 7561
39bc1876
NS
7562This switch is mainly for debugging the compiler and will likely be removed
7563in a future version.
0ac081f6 7564
39bc1876
NS
7565@item -mno-nested-cond-exec
7566@opindex mno-nested-cond-exec
76a773f3 7567
39bc1876 7568Disable nested conditional execution optimizations.
74291a4b 7569
39bc1876
NS
7570This switch is mainly for debugging the compiler and will likely be removed
7571in a future version.
74291a4b 7572
39bc1876
NS
7573@item -mtomcat-stats
7574@opindex mtomcat-stats
e9a25f70 7575
39bc1876 7576Cause gas to print out tomcat statistics.
e9a25f70 7577
39bc1876
NS
7578@item -mcpu=@var{cpu}
7579@opindex mcpu
74291a4b 7580
39bc1876
NS
7581Select the processor type for which to generate code. Possible values are
7582@samp{simple}, @samp{tomcat}, @samp{fr500}, @samp{fr400}, @samp{fr300},
7583@samp{frv}.
bff46771 7584
39bc1876 7585@end table
8d8269fa 7586
39bc1876
NS
7587@node H8/300 Options
7588@subsection H8/300 Options
74291a4b 7589
39bc1876 7590These @samp{-m} options are defined for the H8/300 implementations:
74291a4b 7591
39bc1876
NS
7592@table @gcctabopt
7593@item -mrelax
7594@opindex mrelax
7595Shorten some address references at link time, when possible; uses the
7596linker option @option{-relax}. @xref{H8/300,, @code{ld} and the H8/300,
7597ld, Using ld}, for a fuller description.
74291a4b 7598
39bc1876
NS
7599@item -mh
7600@opindex mh
7601Generate code for the H8/300H@.
74291a4b 7602
39bc1876
NS
7603@item -ms
7604@opindex ms
7605Generate code for the H8S@.
74291a4b 7606
39bc1876
NS
7607@item -mn
7608@opindex mn
7609Generate code for the H8S and H8/300H in the normal mode. This switch
7610must be used either with -mh or -ms.
74291a4b 7611
39bc1876
NS
7612@item -ms2600
7613@opindex ms2600
7614Generate code for the H8S/2600. This switch must be used with @option{-ms}.
74291a4b 7615
39bc1876
NS
7616@item -mint32
7617@opindex mint32
7618Make @code{int} data 32 bits by default.
74291a4b 7619
39bc1876
NS
7620@item -malign-300
7621@opindex malign-300
7622On the H8/300H and H8S, use the same alignment rules as for the H8/300.
7623The default for the H8/300H and H8S is to align longs and floats on 4
7624byte boundaries.
7625@option{-malign-300} causes them to be aligned on 2 byte boundaries.
7626This option has no effect on the H8/300.
7627@end table
f5a1b0d2 7628
39bc1876
NS
7629@node HPPA Options
7630@subsection HPPA Options
7631@cindex HPPA Options
a5c76ee6 7632
39bc1876 7633These @samp{-m} options are defined for the HPPA family of computers:
a5c76ee6 7634
39bc1876
NS
7635@table @gcctabopt
7636@item -march=@var{architecture-type}
7637@opindex march
7638Generate code for the specified architecture. The choices for
7639@var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
76401.1, and @samp{2.0} for PA 2.0 processors. Refer to
7641@file{/usr/lib/sched.models} on an HP-UX system to determine the proper
7642architecture option for your machine. Code compiled for lower numbered
7643architectures will run on higher numbered architectures, but not the
7644other way around.
7645
7646PA 2.0 support currently requires gas snapshot 19990413 or later. The
7647next release of binutils (current is 2.9.1) will probably contain PA 2.0
7648support.
7649
7650@item -mpa-risc-1-0
7651@itemx -mpa-risc-1-1
7652@itemx -mpa-risc-2-0
7653@opindex mpa-risc-1-0
7654@opindex mpa-risc-1-1
7655@opindex mpa-risc-2-0
7656Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
5a26b329 7657
39bc1876
NS
7658@item -mbig-switch
7659@opindex mbig-switch
7660Generate code suitable for big switch tables. Use this option only if
7661the assembler/linker complain about out of range branches within a switch
7662table.
efdba735 7663
39bc1876
NS
7664@item -mjump-in-delay
7665@opindex mjump-in-delay
7666Fill delay slots of function calls with unconditional jump instructions
7667by modifying the return pointer for the function call to be the target
7668of the conditional jump.
a5c76ee6 7669
39bc1876
NS
7670@item -mdisable-fpregs
7671@opindex mdisable-fpregs
7672Prevent floating point registers from being used in any manner. This is
7673necessary for compiling kernels which perform lazy context switching of
7674floating point registers. If you use this option and attempt to perform
7675floating point operations, the compiler will abort.
0a379b7a 7676
39bc1876
NS
7677@item -mdisable-indexing
7678@opindex mdisable-indexing
7679Prevent the compiler from using indexing address modes. This avoids some
7680rather obscure problems when compiling MIG generated code under MACH@.
f5a1b0d2 7681
39bc1876
NS
7682@item -mno-space-regs
7683@opindex mno-space-regs
7684Generate code that assumes the target has no space registers. This allows
7685GCC to generate faster indirect calls and use unscaled index address modes.
d2d42a91 7686
39bc1876 7687Such code is suitable for level 0 PA systems and kernels.
d2d42a91 7688
39bc1876
NS
7689@item -mfast-indirect-calls
7690@opindex mfast-indirect-calls
7691Generate code that assumes calls never cross space boundaries. This
7692allows GCC to emit code which performs faster indirect calls.
f08a3544 7693
39bc1876
NS
7694This option will not work in the presence of shared libraries or nested
7695functions.
f08a3544 7696
39bc1876
NS
7697@item -mlong-load-store
7698@opindex mlong-load-store
7699Generate 3-instruction load and store sequences as sometimes required by
7700the HP-UX 10 linker. This is equivalent to the @samp{+k} option to
7701the HP compilers.
61c85ff1 7702
39bc1876
NS
7703@item -mportable-runtime
7704@opindex mportable-runtime
7705Use the portable calling conventions proposed by HP for ELF systems.
61c85ff1 7706
39bc1876
NS
7707@item -mgas
7708@opindex mgas
7709Enable the use of assembler directives only GAS understands.
61c85ff1 7710
39bc1876
NS
7711@item -mschedule=@var{cpu-type}
7712@opindex mschedule
7713Schedule code according to the constraints for the machine type
7714@var{cpu-type}. The choices for @var{cpu-type} are @samp{700}
7715@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}. Refer
7716to @file{/usr/lib/sched.models} on an HP-UX system to determine the
7717proper scheduling option for your machine. The default scheduling is
7718@samp{8000}.
61c85ff1 7719
39bc1876
NS
7720@item -mlinker-opt
7721@opindex mlinker-opt
7722Enable the optimization pass in the HP-UX linker. Note this makes symbolic
7723debugging impossible. It also triggers a bug in the HP-UX 8 and HP-UX 9
7724linkers in which they give bogus error messages when linking some programs.
61c85ff1 7725
39bc1876
NS
7726@item -msoft-float
7727@opindex msoft-float
7728Generate output containing library calls for floating point.
7729@strong{Warning:} the requisite libraries are not available for all HPPA
7730targets. Normally the facilities of the machine's usual C compiler are
7731used, but this cannot be done directly in cross-compilation. You must make
7732your own arrangements to provide suitable library functions for
7733cross-compilation. The embedded target @samp{hppa1.1-*-pro}
7734does provide software floating point support.
31775d31 7735
39bc1876
NS
7736@option{-msoft-float} changes the calling convention in the output file;
7737therefore, it is only useful if you compile @emph{all} of a program with
7738this option. In particular, you need to compile @file{libgcc.a}, the
7739library that comes with GCC, with @option{-msoft-float} in order for
7740this to work.
61c85ff1 7741
39bc1876
NS
7742@item -msio
7743@opindex msio
7744Generate the predefine, @code{_SIO}, for server IO. The default is
7745@option{-mwsio}. This generates the predefines, @code{__hp9000s700},
7746@code{__hp9000s700__} and @code{_WSIO}, for workstation IO. These
7747options are available under HP-UX and HI-UX.
7748
7749@item -mgnu-ld
7750@opindex gnu-ld
7751Use GNU ld specific options. This passes @option{-shared} to ld when
7752building a shared library. It is the default when GCC is configured,
7753explicitly or implicitly, with the GNU linker. This option does not
7754have any affect on which ld is called, it only changes what parameters
7755are passed to that ld. The ld that is called is determined by the
7756@option{--with-ld} configure option, GCC's program search path, and
7757finally by the user's @env{PATH}. The linker used by GCC can be printed
7758using @samp{which `gcc -print-prog-name=ld`}.
48aec0bc 7759
39bc1876
NS
7760@item -mhp-ld
7761@opindex hp-ld
7762Use HP ld specific options. This passes @option{-b} to ld when building
7763a shared library and passes @option{+Accept TypeMismatch} to ld on all
7764links. It is the default when GCC is configured, explicitly or
7765implicitly, with the HP linker. This option does not have any affect on
7766which ld is called, it only changes what parameters are passed to that
7767ld. The ld that is called is determined by the @option{--with-ld}
7768configure option, GCC's program search path, and finally by the user's
7769@env{PATH}. The linker used by GCC can be printed using @samp{which
7770`gcc -print-prog-name=ld`}.
48aec0bc 7771
39bc1876
NS
7772@item -mfdpic
7773@opindex mfdpic
48aec0bc 7774
39bc1876
NS
7775Select the FDPIC ABI, that uses function descriptors to represent
7776pointers to functions. Without any PIC/PIE-related options, it
7777implies @option{-fPIE}. With @option{-fpic} or @option{-fpie}, it
7778assumes GOT entries and small data are within a 12-bit range from the
7779GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
7780are computed with 32 bits.
74291a4b 7781
39bc1876
NS
7782@item -minline-plt
7783@opindex minline-plt
7dac2f89 7784
39bc1876
NS
7785Enable inlining of PLT entries in function calls to functions that are
7786not known to bind locally. It has no effect without @option{-mfdpic}.
7787It's enabled by default if optimizing for speed and compiling for
7788shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
7789optimization option such as @option{-O3} or above is present in the
7790command line.
5a4b3afd 7791
39bc1876
NS
7792@item -mgprel-ro
7793@opindex mgprel-ro
5a4b3afd 7794
39bc1876
NS
7795Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
7796that is known to be in read-only sections. It's enabled by default,
7797except for @option{-fpic} or @option{-fpie}: even though it may help
7798make the global offset table smaller, it trades 1 instruction for 4.
7799With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
7800one of which may be shared by multiple symbols, and it avoids the need
7801for a GOT entry for the referenced symbol, so it's more likely to be a
7802win. If it is not, @option{-mno-gprel-ro} can be used to disable it.
a27fb29b 7803
39bc1876
NS
7804@item -multilib-library-pic
7805@opindex multilib-library-pic
a27fb29b 7806
39bc1876
NS
7807Link with the (library, not FD) pic libraries. It's implied by
7808@option{-mlibrary-pic}, as well as by @option{-fPIC} and
7809@option{-fpic} without @option{-mfdpic}. You should never have to use
7810it explicitly.
a27fb29b 7811
39bc1876
NS
7812@item -mlinked-fp
7813@opindex mlinked-fp
a27fb29b 7814
39bc1876
NS
7815Follow the EABI requirement of always creating a frame pointer whenever
7816a stack frame is allocated. This option is enabled by default and can
7817be disabled with @option{-mno-linked-fp}.
a27fb29b 7818
39bc1876
NS
7819@item -mlong-calls
7820@opindex mno-long-calls
7821Generate code that uses long call sequences. This ensures that a call
7822is always able to reach linker generated stubs. The default is to generate
7823long calls only when the distance from the call site to the beginning
7824of the function or translation unit, as the case may be, exceeds a
7825predefined limit set by the branch type being used. The limits for
7826normal calls are 7,600,000 and 240,000 bytes, respectively for the
7827PA 2.0 and PA 1.X architectures. Sibcalls are always limited at
7828240,000 bytes.
a27fb29b 7829
39bc1876
NS
7830Distances are measured from the beginning of functions when using the
7831@option{-ffunction-sections} option, or when using the @option{-mgas}
7832and @option{-mno-portable-runtime} options together under HP-UX with
7833the SOM linker.
7dac2f89 7834
39bc1876
NS
7835It is normally not desirable to use this option as it will degrade
7836performance. However, it may be useful in large applications,
7837particularly when partial linking is used to build the application.
74291a4b 7838
39bc1876
NS
7839The types of long calls used depends on the capabilities of the
7840assembler and linker, and the type of code being generated. The
7841impact on systems that support long absolute calls, and long pic
7842symbol-difference or pc-relative calls should be relatively small.
7843However, an indirect call is used on 32-bit ELF systems in pic code
7844and it is quite long.
74291a4b 7845
39bc1876
NS
7846@item -nolibdld
7847@opindex nolibdld
7848Suppress the generation of link options to search libdld.sl when the
7849@option{-static} option is specified on HP-UX 10 and later.
7850
7851@item -static
7852@opindex static
7853The HP-UX implementation of setlocale in libc has a dependency on
7854libdld.sl. There isn't an archive version of libdld.sl. Thus,
7855when the @option{-static} option is specified, special link options
7856are needed to resolve this dependency.
7857
7858On HP-UX 10 and later, the GCC driver adds the necessary options to
7859link with libdld.sl when the @option{-static} option is specified.
7860This causes the resulting binary to be dynamic. On the 64-bit port,
7861the linkers generate dynamic binaries by default in any case. The
7862@option{-nolibdld} option can be used to prevent the GCC driver from
7863adding these link options.
7864
7865@item -threads
7866@opindex threads
7867Add support for multithreading with the @dfn{dce thread} library
7868under HP-UX. This option sets flags for both the preprocessor and
7869linker.
7870@end table
7871
7872@node i386 and x86-64 Options
7873@subsection Intel 386 and AMD x86-64 Options
7874@cindex i386 Options
7875@cindex x86-64 Options
7876@cindex Intel 386 Options
7877@cindex AMD x86-64 Options
7878
7879These @samp{-m} options are defined for the i386 and x86-64 family of
7880computers:
7881
7882@table @gcctabopt
7883@item -mtune=@var{cpu-type}
7884@opindex mtune
7885Tune to @var{cpu-type} everything applicable about the generated code, except
7886for the ABI and the set of available instructions. The choices for
7887@var{cpu-type} are:
7888@table @emph
7889@item i386
7890Original Intel's i386 CPU.
7891@item i486
7892Intel's i486 CPU. (No scheduling is implemented for this chip.)
7893@item i586, pentium
7894Intel Pentium CPU with no MMX support.
7895@item pentium-mmx
7896Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
7897@item i686, pentiumpro
7898Intel PentiumPro CPU.
7899@item pentium2
7900Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
7901@item pentium3, pentium3m
7902Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
7903support.
7904@item pentium-m
7905Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
7906support. Used by Centrino notebooks.
7907@item pentium4, pentium4m
7908Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
7909@item prescott
7910Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
7911set support.
7912@item nocona
7913Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
7914SSE2 and SSE3 instruction set support.
7915@item k6
7916AMD K6 CPU with MMX instruction set support.
7917@item k6-2, k6-3
7918Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support.
7919@item athlon, athlon-tbird
7920AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions
7921support.
7922@item athlon-4, athlon-xp, athlon-mp
7923Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE
7924instruction set support.
7925@item k8, opteron, athlon64, athlon-fx
7926AMD K8 core based CPUs with x86-64 instruction set support. (This supersets
7927MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
7928@item winchip-c6
7929IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
7930set support.
7931@item winchip2
7932IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!
7933instruction set support.
7934@item c3
7935Via C3 CPU with MMX and 3dNOW! instruction set support. (No scheduling is
7936implemented for this chip.)
7937@item c3-2
7938Via C3-2 CPU with MMX and SSE instruction set support. (No scheduling is
7939implemented for this chip.)
7940@end table
7941
7942While picking a specific @var{cpu-type} will schedule things appropriately
7943for that particular chip, the compiler will not generate any code that
7944does not run on the i386 without the @option{-march=@var{cpu-type}} option
7945being used.
7946
7947@item -march=@var{cpu-type}
7948@opindex march
7949Generate instructions for the machine type @var{cpu-type}. The choices
7950for @var{cpu-type} are the same as for @option{-mtune}. Moreover,
7951specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.
74291a4b 7952
39bc1876
NS
7953@item -mcpu=@var{cpu-type}
7954@opindex mcpu
7955A deprecated synonym for @option{-mtune}.
3398f47f 7956
39bc1876
NS
7957@item -m386
7958@itemx -m486
7959@itemx -mpentium
7960@itemx -mpentiumpro
7961@opindex m386
7962@opindex m486
7963@opindex mpentium
7964@opindex mpentiumpro
7965These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486},
7966@option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively.
7967These synonyms are deprecated.
74291a4b 7968
39bc1876
NS
7969@item -mfpmath=@var{unit}
7970@opindex march
7971Generate floating point arithmetics for selected unit @var{unit}. The choices
7972for @var{unit} are:
2d2a50c3 7973
39bc1876
NS
7974@table @samp
7975@item 387
7976Use the standard 387 floating point coprocessor present majority of chips and
7977emulated otherwise. Code compiled with this option will run almost everywhere.
7978The temporary results are computed in 80bit precision instead of precision
7979specified by the type resulting in slightly different results compared to most
7980of other chips. See @option{-ffloat-store} for more detailed description.
74291a4b 7981
39bc1876 7982This is the default choice for i386 compiler.
74291a4b 7983
39bc1876
NS
7984@item sse
7985Use scalar floating point instructions present in the SSE instruction set.
7986This instruction set is supported by Pentium3 and newer chips, in the AMD line
7987by Athlon-4, Athlon-xp and Athlon-mp chips. The earlier version of SSE
7988instruction set supports only single precision arithmetics, thus the double and
7989extended precision arithmetics is still done using 387. Later version, present
7990only in Pentium4 and the future AMD x86-64 chips supports double precision
7991arithmetics too.
a27fb29b 7992
39bc1876
NS
7993For i387 you need to use @option{-march=@var{cpu-type}}, @option{-msse} or
7994@option{-msse2} switches to enable SSE extensions and make this option
7995effective. For x86-64 compiler, these extensions are enabled by default.
3398f47f 7996
39bc1876
NS
7997The resulting code should be considerably faster in the majority of cases and avoid
7998the numerical instability problems of 387 code, but may break some existing
7999code that expects temporaries to be 80bit.
cd3f11a6 8000
39bc1876 8001This is the default choice for the x86-64 compiler.
74291a4b 8002
39bc1876
NS
8003@item sse,387
8004Attempt to utilize both instruction sets at once. This effectively double the
8005amount of available registers and on chips with separate execution units for
8006387 and SSE the execution resources too. Use this option with care, as it is
8007still experimental, because the GCC register allocator does not model separate
8008functional units well resulting in instable performance.
8009@end table
ee692410 8010
39bc1876
NS
8011@item -masm=@var{dialect}
8012@opindex masm=@var{dialect}
8013Output asm instructions using selected @var{dialect}. Supported choices are
8014@samp{intel} or @samp{att} (the default one).
ee692410 8015
39bc1876
NS
8016@item -mieee-fp
8017@itemx -mno-ieee-fp
8018@opindex mieee-fp
8019@opindex mno-ieee-fp
8020Control whether or not the compiler uses IEEE floating point
8021comparisons. These handle correctly the case where the result of a
8022comparison is unordered.
ee692410 8023
39bc1876
NS
8024@item -msoft-float
8025@opindex msoft-float
8026Generate output containing library calls for floating point.
8027@strong{Warning:} the requisite libraries are not part of GCC@.
8028Normally the facilities of the machine's usual C compiler are used, but
8029this can't be done directly in cross-compilation. You must make your
8030own arrangements to provide suitable library functions for
8031cross-compilation.
ee692410 8032
39bc1876
NS
8033On machines where a function returns floating point results in the 80387
8034register stack, some floating point opcodes may be emitted even if
8035@option{-msoft-float} is used.
ee692410 8036
39bc1876
NS
8037@item -mno-fp-ret-in-387
8038@opindex mno-fp-ret-in-387
8039Do not use the FPU registers for return values of functions.
ee692410 8040
39bc1876
NS
8041The usual calling convention has functions return values of types
8042@code{float} and @code{double} in an FPU register, even if there
8043is no FPU@. The idea is that the operating system should emulate
8044an FPU@.
5a4b3afd 8045
39bc1876
NS
8046The option @option{-mno-fp-ret-in-387} causes such values to be returned
8047in ordinary CPU registers instead.
5a4b3afd 8048
39bc1876
NS
8049@item -mno-fancy-math-387
8050@opindex mno-fancy-math-387
8051Some 387 emulators do not support the @code{sin}, @code{cos} and
8052@code{sqrt} instructions for the 387. Specify this option to avoid
8053generating those instructions. This option is the default on FreeBSD,
8054OpenBSD and NetBSD@. This option is overridden when @option{-march}
8055indicates that the target cpu will always have an FPU and so the
8056instruction will not need emulation. As of revision 2.6.1, these
8057instructions are not generated unless you also use the
8058@option{-funsafe-math-optimizations} switch.
5a4b3afd 8059
39bc1876
NS
8060@item -malign-double
8061@itemx -mno-align-double
8062@opindex malign-double
8063@opindex mno-align-double
8064Control whether GCC aligns @code{double}, @code{long double}, and
8065@code{long long} variables on a two word boundary or a one word
8066boundary. Aligning @code{double} variables on a two word boundary will
8067produce code that runs somewhat faster on a @samp{Pentium} at the
8068expense of more memory.
5a4b3afd 8069
39bc1876
NS
8070@strong{Warning:} if you use the @option{-malign-double} switch,
8071structures containing the above types will be aligned differently than
8072the published application binary interface specifications for the 386
8073and will not be binary compatible with structures in code compiled
8074without that switch.
5a4b3afd 8075
39bc1876
NS
8076@item -m96bit-long-double
8077@itemx -m128bit-long-double
8078@opindex m96bit-long-double
8079@opindex m128bit-long-double
8080These switches control the size of @code{long double} type. The i386
8081application binary interface specifies the size to be 96 bits,
8082so @option{-m96bit-long-double} is the default in 32 bit mode.
5a4b3afd 8083
39bc1876
NS
8084Modern architectures (Pentium and newer) would prefer @code{long double}
8085to be aligned to an 8 or 16 byte boundary. In arrays or structures
8086conforming to the ABI, this would not be possible. So specifying a
8087@option{-m128bit-long-double} will align @code{long double}
8088to a 16 byte boundary by padding the @code{long double} with an additional
808932 bit zero.
5a4b3afd 8090
39bc1876
NS
8091In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
8092its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
5a4b3afd 8093
39bc1876
NS
8094Notice that neither of these options enable any extra precision over the x87
8095standard of 80 bits for a @code{long double}.
5a4b3afd 8096
39bc1876
NS
8097@strong{Warning:} if you override the default value for your target ABI, the
8098structures and arrays containing @code{long double} variables will change
8099their size as well as function calling convention for function taking
8100@code{long double} will be modified. Hence they will not be binary
8101compatible with arrays or structures in code compiled without that switch.
5a4b3afd 8102
5a4b3afd 8103
39bc1876
NS
8104@item -msvr3-shlib
8105@itemx -mno-svr3-shlib
8106@opindex msvr3-shlib
8107@opindex mno-svr3-shlib
8108Control whether GCC places uninitialized local variables into the
8109@code{bss} or @code{data} segments. @option{-msvr3-shlib} places them
8110into @code{bss}. These options are meaningful only on System V Release 3.
5a4b3afd 8111
39bc1876
NS
8112@item -mrtd
8113@opindex mrtd
8114Use a different function-calling convention, in which functions that
8115take a fixed number of arguments return with the @code{ret} @var{num}
8116instruction, which pops their arguments while returning. This saves one
8117instruction in the caller since there is no need to pop the arguments
8118there.
5a4b3afd 8119
39bc1876
NS
8120You can specify that an individual function is called with this calling
8121sequence with the function attribute @samp{stdcall}. You can also
8122override the @option{-mrtd} option by using the function attribute
8123@samp{cdecl}. @xref{Function Attributes}.
74291a4b 8124
39bc1876
NS
8125@strong{Warning:} this calling convention is incompatible with the one
8126normally used on Unix, so you cannot use it if you need to call
8127libraries compiled with the Unix compiler.
74291a4b 8128
39bc1876
NS
8129Also, you must provide function prototypes for all functions that
8130take variable numbers of arguments (including @code{printf});
8131otherwise incorrect code will be generated for calls to those
8132functions.
02f52e19 8133
39bc1876
NS
8134In addition, seriously incorrect code will result if you call a
8135function with too many arguments. (Normally, extra arguments are
8136harmlessly ignored.)
1cf959cb 8137
39bc1876
NS
8138@item -mregparm=@var{num}
8139@opindex mregparm
8140Control how many registers are used to pass integer arguments. By
8141default, no registers are used to pass arguments, and at most 3
8142registers can be used. You can control this behavior for a specific
8143function by using the function attribute @samp{regparm}.
8144@xref{Function Attributes}.
1cf959cb 8145
39bc1876
NS
8146@strong{Warning:} if you use this switch, and
8147@var{num} is nonzero, then you must build all modules with the same
8148value, including any libraries. This includes the system libraries and
8149startup modules.
5a4b3afd 8150
39bc1876
NS
8151@item -mpreferred-stack-boundary=@var{num}
8152@opindex mpreferred-stack-boundary
8153Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
8154byte boundary. If @option{-mpreferred-stack-boundary} is not specified,
8155the default is 4 (16 bytes or 128 bits), except when optimizing for code
8156size (@option{-Os}), in which case the default is the minimum correct
8157alignment (4 bytes for x86, and 8 bytes for x86-64).
5a4b3afd 8158
39bc1876
NS
8159On Pentium and PentiumPro, @code{double} and @code{long double} values
8160should be aligned to an 8 byte boundary (see @option{-malign-double}) or
8161suffer significant run time performance penalties. On Pentium III, the
8162Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
8163penalties if it is not 16 byte aligned.
5a4b3afd 8164
39bc1876
NS
8165To ensure proper alignment of this values on the stack, the stack boundary
8166must be as aligned as that required by any value stored on the stack.
8167Further, every function must be generated such that it keeps the stack
8168aligned. Thus calling a function compiled with a higher preferred
8169stack boundary from a function compiled with a lower preferred stack
8170boundary will most likely misalign the stack. It is recommended that
8171libraries that use callbacks always use the default setting.
5a4b3afd 8172
39bc1876
NS
8173This extra alignment does consume extra stack space, and generally
8174increases code size. Code that is sensitive to stack space usage, such
8175as embedded systems and operating system kernels, may want to reduce the
8176preferred alignment to @option{-mpreferred-stack-boundary=2}.
5a4b3afd 8177
39bc1876
NS
8178@item -mmmx
8179@itemx -mno-mmx
8180@item -msse
8181@itemx -mno-sse
8182@item -msse2
8183@itemx -mno-sse2
8184@item -msse3
8185@itemx -mno-sse3
8186@item -m3dnow
8187@itemx -mno-3dnow
8188@opindex mmmx
8189@opindex mno-mmx
8190@opindex msse
8191@opindex mno-sse
8192@opindex m3dnow
8193@opindex mno-3dnow
8194These switches enable or disable the use of built-in functions that allow
8195direct access to the MMX, SSE, SSE2, SSE3 and 3Dnow extensions of the
8196instruction set.
74291a4b 8197
39bc1876
NS
8198@xref{X86 Built-in Functions}, for details of the functions enabled
8199and disabled by these switches.
74291a4b 8200
39bc1876
NS
8201To have SSE/SSE2 instructions generated automatically from floating-point
8202code, see @option{-mfpmath=sse}.
74291a4b 8203
39bc1876
NS
8204@item -mpush-args
8205@itemx -mno-push-args
8206@opindex mpush-args
8207@opindex mno-push-args
8208Use PUSH operations to store outgoing parameters. This method is shorter
8209and usually equally fast as method using SUB/MOV operations and is enabled
8210by default. In some cases disabling it may improve performance because of
8211improved scheduling and reduced dependencies.
74291a4b 8212
39bc1876
NS
8213@item -maccumulate-outgoing-args
8214@opindex maccumulate-outgoing-args
8215If enabled, the maximum amount of space required for outgoing arguments will be
8216computed in the function prologue. This is faster on most modern CPUs
8217because of reduced dependencies, improved scheduling and reduced stack usage
8218when preferred stack boundary is not equal to 2. The drawback is a notable
8219increase in code size. This switch implies @option{-mno-push-args}.
63357d93 8220
39bc1876
NS
8221@item -mthreads
8222@opindex mthreads
8223Support thread-safe exception handling on @samp{Mingw32}. Code that relies
8224on thread-safe exception handling must compile and link all code with the
8225@option{-mthreads} option. When compiling, @option{-mthreads} defines
8226@option{-D_MT}; when linking, it links in a special thread helper library
8227@option{-lmingwthrd} which cleans up per thread exception handling data.
5ef1a99d 8228
39bc1876
NS
8229@item -mno-align-stringops
8230@opindex mno-align-stringops
8231Do not align destination of inlined string operations. This switch reduces
8232code size and improves performance in case the destination is already aligned,
8233but GCC doesn't know about it.
46490403 8234
39bc1876
NS
8235@item -minline-all-stringops
8236@opindex minline-all-stringops
8237By default GCC inlines string operations only when destination is known to be
8238aligned at least to 4 byte boundary. This enables more inlining, increase code
8239size, but may improve performance of code that depends on fast memcpy, strlen
8240and memset for short lengths.
c235ddf2 8241
39bc1876
NS
8242@item -momit-leaf-frame-pointer
8243@opindex momit-leaf-frame-pointer
8244Don't keep the frame pointer in a register for leaf functions. This
8245avoids the instructions to save, set up and restore frame pointers and
8246makes an extra register available in leaf functions. The option
8247@option{-fomit-frame-pointer} removes the frame pointer for all functions
8248which might make debugging harder.
c235ddf2 8249
39bc1876
NS
8250@item -mtls-direct-seg-refs
8251@itemx -mno-tls-direct-seg-refs
8252@opindex mtls-direct-seg-refs
8253Controls whether TLS variables may be accessed with offsets from the
8254TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
8255or whether the thread base pointer must be added. Whether or not this
8256is legal depends on the operating system, and whether it maps the
8257segment to cover the entire TLS area.
beadc644 8258
39bc1876
NS
8259For systems that use GNU libc, the default is on.
8260@end table
af34e51e 8261
39bc1876
NS
8262These @samp{-m} switches are supported in addition to the above
8263on AMD x86-64 processors in 64-bit environments.
50d32cf6 8264
39bc1876
NS
8265@table @gcctabopt
8266@item -m32
8267@itemx -m64
8268@opindex m32
8269@opindex m64
8270Generate code for a 32-bit or 64-bit environment.
8271The 32-bit environment sets int, long and pointer to 32 bits and
8272generates code that runs on any i386 system.
8273The 64-bit environment sets int to 32 bits and long and pointer
8274to 64 bits and generates code for AMD's x86-64 architecture.
50d32cf6 8275
39bc1876
NS
8276@item -mno-red-zone
8277@opindex no-red-zone
8278Do not use a so called red zone for x86-64 code. The red zone is mandated
8279by the x86-64 ABI, it is a 128-byte area beyond the location of the
8280stack pointer that will not be modified by signal or interrupt handlers
8281and therefore can be used for temporary data without adjusting the stack
8282pointer. The flag @option{-mno-red-zone} disables this red zone.
dc884a86 8283
39bc1876
NS
8284@item -mcmodel=small
8285@opindex mcmodel=small
8286Generate code for the small code model: the program and its symbols must
8287be linked in the lower 2 GB of the address space. Pointers are 64 bits.
8288Programs can be statically or dynamically linked. This is the default
8289code model.
dc884a86 8290
39bc1876
NS
8291@item -mcmodel=kernel
8292@opindex mcmodel=kernel
8293Generate code for the kernel code model. The kernel runs in the
8294negative 2 GB of the address space.
8295This model has to be used for Linux kernel code.
8296
8297@item -mcmodel=medium
8298@opindex mcmodel=medium
8299Generate code for the medium model: The program is linked in the lower 2
8300GB of the address space but symbols can be located anywhere in the
8301address space. Programs can be statically or dynamically linked, but
8302building of shared libraries are not supported with the medium model.
8303
8304@item -mcmodel=large
8305@opindex mcmodel=large
8306Generate code for the large model: This model makes no assumptions
8307about addresses and sizes of sections. Currently GCC does not implement
8308this model.
74291a4b
MM
8309@end table
8310
39bc1876
NS
8311@node IA-64 Options
8312@subsection IA-64 Options
8313@cindex IA-64 Options
74291a4b 8314
39bc1876 8315These are the @samp{-m} options defined for the Intel IA-64 architecture.
74291a4b 8316
2642624b 8317@table @gcctabopt
39bc1876
NS
8318@item -mbig-endian
8319@opindex mbig-endian
8320Generate code for a big endian target. This is the default for HP-UX@.
6f670fde 8321
39bc1876
NS
8322@item -mlittle-endian
8323@opindex mlittle-endian
8324Generate code for a little endian target. This is the default for AIX5
8325and GNU/Linux.
a9f3e1a4 8326
39bc1876
NS
8327@item -mgnu-as
8328@itemx -mno-gnu-as
8329@opindex mgnu-as
8330@opindex mno-gnu-as
8331Generate (or don't) code for the GNU assembler. This is the default.
8332@c Also, this is the default if the configure option @option{--with-gnu-as}
8333@c is used.
9d913bbf 8334
39bc1876
NS
8335@item -mgnu-ld
8336@itemx -mno-gnu-ld
8337@opindex mgnu-ld
8338@opindex mno-gnu-ld
8339Generate (or don't) code for the GNU linker. This is the default.
8340@c Also, this is the default if the configure option @option{--with-gnu-ld}
8341@c is used.
a9f3e1a4 8342
39bc1876
NS
8343@item -mno-pic
8344@opindex mno-pic
8345Generate code that does not use a global pointer register. The result
8346is not position independent code, and violates the IA-64 ABI@.
74291a4b 8347
39bc1876
NS
8348@item -mvolatile-asm-stop
8349@itemx -mno-volatile-asm-stop
8350@opindex mvolatile-asm-stop
8351@opindex mno-volatile-asm-stop
8352Generate (or don't) a stop bit immediately before and after volatile asm
8353statements.
965f5423 8354
39bc1876
NS
8355@item -mb-step
8356@opindex mb-step
8357Generate code that works around Itanium B step errata.
965f5423 8358
39bc1876
NS
8359@item -mregister-names
8360@itemx -mno-register-names
8361@opindex mregister-names
8362@opindex mno-register-names
8363Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
8364the stacked registers. This may make assembler output more readable.
965f5423 8365
39bc1876
NS
8366@item -mno-sdata
8367@itemx -msdata
8368@opindex mno-sdata
8369@opindex msdata
8370Disable (or enable) optimizations that use the small data section. This may
8371be useful for working around optimizer bugs.
8372
8373@item -mconstant-gp
8374@opindex mconstant-gp
8375Generate code that uses a single constant global pointer value. This is
8376useful when compiling kernel code.
8377
8378@item -mauto-pic
8379@opindex mauto-pic
8380Generate code that is self-relocatable. This implies @option{-mconstant-gp}.
8381This is useful when compiling firmware code.
8382
8383@item -minline-float-divide-min-latency
8384@opindex minline-float-divide-min-latency
8385Generate code for inline divides of floating point values
8386using the minimum latency algorithm.
965f5423 8387
39bc1876
NS
8388@item -minline-float-divide-max-throughput
8389@opindex minline-float-divide-max-throughput
8390Generate code for inline divides of floating point values
8391using the maximum throughput algorithm.
965f5423 8392
39bc1876
NS
8393@item -minline-int-divide-min-latency
8394@opindex minline-int-divide-min-latency
8395Generate code for inline divides of integer values
8396using the minimum latency algorithm.
965f5423 8397
39bc1876
NS
8398@item -minline-int-divide-max-throughput
8399@opindex minline-int-divide-max-throughput
8400Generate code for inline divides of integer values
8401using the maximum throughput algorithm.
965f5423 8402
39bc1876
NS
8403@item -mno-dwarf2-asm
8404@itemx -mdwarf2-asm
8405@opindex mno-dwarf2-asm
8406@opindex mdwarf2-asm
8407Don't (or do) generate assembler code for the DWARF2 line number debugging
8408info. This may be useful when not using the GNU assembler.
965f5423 8409
39bc1876
NS
8410@item -mfixed-range=@var{register-range}
8411@opindex mfixed-range
8412Generate code treating the given register range as fixed registers.
8413A fixed register is one that the register allocator can not use. This is
8414useful when compiling kernel code. A register range is specified as
8415two registers separated by a dash. Multiple register ranges can be
8416specified separated by a comma.
04e149ab 8417
39bc1876
NS
8418@item -mearly-stop-bits
8419@itemx -mno-early-stop-bits
8420@opindex mearly-stop-bits
8421@opindex mno-early-stop-bits
8422Allow stop bits to be placed earlier than immediately preceding the
8423instruction that triggered the stop bit. This can improve instruction
8424scheduling, but does not always do so.
8425@end table
74291a4b 8426
39bc1876
NS
8427@node M32R/D Options
8428@subsection M32R/D Options
8429@cindex M32R/D options
74291a4b 8430
39bc1876 8431These @option{-m} options are defined for Renesas M32R/D architectures:
74291a4b 8432
39bc1876
NS
8433@table @gcctabopt
8434@item -m32r2
8435@opindex m32r2
8436Generate code for the M32R/2@.
74291a4b 8437
39bc1876
NS
8438@item -m32rx
8439@opindex m32rx
8440Generate code for the M32R/X@.
74291a4b 8441
39bc1876
NS
8442@item -m32r
8443@opindex m32r
8444Generate code for the M32R@. This is the default.
74291a4b 8445
39bc1876
NS
8446@item -mmodel=small
8447@opindex mmodel=small
8448Assume all objects live in the lower 16MB of memory (so that their addresses
8449can be loaded with the @code{ld24} instruction), and assume all subroutines
8450are reachable with the @code{bl} instruction.
8451This is the default.
74291a4b 8452
39bc1876
NS
8453The addressability of a particular object can be set with the
8454@code{model} attribute.
74291a4b 8455
39bc1876
NS
8456@item -mmodel=medium
8457@opindex mmodel=medium
8458Assume objects may be anywhere in the 32-bit address space (the compiler
8459will generate @code{seth/add3} instructions to load their addresses), and
8460assume all subroutines are reachable with the @code{bl} instruction.
194734e9 8461
39bc1876
NS
8462@item -mmodel=large
8463@opindex mmodel=large
8464Assume objects may be anywhere in the 32-bit address space (the compiler
8465will generate @code{seth/add3} instructions to load their addresses), and
8466assume subroutines may not be reachable with the @code{bl} instruction
8467(the compiler will generate the much slower @code{seth/add3/jl}
8468instruction sequence).
a5f3dd66 8469
39bc1876
NS
8470@item -msdata=none
8471@opindex msdata=none
8472Disable use of the small data area. Variables will be put into
8473one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
8474@code{section} attribute has been specified).
8475This is the default.
a5f3dd66 8476
39bc1876
NS
8477The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
8478Objects may be explicitly put in the small data area with the
8479@code{section} attribute using one of these sections.
daf2f129 8480
39bc1876
NS
8481@item -msdata=sdata
8482@opindex msdata=sdata
8483Put small global and static data in the small data area, but do not
8484generate special code to reference them.
2b589241 8485
39bc1876
NS
8486@item -msdata=use
8487@opindex msdata=use
8488Put small global and static data in the small data area, and generate
8489special instructions to reference them.
2b589241 8490
39bc1876
NS
8491@item -G @var{num}
8492@opindex G
8493@cindex smaller data references
8494Put global and static objects less than or equal to @var{num} bytes
8495into the small data or bss sections instead of the normal data or bss
8496sections. The default value of @var{num} is 8.
8497The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
8498for this option to have any effect.
74291a4b 8499
39bc1876
NS
8500All modules should be compiled with the same @option{-G @var{num}} value.
8501Compiling with different values of @var{num} may or may not work; if it
8502doesn't the linker will give an error message---incorrect code will not be
8503generated.
74291a4b 8504
39bc1876
NS
8505@item -mdebug
8506@opindex mdebug
8507Makes the M32R specific code in the compiler display some statistics
8508that might help in debugging programs.
74291a4b 8509
39bc1876
NS
8510@item -malign-loops
8511@opindex malign-loops
8512Align all loops to a 32-byte boundary.
74291a4b 8513
39bc1876
NS
8514@item -mno-align-loops
8515@opindex mno-align-loops
8516Do not enforce a 32-byte alignment for loops. This is the default.
74291a4b 8517
39bc1876
NS
8518@item -missue-rate=@var{number}
8519@opindex missue-rate=@var{number}
8520Issue @var{number} instructions per cycle. @var{number} can only be 1
8521or 2.
74291a4b 8522
39bc1876
NS
8523@item -mbranch-cost=@var{number}
8524@opindex mbranch-cost=@var{number}
8525@var{number} can only be 1 or 2. If it is 1 then branches will be
8526preferred over conditional code, if it is 2, then the opposite will
8527apply.
74291a4b 8528
39bc1876
NS
8529@item -mflush-trap=@var{number}
8530@opindex mflush-trap=@var{number}
8531Specifies the trap number to use to flush the cache. The default is
853212. Valid numbers are between 0 and 15 inclusive.
74291a4b 8533
39bc1876
NS
8534@item -mno-flush-trap
8535@opindex mno-flush-trap
8536Specifies that the cache cannot be flushed by using a trap.
74291a4b 8537
39bc1876
NS
8538@item -mflush-func=@var{name}
8539@opindex mflush-func=@var{name}
8540Specifies the name of the operating system function to call to flush
8541the cache. The default is @emph{_flush_cache}, but a function call
8542will only be used if a trap is not available.
3af4bd89 8543
39bc1876
NS
8544@item -mno-flush-func
8545@opindex mno-flush-func
8546Indicates that there is no OS function for flushing the cache.
3af4bd89 8547
39bc1876 8548@end table
3af4bd89 8549
39bc1876
NS
8550@node M680x0 Options
8551@subsection M680x0 Options
8552@cindex M680x0 options
f22a97d2 8553
39bc1876
NS
8554These are the @samp{-m} options defined for the 68000 series. The default
8555values for these options depends on which style of 68000 was selected when
8556the compiler was configured; the defaults for the most common choices are
8557given below.
1255c85c 8558
39bc1876
NS
8559@table @gcctabopt
8560@item -m68000
8561@itemx -mc68000
8562@opindex m68000
8563@opindex mc68000
8564Generate output for a 68000. This is the default
8565when the compiler is configured for 68000-based systems.
1255c85c 8566
39bc1876
NS
8567Use this option for microcontrollers with a 68000 or EC000 core,
8568including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
7eafc329 8569
39bc1876
NS
8570@item -m68020
8571@itemx -mc68020
8572@opindex m68020
8573@opindex mc68020
8574Generate output for a 68020. This is the default
8575when the compiler is configured for 68020-based systems.
f73ad30e 8576
39bc1876
NS
8577@item -m68881
8578@opindex m68881
8579Generate output containing 68881 instructions for floating point.
8580This is the default for most 68020 systems unless @option{--nfp} was
8581specified when the compiler was configured.
f73ad30e 8582
39bc1876
NS
8583@item -m68030
8584@opindex m68030
8585Generate output for a 68030. This is the default when the compiler is
8586configured for 68030-based systems.
79f05c19 8587
39bc1876
NS
8588@item -m68040
8589@opindex m68040
8590Generate output for a 68040. This is the default when the compiler is
8591configured for 68040-based systems.
79f05c19 8592
39bc1876
NS
8593This option inhibits the use of 68881/68882 instructions that have to be
8594emulated by software on the 68040. Use this option if your 68040 does not
8595have code to emulate those instructions.
762e166b 8596
39bc1876
NS
8597@item -m68060
8598@opindex m68060
8599Generate output for a 68060. This is the default when the compiler is
8600configured for 68060-based systems.
74dc3e94 8601
39bc1876
NS
8602This option inhibits the use of 68020 and 68881/68882 instructions that
8603have to be emulated by software on the 68060. Use this option if your 68060
8604does not have code to emulate those instructions.
74dc3e94 8605
39bc1876
NS
8606@item -mcpu32
8607@opindex mcpu32
8608Generate output for a CPU32. This is the default
8609when the compiler is configured for CPU32-based systems.
3af4bd89 8610
39bc1876
NS
8611Use this option for microcontrollers with a
8612CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
861368336, 68340, 68341, 68349 and 68360.
14f73b5a 8614
39bc1876
NS
8615@item -m5200
8616@opindex m5200
8617Generate output for a 520X ``coldfire'' family cpu. This is the default
8618when the compiler is configured for 520X-based systems.
14f73b5a 8619
39bc1876
NS
8620Use this option for microcontroller with a 5200 core, including
8621the MCF5202, MCF5203, MCF5204 and MCF5202.
a7701995 8622
a7701995 8623
39bc1876
NS
8624@item -m68020-40
8625@opindex m68020-40
8626Generate output for a 68040, without using any of the new instructions.
8627This results in code which can run relatively efficiently on either a
862868020/68881 or a 68030 or a 68040. The generated code does use the
862968881 instructions that are emulated on the 68040.
a7701995 8630
39bc1876
NS
8631@item -m68020-60
8632@opindex m68020-60
8633Generate output for a 68060, without using any of the new instructions.
8634This results in code which can run relatively efficiently on either a
863568020/68881 or a 68030 or a 68040. The generated code does use the
863668881 instructions that are emulated on the 68060.
a7701995 8637
39bc1876
NS
8638@item -msoft-float
8639@opindex msoft-float
8640Generate output containing library calls for floating point.
8641@strong{Warning:} the requisite libraries are not available for all m68k
8642targets. Normally the facilities of the machine's usual C compiler are
8643used, but this can't be done directly in cross-compilation. You must
8644make your own arrangements to provide suitable library functions for
8645cross-compilation. The embedded targets @samp{m68k-*-aout} and
8646@samp{m68k-*-coff} do provide software floating point support.
14f73b5a 8647
39bc1876
NS
8648@item -mshort
8649@opindex mshort
8650Consider type @code{int} to be 16 bits wide, like @code{short int}.
8651Additionally, parameters passed on the stack are also aligned to a
865216-bit boundary even on targets whose API mandates promotion to 32-bit.
74291a4b 8653
39bc1876
NS
8654@item -mnobitfield
8655@opindex mnobitfield
8656Do not use the bit-field instructions. The @option{-m68000}, @option{-mcpu32}
8657and @option{-m5200} options imply @w{@option{-mnobitfield}}.
74291a4b 8658
39bc1876
NS
8659@item -mbitfield
8660@opindex mbitfield
8661Do use the bit-field instructions. The @option{-m68020} option implies
8662@option{-mbitfield}. This is the default if you use a configuration
8663designed for a 68020.
8664
8665@item -mrtd
8666@opindex mrtd
8667Use a different function-calling convention, in which functions
8668that take a fixed number of arguments return with the @code{rtd}
8669instruction, which pops their arguments while returning. This
8670saves one instruction in the caller since there is no need to pop
8671the arguments there.
ea3bfbfe 8672
39bc1876
NS
8673This calling convention is incompatible with the one normally
8674used on Unix, so you cannot use it if you need to call libraries
8675compiled with the Unix compiler.
74291a4b 8676
39bc1876
NS
8677Also, you must provide function prototypes for all functions that
8678take variable numbers of arguments (including @code{printf});
8679otherwise incorrect code will be generated for calls to those
8680functions.
861bb6c1 8681
39bc1876
NS
8682In addition, seriously incorrect code will result if you call a
8683function with too many arguments. (Normally, extra arguments are
8684harmlessly ignored.)
74291a4b 8685
39bc1876
NS
8686The @code{rtd} instruction is supported by the 68010, 68020, 68030,
868768040, 68060 and CPU32 processors, but not by the 68000 or 5200.
74291a4b 8688
39bc1876
NS
8689@item -malign-int
8690@itemx -mno-align-int
8691@opindex malign-int
8692@opindex mno-align-int
8693Control whether GCC aligns @code{int}, @code{long}, @code{long long},
8694@code{float}, @code{double}, and @code{long double} variables on a 32-bit
8695boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
8696Aligning variables on 32-bit boundaries produces code that runs somewhat
8697faster on processors with 32-bit busses at the expense of more memory.
74291a4b 8698
39bc1876
NS
8699@strong{Warning:} if you use the @option{-malign-int} switch, GCC will
8700align structures containing the above types differently than
8701most published application binary interface specifications for the m68k.
74291a4b 8702
39bc1876
NS
8703@item -mpcrel
8704@opindex mpcrel
8705Use the pc-relative addressing mode of the 68000 directly, instead of
8706using a global offset table. At present, this option implies @option{-fpic},
8707allowing at most a 16-bit offset for pc-relative addressing. @option{-fPIC} is
8708not presently supported with @option{-mpcrel}, though this could be supported for
870968020 and higher processors.
74291a4b 8710
39bc1876
NS
8711@item -mno-strict-align
8712@itemx -mstrict-align
8713@opindex mno-strict-align
8714@opindex mstrict-align
8715Do not (do) assume that unaligned memory references will be handled by
8716the system.
74291a4b 8717
39bc1876
NS
8718@item -msep-data
8719Generate code that allows the data segment to be located in a different
8720area of memory from the text segment. This allows for execute in place in
8721an environment without virtual memory management. This option implies -fPIC.
74291a4b 8722
39bc1876
NS
8723@item -mno-sep-data
8724Generate code that assumes that the data segment follows the text segment.
8725This is the default.
74291a4b 8726
39bc1876
NS
8727@item -mid-shared-library
8728Generate code that supports shared libraries via the library ID method.
8729This allows for execute in place and shared libraries in an environment
8730without virtual memory management. This option implies -fPIC.
74291a4b 8731
39bc1876
NS
8732@item -mno-id-shared-library
8733Generate code that doesn't assume ID based shared libraries are being used.
8734This is the default.
74291a4b 8735
39bc1876
NS
8736@item -mshared-library-id=n
8737Specified the identification number of the ID based shared library being
8738compiled. Specifying a value of 0 will generate more compact code, specifying
8739other values will force the allocation of that number to the current
8740library but is no more space or time efficient than omitting this option.
74291a4b 8741
39bc1876 8742@end table
74291a4b 8743
39bc1876
NS
8744@node M68hc1x Options
8745@subsection M68hc1x Options
8746@cindex M68hc1x options
74291a4b 8747
39bc1876
NS
8748These are the @samp{-m} options defined for the 68hc11 and 68hc12
8749microcontrollers. The default values for these options depends on
8750which style of microcontroller was selected when the compiler was configured;
8751the defaults for the most common choices are given below.
c219e1da 8752
39bc1876
NS
8753@table @gcctabopt
8754@item -m6811
8755@itemx -m68hc11
8756@opindex m6811
8757@opindex m68hc11
8758Generate output for a 68HC11. This is the default
8759when the compiler is configured for 68HC11-based systems.
c5d3d49b 8760
39bc1876
NS
8761@item -m6812
8762@itemx -m68hc12
8763@opindex m6812
8764@opindex m68hc12
8765Generate output for a 68HC12. This is the default
8766when the compiler is configured for 68HC12-based systems.
c5d3d49b 8767
39bc1876
NS
8768@item -m68S12
8769@itemx -m68hcs12
8770@opindex m68S12
8771@opindex m68hcs12
8772Generate output for a 68HCS12.
c5d3d49b 8773
39bc1876
NS
8774@item -mauto-incdec
8775@opindex mauto-incdec
8776Enable the use of 68HC12 pre and post auto-increment and auto-decrement
8777addressing modes.
34208acf 8778
39bc1876
NS
8779@item -minmax
8780@itemx -nominmax
8781@opindex minmax
8782@opindex mnominmax
8783Enable the use of 68HC12 min and max instructions.
34208acf 8784
39bc1876
NS
8785@item -mlong-calls
8786@itemx -mno-long-calls
8787@opindex mlong-calls
8788@opindex mno-long-calls
8789Treat all calls as being far away (near). If calls are assumed to be
8790far away, the compiler will use the @code{call} instruction to
8791call a function and the @code{rtc} instruction for returning.
34208acf 8792
39bc1876
NS
8793@item -mshort
8794@opindex mshort
8795Consider type @code{int} to be 16 bits wide, like @code{short int}.
34208acf 8796
39bc1876
NS
8797@item -msoft-reg-count=@var{count}
8798@opindex msoft-reg-count
8799Specify the number of pseudo-soft registers which are used for the
8800code generation. The maximum number is 32. Using more pseudo-soft
8801register may or may not result in better code depending on the program.
8802The default is 4 for 68HC11 and 2 for 68HC12.
34208acf 8803
39bc1876 8804@end table
34208acf 8805
39bc1876
NS
8806@node MCore Options
8807@subsection MCore Options
8808@cindex MCore options
34208acf 8809
39bc1876
NS
8810These are the @samp{-m} options defined for the Motorola M*Core
8811processors.
34208acf 8812
39bc1876 8813@table @gcctabopt
34208acf 8814
39bc1876
NS
8815@item -mhardlit
8816@itemx -mno-hardlit
8817@opindex mhardlit
8818@opindex mno-hardlit
8819Inline constants into the code stream if it can be done in two
8820instructions or less.
34208acf 8821
39bc1876
NS
8822@item -mdiv
8823@itemx -mno-div
8824@opindex mdiv
8825@opindex mno-div
8826Use the divide instruction. (Enabled by default).
a02aa5b0 8827
39bc1876
NS
8828@item -mrelax-immediate
8829@itemx -mno-relax-immediate
8830@opindex mrelax-immediate
8831@opindex mno-relax-immediate
8832Allow arbitrary sized immediates in bit operations.
a02aa5b0 8833
39bc1876
NS
8834@item -mwide-bitfields
8835@itemx -mno-wide-bitfields
8836@opindex mwide-bitfields
8837@opindex mno-wide-bitfields
8838Always treat bit-fields as int-sized.
a02aa5b0 8839
39bc1876
NS
8840@item -m4byte-functions
8841@itemx -mno-4byte-functions
8842@opindex m4byte-functions
8843@opindex mno-4byte-functions
8844Force all functions to be aligned to a four byte boundary.
a02aa5b0 8845
39bc1876
NS
8846@item -mcallgraph-data
8847@itemx -mno-callgraph-data
8848@opindex mcallgraph-data
8849@opindex mno-callgraph-data
8850Emit callgraph information.
f401d0f5 8851
39bc1876
NS
8852@item -mslow-bytes
8853@itemx -mno-slow-bytes
8854@opindex mslow-bytes
8855@opindex mno-slow-bytes
8856Prefer word access when reading byte quantities.
f401d0f5 8857
39bc1876
NS
8858@item -mlittle-endian
8859@itemx -mbig-endian
8860@opindex mlittle-endian
8861@opindex mbig-endian
8862Generate code for a little endian target.
f401d0f5 8863
39bc1876
NS
8864@item -m210
8865@itemx -m340
8866@opindex m210
8867@opindex m340
8868Generate code for the 210 processor.
74291a4b
MM
8869@end table
8870
39bc1876
NS
8871@node MIPS Options
8872@subsection MIPS Options
8873@cindex MIPS options
74291a4b 8874
2642624b 8875@table @gcctabopt
74291a4b 8876
39bc1876
NS
8877@item -EB
8878@opindex EB
8879Generate big-endian code.
74291a4b 8880
39bc1876
NS
8881@item -EL
8882@opindex EL
8883Generate little-endian code. This is the default for @samp{mips*el-*-*}
8884configurations.
74291a4b 8885
39bc1876
NS
8886@item -march=@var{arch}
8887@opindex march
8888Generate code that will run on @var{arch}, which can be the name of a
8889generic MIPS ISA, or the name of a particular processor.
8890The ISA names are:
8891@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
8892@samp{mips32}, @samp{mips32r2}, and @samp{mips64}.
8893The processor names are:
8894@samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc},
8895@samp{m4k},
8896@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
8897@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, @samp{rm7000},
8898@samp{rm9000},
8899@samp{orion},
8900@samp{sb1},
8901@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
8902@samp{vr5000}, @samp{vr5400} and @samp{vr5500}.
8903The special value @samp{from-abi} selects the
8904most compatible architecture for the selected ABI (that is,
8905@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
74291a4b 8906
39bc1876
NS
8907In processor names, a final @samp{000} can be abbreviated as @samp{k}
8908(for example, @samp{-march=r2k}). Prefixes are optional, and
8909@samp{vr} may be written @samp{r}.
74291a4b 8910
39bc1876
NS
8911GCC defines two macros based on the value of this option. The first
8912is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
8913a string. The second has the form @samp{_MIPS_ARCH_@var{foo}},
8914where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
8915For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
8916to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.
74291a4b 8917
39bc1876
NS
8918Note that the @samp{_MIPS_ARCH} macro uses the processor names given
8919above. In other words, it will have the full prefix and will not
8920abbreviate @samp{000} as @samp{k}. In the case of @samp{from-abi},
8921the macro names the resolved architecture (either @samp{"mips1"} or
8922@samp{"mips3"}). It names the default architecture when no
8923@option{-march} option is given.
74291a4b 8924
39bc1876
NS
8925@item -mtune=@var{arch}
8926@opindex mtune
8927Optimize for @var{arch}. Among other things, this option controls
8928the way instructions are scheduled, and the perceived cost of arithmetic
8929operations. The list of @var{arch} values is the same as for
8930@option{-march}.
74291a4b 8931
39bc1876
NS
8932When this option is not used, GCC will optimize for the processor
8933specified by @option{-march}. By using @option{-march} and
8934@option{-mtune} together, it is possible to generate code that will
8935run on a family of processors, but optimize the code for one
8936particular member of that family.
74291a4b 8937
39bc1876
NS
8938@samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
8939@samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
8940@samp{-march} ones described above.
74291a4b 8941
39bc1876
NS
8942@item -mips1
8943@opindex mips1
8944Equivalent to @samp{-march=mips1}.
74291a4b 8945
39bc1876
NS
8946@item -mips2
8947@opindex mips2
8948Equivalent to @samp{-march=mips2}.
74291a4b 8949
39bc1876
NS
8950@item -mips3
8951@opindex mips3
8952Equivalent to @samp{-march=mips3}.
74291a4b 8953
39bc1876
NS
8954@item -mips4
8955@opindex mips4
8956Equivalent to @samp{-march=mips4}.
8957
8958@item -mips32
8959@opindex mips32
8960Equivalent to @samp{-march=mips32}.
74291a4b 8961
39bc1876
NS
8962@item -mips32r2
8963@opindex mips32r2
8964Equivalent to @samp{-march=mips32r2}.
74291a4b 8965
39bc1876
NS
8966@item -mips64
8967@opindex mips64
8968Equivalent to @samp{-march=mips64}.
74291a4b 8969
39bc1876
NS
8970@item -mips16
8971@itemx -mno-mips16
8972@opindex mips16
8973@opindex mno-mips16
8974Use (do not use) the MIPS16 ISA.
74291a4b 8975
39bc1876
NS
8976@item -mabi=32
8977@itemx -mabi=o64
8978@itemx -mabi=n32
8979@itemx -mabi=64
8980@itemx -mabi=eabi
8981@opindex mabi=32
8982@opindex mabi=o64
8983@opindex mabi=n32
8984@opindex mabi=64
8985@opindex mabi=eabi
8986Generate code for the given ABI@.
74291a4b 8987
39bc1876
NS
8988Note that the EABI has a 32-bit and a 64-bit variant. GCC normally
8989generates 64-bit code when you select a 64-bit architecture, but you
8990can use @option{-mgp32} to get 32-bit code instead.
74291a4b 8991
39bc1876
NS
8992For information about the O64 ABI, see
8993@w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}.
74291a4b 8994
39bc1876
NS
8995@item -mabicalls
8996@itemx -mno-abicalls
8997@opindex mabicalls
8998@opindex mno-abicalls
8999Generate (do not generate) SVR4-style position-independent code.
9000@option{-mabicalls} is the default for SVR4-based systems.
74291a4b 9001
39bc1876
NS
9002@item -mxgot
9003@itemx -mno-xgot
9004@opindex mxgot
9005@opindex mno-xgot
9006Lift (do not lift) the usual restrictions on the size of the global
9007offset table.
74291a4b 9008
39bc1876
NS
9009GCC normally uses a single instruction to load values from the GOT.
9010While this is relatively efficient, it will only work if the GOT
9011is smaller than about 64k. Anything larger will cause the linker
9012to report an error such as:
74291a4b 9013
39bc1876
NS
9014@cindex relocation truncated to fit (MIPS)
9015@smallexample
9016relocation truncated to fit: R_MIPS_GOT16 foobar
9017@end smallexample
74291a4b 9018
39bc1876
NS
9019If this happens, you should recompile your code with @option{-mxgot}.
9020It should then work with very large GOTs, although it will also be
9021less efficient, since it will take three instructions to fetch the
9022value of a global symbol.
956d6950 9023
39bc1876
NS
9024Note that some linkers can create multiple GOTs. If you have such a
9025linker, you should only need to use @option{-mxgot} when a single object
9026file accesses more than 64k's worth of GOT entries. Very few do.
956d6950 9027
39bc1876
NS
9028These options have no effect unless GCC is generating position
9029independent code.
956d6950 9030
39bc1876
NS
9031@item -mgp32
9032@opindex mgp32
9033Assume that general-purpose registers are 32 bits wide.
58605ba0 9034
39bc1876
NS
9035@item -mgp64
9036@opindex mgp64
9037Assume that general-purpose registers are 64 bits wide.
58605ba0 9038
39bc1876
NS
9039@item -mfp32
9040@opindex mfp32
9041Assume that floating-point registers are 32 bits wide.
58605ba0 9042
39bc1876
NS
9043@item -mfp64
9044@opindex mfp64
9045Assume that floating-point registers are 64 bits wide.
58605ba0 9046
39bc1876
NS
9047@item -mhard-float
9048@opindex mhard-float
9049Use floating-point coprocessor instructions.
58605ba0 9050
39bc1876
NS
9051@item -msoft-float
9052@opindex msoft-float
9053Do not use floating-point coprocessor instructions. Implement
9054floating-point calculations using library calls instead.
3094247f 9055
39bc1876
NS
9056@item -msingle-float
9057@opindex msingle-float
9058Assume that the floating-point coprocessor only supports single-precision
9059operations.
3094247f 9060
39bc1876
NS
9061@itemx -mdouble-float
9062@opindex mdouble-float
9063Assume that the floating-point coprocessor supports double-precision
9064operations. This is the default.
956d6950 9065
39bc1876
NS
9066@item -mint64
9067@opindex mint64
9068Force @code{int} and @code{long} types to be 64 bits wide. See
9069@option{-mlong32} for an explanation of the default and the way
9070that the pointer size is determined.
956d6950 9071
39bc1876
NS
9072@item -mlong64
9073@opindex mlong64
9074Force @code{long} types to be 64 bits wide. See @option{-mlong32} for
9075an explanation of the default and the way that the pointer size is
9076determined.
956d6950 9077
39bc1876
NS
9078@item -mlong32
9079@opindex mlong32
9080Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
956d6950 9081
39bc1876
NS
9082The default size of @code{int}s, @code{long}s and pointers depends on
9083the ABI@. All the supported ABIs use 32-bit @code{int}s. The n64 ABI
9084uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
908532-bit @code{long}s. Pointers are the same size as @code{long}s,
9086or the same size as integer registers, whichever is smaller.
956d6950 9087
39bc1876
NS
9088@item -G @var{num}
9089@opindex G
9090@cindex smaller data references (MIPS)
9091@cindex gp-relative references (MIPS)
9092Put global and static items less than or equal to @var{num} bytes into
9093the small data or bss section instead of the normal data or bss section.
9094This allows the data to be accessed using a single instruction.
9095
9096All modules should be compiled with the same @option{-G @var{num}}
9097value.
956d6950 9098
39bc1876
NS
9099@item -membedded-data
9100@itemx -mno-embedded-data
9101@opindex membedded-data
9102@opindex mno-embedded-data
9103Allocate variables to the read-only data section first if possible, then
9104next in the small data section if possible, otherwise in data. This gives
9105slightly slower code than the default, but reduces the amount of RAM required
9106when executing, and thus may be preferred for some embedded systems.
58605ba0 9107
39bc1876
NS
9108@item -muninit-const-in-rodata
9109@itemx -mno-uninit-const-in-rodata
9110@opindex muninit-const-in-rodata
9111@opindex mno-uninit-const-in-rodata
9112Put uninitialized @code{const} variables in the read-only data section.
9113This option is only meaningful in conjunction with @option{-membedded-data}.
4f69985c 9114
39bc1876
NS
9115@item -msplit-addresses
9116@itemx -mno-split-addresses
9117@opindex msplit-addresses
9118@opindex mno-split-addresses
9119Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
9120relocation operators. This option has been superceded by
9121@option{-mexplicit-relocs} but is retained for backwards compatibility.
58605ba0 9122
39bc1876
NS
9123@item -mexplicit-relocs
9124@itemx -mno-explicit-relocs
9125@opindex mexplicit-relocs
9126@opindex mno-explicit-relocs
9127Use (do not use) assembler relocation operators when dealing with symbolic
9128addresses. The alternative, selected by @option{-mno-explicit-relocs},
9129is to use assembler macros instead.
4f69985c 9130
39bc1876
NS
9131@option{-mexplicit-relocs} is usually the default if GCC was configured
9132to use an assembler that supports relocation operators. However, the
9133combination of @option{-mabicalls} and @option{-fno-unit-at-a-time}
9134implies @option{-mno-explicit-relocs} unless explicitly overridden.
9135This is because, when generating abicalls, the choice of relocation
9136depends on whether a symbol is local or global. In some rare cases,
9137GCC will not be able to decide this until the whole compilation unit
9138has been read.
4f69985c 9139
39bc1876
NS
9140@item -mrnames
9141@itemx -mno-rnames
9142@opindex mrnames
9143@opindex mno-rnames
9144Generate (do not generate) code that refers to registers using their
9145software names. The default is @option{-mno-rnames}, which tells GCC
9146to use hardware names like @samp{$4} instead of software names like
9147@samp{a0}. The only assembler known to support @option{-rnames} is
9148the Algorithmics assembler.
4f69985c 9149
39bc1876
NS
9150@item -mcheck-zero-division
9151@itemx -mno-check-zero-division
9152@opindex mcheck-zero-division
9153@opindex mno-check-zero-division
9154Trap (do not trap) on integer division by zero. The default is
9155@option{-mcheck-zero-division}.
4f69985c 9156
39bc1876
NS
9157@item -mmemcpy
9158@itemx -mno-memcpy
9159@opindex mmemcpy
9160@opindex mno-memcpy
9161Force (do not force) the use of @code{memcpy()} for non-trivial block
9162moves. The default is @option{-mno-memcpy}, which allows GCC to inline
9163most constant-sized copies.
74291a4b 9164
39bc1876
NS
9165@item -mlong-calls
9166@itemx -mno-long-calls
9167@opindex mlong-calls
9168@opindex mno-long-calls
9169Disable (do not disable) use of the @code{jal} instruction. Calling
9170functions using @code{jal} is more efficient but requires the caller
9171and callee to be in the same 256 megabyte segment.
d7c23cdc 9172
39bc1876
NS
9173This option has no effect on abicalls code. The default is
9174@option{-mno-long-calls}.
d7c23cdc 9175
39bc1876
NS
9176@item -mmad
9177@itemx -mno-mad
9178@opindex mmad
9179@opindex mno-mad
9180Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
9181instructions, as provided by the R4650 ISA.
d7c23cdc 9182
39bc1876
NS
9183@item -mfused-madd
9184@itemx -mno-fused-madd
9185@opindex mfused-madd
9186@opindex mno-fused-madd
9187Enable (disable) use of the floating point multiply-accumulate
9188instructions, when they are available. The default is
9189@option{-mfused-madd}.
74291a4b 9190
39bc1876
NS
9191When multiply-accumulate instructions are used, the intermediate
9192product is calculated to infinite precision and is not subject to
9193the FCSR Flush to Zero bit. This may be undesirable in some
9194circumstances.
74291a4b 9195
39bc1876
NS
9196@item -nocpp
9197@opindex nocpp
9198Tell the MIPS assembler to not run its preprocessor over user
9199assembler files (with a @samp{.s} suffix) when assembling them.
74291a4b 9200
39bc1876
NS
9201@item -mfix-r4000
9202@itemx -mno-fix-r4000
9203@opindex mfix-r4000
9204@opindex mno-fix-r4000
9205Work around certain R4000 CPU errata:
9206@itemize @minus
9207@item
9208A double-word or a variable shift may give an incorrect result if executed
9209immediately after starting an integer division.
9210@item
9211A double-word or a variable shift may give an incorrect result if executed
9212while an integer multiplication is in progress.
9213@item
9214An integer division may give an incorrect result if started in a delay slot
9215of a taken branch or a jump.
9216@end itemize
74291a4b 9217
39bc1876
NS
9218@item -mfix-r4400
9219@itemx -mno-fix-r4400
9220@opindex mfix-r4400
9221@opindex mno-fix-r4400
9222Work around certain R4400 CPU errata:
9223@itemize @minus
9224@item
9225A double-word or a variable shift may give an incorrect result if executed
9226immediately after starting an integer division.
9227@end itemize
dcb9d1f0 9228
39bc1876
NS
9229@item -mfix-vr4120
9230@itemx -mno-fix-vr4120
9231@opindex mfix-vr4120
9232Work around certain VR4120 errata:
9233@itemize @minus
9234@item
9235@code{dmultu} does not always produce the correct result.
9236@item
9237@code{div} and @code{ddiv} do not always produce the correct result if one
9238of the operands is negative.
9239@end itemize
9240The workarounds for the division errata rely on special functions in
9241@file{libgcc.a}. At present, these functions are only provided by
9242the @code{mips64vr*-elf} configurations.
39ba95b5 9243
39bc1876
NS
9244Other VR4120 errata require a nop to be inserted between certain pairs of
9245instructions. These errata are handled by the assembler, not by GCC itself.
17f0f8fa 9246
39bc1876
NS
9247@item -mfix-sb1
9248@itemx -mno-fix-sb1
9249@opindex mfix-sb1
9250Work around certain SB-1 CPU core errata.
9251(This flag currently works around the SB-1 revision 2
9252``F1'' and ``F2'' floating point errata.)
74291a4b 9253
39bc1876
NS
9254@item -mflush-func=@var{func}
9255@itemx -mno-flush-func
9256@opindex mflush-func
9257Specifies the function to call to flush the I and D caches, or to not
9258call any such function. If called, the function must take the same
9259arguments as the common @code{_flush_func()}, that is, the address of the
9260memory range for which the cache is being flushed, the size of the
9261memory range, and the number 3 (to flush both caches). The default
9262depends on the target GCC was configured for, but commonly is either
9263@samp{_flush_func} or @samp{__cpu_flush}.
74291a4b 9264
39bc1876
NS
9265@item -mbranch-likely
9266@itemx -mno-branch-likely
9267@opindex mbranch-likely
9268@opindex mno-branch-likely
9269Enable or disable use of Branch Likely instructions, regardless of the
9270default for the selected architecture. By default, Branch Likely
9271instructions may be generated if they are supported by the selected
9272architecture. An exception is for the MIPS32 and MIPS64 architectures
9273and processors which implement those architectures; for those, Branch
9274Likely instructions will not be generated by default because the MIPS32
9275and MIPS64 architectures specifically deprecate their use.
74291a4b 9276
39bc1876
NS
9277@item -mfp-exceptions
9278@itemx -mno-fp-exceptions
9279@opindex mfp-exceptions
9280Specifies whether FP exceptions are enabled. This affects how we schedule
9281FP instructions for some processors. The default is that FP exceptions are
9282enabled.
74291a4b 9283
39bc1876
NS
9284For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
928564-bit code, then we can use both FP pipes. Otherwise, we can only use one
9286FP pipe.
74291a4b 9287
39bc1876
NS
9288@item -mvr4130-align
9289@itemx -mno-vr4130-align
9290@opindex mvr4130-align
9291The VR4130 pipeline is two-way superscalar, but can only issue two
9292instructions together if the first one is 8-byte aligned. When this
9293option is enabled, GCC will align pairs of instructions that it
9294thinks should execute in parallel.
74291a4b 9295
39bc1876
NS
9296This option only has an effect when optimizing for the VR4130.
9297It normally makes code faster, but at the expense of making it bigger.
9298It is enabled by default at optimization level @option{-O3}.
9299@end table
3a8699c7 9300
39bc1876
NS
9301@node MMIX Options
9302@subsection MMIX Options
9303@cindex MMIX Options
74291a4b 9304
39bc1876 9305These options are defined for the MMIX:
74291a4b 9306
39bc1876
NS
9307@table @gcctabopt
9308@item -mlibfuncs
9309@itemx -mno-libfuncs
9310@opindex mlibfuncs
9311@opindex mno-libfuncs
9312Specify that intrinsic library functions are being compiled, passing all
9313values in registers, no matter the size.
3cadd778 9314
39bc1876
NS
9315@item -mepsilon
9316@itemx -mno-epsilon
9317@opindex mepsilon
9318@opindex mno-epsilon
9319Generate floating-point comparison instructions that compare with respect
9320to the @code{rE} epsilon register.
3cadd778 9321
39bc1876
NS
9322@item -mabi=mmixware
9323@itemx -mabi=gnu
9324@opindex mabi-mmixware
9325@opindex mabi=gnu
9326Generate code that passes function parameters and return values that (in
9327the called function) are seen as registers @code{$0} and up, as opposed to
9328the GNU ABI which uses global registers @code{$231} and up.
3cadd778 9329
39bc1876
NS
9330@item -mzero-extend
9331@itemx -mno-zero-extend
9332@opindex mzero-extend
9333@opindex mno-zero-extend
9334When reading data from memory in sizes shorter than 64 bits, use (do not
9335use) zero-extending load instructions by default, rather than
9336sign-extending ones.
3cadd778 9337
39bc1876
NS
9338@item -mknuthdiv
9339@itemx -mno-knuthdiv
9340@opindex mknuthdiv
9341@opindex mno-knuthdiv
9342Make the result of a division yielding a remainder have the same sign as
9343the divisor. With the default, @option{-mno-knuthdiv}, the sign of the
9344remainder follows the sign of the dividend. Both methods are
9345arithmetically valid, the latter being almost exclusively used.
74291a4b 9346
39bc1876
NS
9347@item -mtoplevel-symbols
9348@itemx -mno-toplevel-symbols
9349@opindex mtoplevel-symbols
9350@opindex mno-toplevel-symbols
9351Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
9352code can be used with the @code{PREFIX} assembly directive.
74291a4b 9353
39bc1876
NS
9354@item -melf
9355@opindex melf
9356Generate an executable in the ELF format, rather than the default
9357@samp{mmo} format used by the @command{mmix} simulator.
3d5a0820 9358
39bc1876
NS
9359@item -mbranch-predict
9360@itemx -mno-branch-predict
9361@opindex mbranch-predict
9362@opindex mno-branch-predict
9363Use (do not use) the probable-branch instructions, when static branch
9364prediction indicates a probable branch.
3cadd778 9365
39bc1876
NS
9366@item -mbase-addresses
9367@itemx -mno-base-addresses
9368@opindex mbase-addresses
9369@opindex mno-base-addresses
9370Generate (do not generate) code that uses @emph{base addresses}. Using a
9371base address automatically generates a request (handled by the assembler
9372and the linker) for a constant to be set up in a global register. The
9373register is used for one or more base address requests within the range 0
9374to 255 from the value held in the register. The generally leads to short
9375and fast code, but the number of different data items that can be
9376addressed is limited. This means that a program that uses lots of static
9377data may require @option{-mno-base-addresses}.
3cadd778 9378
39bc1876
NS
9379@item -msingle-exit
9380@itemx -mno-single-exit
9381@opindex msingle-exit
9382@opindex mno-single-exit
9383Force (do not force) generated code to have a single exit point in each
9384function.
9385@end table
3cadd778 9386
39bc1876
NS
9387@node MN10300 Options
9388@subsection MN10300 Options
9389@cindex MN10300 options
3cadd778 9390
39bc1876 9391These @option{-m} options are defined for Matsushita MN10300 architectures:
3cadd778 9392
39bc1876
NS
9393@table @gcctabopt
9394@item -mmult-bug
9395@opindex mmult-bug
9396Generate code to avoid bugs in the multiply instructions for the MN10300
9397processors. This is the default.
c474f76b 9398
39bc1876
NS
9399@item -mno-mult-bug
9400@opindex mno-mult-bug
9401Do not generate code to avoid bugs in the multiply instructions for the
9402MN10300 processors.
3cadd778 9403
39bc1876
NS
9404@item -mam33
9405@opindex mam33
9406Generate code which uses features specific to the AM33 processor.
3cadd778 9407
39bc1876
NS
9408@item -mno-am33
9409@opindex mno-am33
9410Do not generate code which uses features specific to the AM33 processor. This
9411is the default.
1a66cd67 9412
39bc1876
NS
9413@item -mno-crt0
9414@opindex mno-crt0
9415Do not link in the C run-time initialization object file.
93ca1662 9416
39bc1876
NS
9417@item -mrelax
9418@opindex mrelax
9419Indicate to the linker that it should perform a relaxation optimization pass
9420to shorten branches, calls and absolute memory addresses. This option only
9421has an effect when used on the command line for the final link step.
9422
9423This option makes symbolic debugging impossible.
74291a4b
MM
9424@end table
9425
39bc1876
NS
9426@node NS32K Options
9427@subsection NS32K Options
9428@cindex NS32K options
74291a4b 9429
39bc1876
NS
9430These are the @samp{-m} options defined for the 32000 series. The default
9431values for these options depends on which style of 32000 was selected when
9432the compiler was configured; the defaults for the most common choices are
9433given below.
74291a4b 9434
2642624b 9435@table @gcctabopt
39bc1876
NS
9436@item -m32032
9437@itemx -m32032
9438@opindex m32032
9439@opindex m32032
9440Generate output for a 32032. This is the default
9441when the compiler is configured for 32032 and 32016 based systems.
74291a4b 9442
39bc1876
NS
9443@item -m32332
9444@itemx -m32332
9445@opindex m32332
9446@opindex m32332
9447Generate output for a 32332. This is the default
9448when the compiler is configured for 32332-based systems.
74291a4b 9449
39bc1876
NS
9450@item -m32532
9451@itemx -m32532
9452@opindex m32532
9453@opindex m32532
9454Generate output for a 32532. This is the default
9455when the compiler is configured for 32532-based systems.
74291a4b 9456
39bc1876
NS
9457@item -m32081
9458@opindex m32081
9459Generate output containing 32081 instructions for floating point.
9460This is the default for all systems.
74291a4b 9461
39bc1876
NS
9462@item -m32381
9463@opindex m32381
9464Generate output containing 32381 instructions for floating point. This
9465also implies @option{-m32081}. The 32381 is only compatible with the 32332
9466and 32532 cpus. This is the default for the pc532-netbsd configuration.
9467
9468@item -mmulti-add
9469@opindex mmulti-add
9470Try and generate multiply-add floating point instructions @code{polyF}
9471and @code{dotF}. This option is only available if the @option{-m32381}
9472option is in effect. Using these instructions requires changes to
9473register allocation which generally has a negative impact on
9474performance. This option should only be enabled when compiling code
9475particularly likely to make heavy use of multiply-add instructions.
9476
9477@item -mnomulti-add
9478@opindex mnomulti-add
9479Do not try and generate multiply-add floating point instructions
9480@code{polyF} and @code{dotF}. This is the default on all platforms.
74291a4b 9481
39bc1876
NS
9482@item -msoft-float
9483@opindex msoft-float
9484Generate output containing library calls for floating point.
9485@strong{Warning:} the requisite libraries may not be available.
282a61e6 9486
39bc1876
NS
9487@item -mieee-compare
9488@itemx -mno-ieee-compare
9489@opindex mieee-compare
9490@opindex mno-ieee-compare
9491Control whether or not the compiler uses IEEE floating point
9492comparisons. These handle correctly the case where the result of a
9493comparison is unordered.
9494@strong{Warning:} the requisite kernel support may not be available.
282a61e6 9495
39bc1876
NS
9496@item -mnobitfield
9497@opindex mnobitfield
9498Do not use the bit-field instructions. On some machines it is faster to
9499use shifting and masking operations. This is the default for the pc532.
282a61e6 9500
39bc1876
NS
9501@item -mbitfield
9502@opindex mbitfield
9503Do use the bit-field instructions. This is the default for all platforms
9504except the pc532.
282a61e6 9505
39bc1876
NS
9506@item -mrtd
9507@opindex mrtd
9508Use a different function-calling convention, in which functions
9509that take a fixed number of arguments return pop their
9510arguments on return with the @code{ret} instruction.
282a61e6 9511
39bc1876
NS
9512This calling convention is incompatible with the one normally
9513used on Unix, so you cannot use it if you need to call libraries
9514compiled with the Unix compiler.
282a61e6 9515
39bc1876
NS
9516Also, you must provide function prototypes for all functions that
9517take variable numbers of arguments (including @code{printf});
9518otherwise incorrect code will be generated for calls to those
9519functions.
282a61e6 9520
39bc1876
NS
9521In addition, seriously incorrect code will result if you call a
9522function with too many arguments. (Normally, extra arguments are
9523harmlessly ignored.)
282a61e6 9524
39bc1876 9525This option takes its name from the 680x0 @code{rtd} instruction.
282a61e6 9526
282a61e6 9527
39bc1876
NS
9528@item -mregparam
9529@opindex mregparam
9530Use a different function-calling convention where the first two arguments
9531are passed in registers.
282a61e6 9532
39bc1876
NS
9533This calling convention is incompatible with the one normally
9534used on Unix, so you cannot use it if you need to call libraries
9535compiled with the Unix compiler.
282a61e6 9536
39bc1876
NS
9537@item -mnoregparam
9538@opindex mnoregparam
9539Do not pass any arguments in registers. This is the default for all
9540targets.
282a61e6 9541
39bc1876
NS
9542@item -msb
9543@opindex msb
9544It is OK to use the sb as an index register which is always loaded with
9545zero. This is the default for the pc532-netbsd target.
282a61e6 9546
39bc1876
NS
9547@item -mnosb
9548@opindex mnosb
9549The sb register is not available for use or has not been initialized to
9550zero by the run time system. This is the default for all targets except
9551the pc532-netbsd. It is also implied whenever @option{-mhimem} or
9552@option{-fpic} is set.
282a61e6 9553
39bc1876
NS
9554@item -mhimem
9555@opindex mhimem
9556Many ns32000 series addressing modes use displacements of up to 512MB@.
9557If an address is above 512MB then displacements from zero can not be used.
9558This option causes code to be generated which can be loaded above 512MB@.
9559This may be useful for operating systems or ROM code.
282a61e6 9560
39bc1876
NS
9561@item -mnohimem
9562@opindex mnohimem
9563Assume code will be loaded in the first 512MB of virtual address space.
9564This is the default for all platforms.
282a61e6
MH
9565
9566@end table
9567
39bc1876
NS
9568@node PDP-11 Options
9569@subsection PDP-11 Options
9570@cindex PDP-11 Options
f84271d9 9571
39bc1876 9572These options are defined for the PDP-11:
f84271d9 9573
2642624b 9574@table @gcctabopt
39bc1876
NS
9575@item -mfpu
9576@opindex mfpu
9577Use hardware FPP floating point. This is the default. (FIS floating
9578point on the PDP-11/40 is not supported.)
f84271d9 9579
39bc1876
NS
9580@item -msoft-float
9581@opindex msoft-float
9582Do not use hardware floating point.
f84271d9 9583
39bc1876
NS
9584@item -mac0
9585@opindex mac0
9586Return floating-point results in ac0 (fr0 in Unix assembler syntax).
f84271d9 9587
39bc1876
NS
9588@item -mno-ac0
9589@opindex mno-ac0
9590Return floating-point results in memory. This is the default.
9591
9592@item -m40
9593@opindex m40
9594Generate code for a PDP-11/40.
9595
9596@item -m45
9597@opindex m45
9598Generate code for a PDP-11/45. This is the default.
f84271d9 9599
39bc1876
NS
9600@item -m10
9601@opindex m10
9602Generate code for a PDP-11/10.
f84271d9 9603
39bc1876
NS
9604@item -mbcopy-builtin
9605@opindex bcopy-builtin
9606Use inline @code{movstrhi} patterns for copying memory. This is the
9607default.
f84271d9 9608
39bc1876
NS
9609@item -mbcopy
9610@opindex mbcopy
9611Do not use inline @code{movstrhi} patterns for copying memory.
02f52e19 9612
39bc1876
NS
9613@item -mint16
9614@itemx -mno-int32
9615@opindex mint16
9616@opindex mno-int32
9617Use 16-bit @code{int}. This is the default.
48f0be1b 9618
39bc1876
NS
9619@item -mint32
9620@itemx -mno-int16
9621@opindex mint32
9622@opindex mno-int16
9623Use 32-bit @code{int}.
b4378319 9624
39bc1876
NS
9625@item -mfloat64
9626@itemx -mno-float32
9627@opindex mfloat64
9628@opindex mno-float32
9629Use 64-bit @code{float}. This is the default.
b4378319 9630
39bc1876
NS
9631@item -mfloat32
9632@itemx -mno-float64
9633@opindex mfloat32
9634@opindex mno-float64
9635Use 32-bit @code{float}.
daf2f129 9636
39bc1876
NS
9637@item -mabshi
9638@opindex mabshi
9639Use @code{abshi2} pattern. This is the default.
232830b7 9640
39bc1876
NS
9641@item -mno-abshi
9642@opindex mno-abshi
9643Do not use @code{abshi2} pattern.
b4378319 9644
39bc1876
NS
9645@item -mbranch-expensive
9646@opindex mbranch-expensive
9647Pretend that branches are expensive. This is for experimenting with
9648code generation only.
b4378319 9649
39bc1876
NS
9650@item -mbranch-cheap
9651@opindex mbranch-cheap
9652Do not pretend that branches are expensive. This is the default.
b4378319 9653
39bc1876
NS
9654@item -msplit
9655@opindex msplit
9656Generate code for a system with split I&D.
b4378319 9657
39bc1876
NS
9658@item -mno-split
9659@opindex mno-split
9660Generate code for a system without split I&D. This is the default.
f84271d9 9661
39bc1876
NS
9662@item -munix-asm
9663@opindex munix-asm
9664Use Unix assembler syntax. This is the default when configured for
9665@samp{pdp11-*-bsd}.
56b2d7a7 9666
39bc1876
NS
9667@item -mdec-asm
9668@opindex mdec-asm
9669Use DEC assembler syntax. This is the default when configured for any
9670PDP-11 target other than @samp{pdp11-*-bsd}.
9671@end table
56b2d7a7 9672
39bc1876
NS
9673@node PowerPC Options
9674@subsection PowerPC Options
9675@cindex PowerPC options
56b2d7a7 9676
39bc1876 9677These are listed under @xref{RS/6000 and PowerPC Options}.
56b2d7a7 9678
39bc1876
NS
9679@node RS/6000 and PowerPC Options
9680@subsection IBM RS/6000 and PowerPC Options
9681@cindex RS/6000 and PowerPC Options
9682@cindex IBM RS/6000 and PowerPC Options
56b2d7a7 9683
39bc1876
NS
9684These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
9685@table @gcctabopt
9686@item -mpower
9687@itemx -mno-power
9688@itemx -mpower2
9689@itemx -mno-power2
9690@itemx -mpowerpc
9691@itemx -mno-powerpc
9692@itemx -mpowerpc-gpopt
9693@itemx -mno-powerpc-gpopt
9694@itemx -mpowerpc-gfxopt
9695@itemx -mno-powerpc-gfxopt
9696@itemx -mpowerpc64
9697@itemx -mno-powerpc64
9698@opindex mpower
9699@opindex mno-power
9700@opindex mpower2
9701@opindex mno-power2
9702@opindex mpowerpc
9703@opindex mno-powerpc
9704@opindex mpowerpc-gpopt
9705@opindex mno-powerpc-gpopt
9706@opindex mpowerpc-gfxopt
9707@opindex mno-powerpc-gfxopt
9708@opindex mpowerpc64
9709@opindex mno-powerpc64
9710GCC supports two related instruction set architectures for the
9711RS/6000 and PowerPC@. The @dfn{POWER} instruction set are those
9712instructions supported by the @samp{rios} chip set used in the original
9713RS/6000 systems and the @dfn{PowerPC} instruction set is the
9714architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
9715the IBM 4xx microprocessors.
56b2d7a7 9716
39bc1876
NS
9717Neither architecture is a subset of the other. However there is a
9718large common subset of instructions supported by both. An MQ
9719register is included in processors supporting the POWER architecture.
56b2d7a7 9720
39bc1876
NS
9721You use these options to specify which instructions are available on the
9722processor you are using. The default value of these options is
9723determined when configuring GCC@. Specifying the
9724@option{-mcpu=@var{cpu_type}} overrides the specification of these
9725options. We recommend you use the @option{-mcpu=@var{cpu_type}} option
9726rather than the options listed above.
56b2d7a7 9727
39bc1876
NS
9728The @option{-mpower} option allows GCC to generate instructions that
9729are found only in the POWER architecture and to use the MQ register.
9730Specifying @option{-mpower2} implies @option{-power} and also allows GCC
9731to generate instructions that are present in the POWER2 architecture but
9732not the original POWER architecture.
83575957 9733
39bc1876
NS
9734The @option{-mpowerpc} option allows GCC to generate instructions that
9735are found only in the 32-bit subset of the PowerPC architecture.
9736Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
9737GCC to use the optional PowerPC architecture instructions in the
9738General Purpose group, including floating-point square root. Specifying
9739@option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
9740use the optional PowerPC architecture instructions in the Graphics
9741group, including floating-point select.
83575957 9742
39bc1876
NS
9743The @option{-mpowerpc64} option allows GCC to generate the additional
974464-bit instructions that are found in the full PowerPC64 architecture
9745and to treat GPRs as 64-bit, doubleword quantities. GCC defaults to
9746@option{-mno-powerpc64}.
83575957 9747
39bc1876
NS
9748If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
9749will use only the instructions in the common subset of both
9750architectures plus some special AIX common-mode calls, and will not use
9751the MQ register. Specifying both @option{-mpower} and @option{-mpowerpc}
9752permits GCC to use any instruction from either architecture and to
9753allow use of the MQ register; specify this for the Motorola MPC601.
83575957 9754
39bc1876
NS
9755@item -mnew-mnemonics
9756@itemx -mold-mnemonics
9757@opindex mnew-mnemonics
9758@opindex mold-mnemonics
9759Select which mnemonics to use in the generated assembler code. With
9760@option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
9761the PowerPC architecture. With @option{-mold-mnemonics} it uses the
9762assembler mnemonics defined for the POWER architecture. Instructions
9763defined in only one architecture have only one mnemonic; GCC uses that
9764mnemonic irrespective of which of these options is specified.
83575957 9765
39bc1876
NS
9766GCC defaults to the mnemonics appropriate for the architecture in
9767use. Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
9768value of these option. Unless you are building a cross-compiler, you
9769should normally not specify either @option{-mnew-mnemonics} or
9770@option{-mold-mnemonics}, but should instead accept the default.
83575957 9771
39bc1876
NS
9772@item -mcpu=@var{cpu_type}
9773@opindex mcpu
9774Set architecture type, register usage, choice of mnemonics, and
9775instruction scheduling parameters for machine type @var{cpu_type}.
9776Supported values for @var{cpu_type} are @samp{401}, @samp{403},
9777@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505},
9778@samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604},
9779@samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400},
9780@samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
9781@samp{860}, @samp{970}, @samp{common}, @samp{ec603e}, @samp{G3},
9782@samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
9783@samp{power4}, @samp{power5}, @samp{powerpc}, @samp{powerpc64},
9784@samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64a}.
83575957 9785
39bc1876
NS
9786@option{-mcpu=common} selects a completely generic processor. Code
9787generated under this option will run on any POWER or PowerPC processor.
9788GCC will use only the instructions in the common subset of both
9789architectures, and will not use the MQ register. GCC assumes a generic
9790processor model for scheduling purposes.
83575957 9791
39bc1876
NS
9792@option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
9793@option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
9794PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
9795types, with an appropriate, generic processor model assumed for
9796scheduling purposes.
83575957 9797
39bc1876
NS
9798The other options specify a specific processor. Code generated under
9799those options will run best on that processor, and may not run at all on
9800others.
83575957 9801
39bc1876
NS
9802The @option{-mcpu} options automatically enable or disable the
9803following options: @option{-maltivec}, @option{-mhard-float},
9804@option{-mmfcrf}, @option{-mmultiple}, @option{-mnew-mnemonics},
9805@option{-mpower}, @option{-mpower2}, @option{-mpowerpc64},
9806@option{-mpowerpc-gpopt}, @option{-mpowerpc-gfxopt},
9807@option{-mstring}. The particular options set for any particular CPU
9808will vary between compiler versions, depending on what setting seems
9809to produce optimal code for that CPU; it doesn't necessarily reflect
9810the actual hardware's capabilities. If you wish to set an individual
9811option to a particular value, you may specify it after the
9812@option{-mcpu} option, like @samp{-mcpu=970 -mno-altivec}.
5d7c2819 9813
39bc1876
NS
9814On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
9815not enabled or disabled by the @option{-mcpu} option at present, since
9816AIX does not have full support for these options. You may still
9817enable or disable them individually if you're sure it'll work in your
9818environment.
83575957 9819
39bc1876
NS
9820@item -mtune=@var{cpu_type}
9821@opindex mtune
9822Set the instruction scheduling parameters for machine type
9823@var{cpu_type}, but do not set the architecture type, register usage, or
9824choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would. The same
9825values for @var{cpu_type} are used for @option{-mtune} as for
9826@option{-mcpu}. If both are specified, the code generated will use the
9827architecture, registers, and mnemonics set by @option{-mcpu}, but the
9828scheduling parameters set by @option{-mtune}.
83575957 9829
39bc1876
NS
9830@item -maltivec
9831@itemx -mno-altivec
9832@opindex maltivec
9833@opindex mno-altivec
9834These switches enable or disable the use of built-in functions that
9835allow access to the AltiVec instruction set. You may also need to set
9836@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
9837enhancements.
83575957 9838
39bc1876
NS
9839@item -mabi=spe
9840@opindex mabi=spe
9841Extend the current ABI with SPE ABI extensions. This does not change
9842the default ABI, instead it adds the SPE ABI extensions to the current
9843ABI@.
83575957 9844
39bc1876
NS
9845@item -mabi=no-spe
9846@opindex mabi=no-spe
9847Disable Booke SPE ABI extensions for the current ABI.
83575957 9848
39bc1876
NS
9849@item -misel=@var{yes/no}
9850@itemx -misel
9851@opindex misel
9852This switch enables or disables the generation of ISEL instructions.
83575957 9853
39bc1876
NS
9854@item -mspe=@var{yes/no}
9855@itemx -mspe
9856@opindex mspe
9857This switch enables or disables the generation of SPE simd
9858instructions.
83575957 9859
39bc1876
NS
9860@item -mfloat-gprs=@var{yes/no}
9861@itemx -mfloat-gprs
9862@opindex mfloat-gprs
9863This switch enables or disables the generation of floating point
9864operations on the general purpose registers for architectures that
9865support it. This option is currently only available on the MPC8540.
83575957 9866
39bc1876
NS
9867@item -mfull-toc
9868@itemx -mno-fp-in-toc
9869@itemx -mno-sum-in-toc
9870@itemx -mminimal-toc
9871@opindex mfull-toc
9872@opindex mno-fp-in-toc
9873@opindex mno-sum-in-toc
9874@opindex mminimal-toc
9875Modify generation of the TOC (Table Of Contents), which is created for
9876every executable file. The @option{-mfull-toc} option is selected by
9877default. In that case, GCC will allocate at least one TOC entry for
9878each unique non-automatic variable reference in your program. GCC
9879will also place floating-point constants in the TOC@. However, only
988016,384 entries are available in the TOC@.
83575957 9881
39bc1876
NS
9882If you receive a linker error message that saying you have overflowed
9883the available TOC space, you can reduce the amount of TOC space used
9884with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
9885@option{-mno-fp-in-toc} prevents GCC from putting floating-point
9886constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
9887generate code to calculate the sum of an address and a constant at
9888run-time instead of putting that sum into the TOC@. You may specify one
9889or both of these options. Each causes GCC to produce very slightly
9890slower and larger code at the expense of conserving TOC space.
83575957 9891
39bc1876
NS
9892If you still run out of space in the TOC even when you specify both of
9893these options, specify @option{-mminimal-toc} instead. This option causes
9894GCC to make only one TOC entry for every file. When you specify this
9895option, GCC will produce code that is slower and larger but which
9896uses extremely little TOC space. You may wish to use this option
9897only on files that contain less frequently executed code.
83575957 9898
39bc1876
NS
9899@item -maix64
9900@itemx -maix32
9901@opindex maix64
9902@opindex maix32
9903Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
9904@code{long} type, and the infrastructure needed to support them.
9905Specifying @option{-maix64} implies @option{-mpowerpc64} and
9906@option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
9907implies @option{-mno-powerpc64}. GCC defaults to @option{-maix32}.
83575957 9908
39bc1876
NS
9909@item -mxl-call
9910@itemx -mno-xl-call
9911@opindex mxl-call
9912@opindex mno-xl-call
9913On AIX, pass floating-point arguments to prototyped functions beyond the
9914register save area (RSA) on the stack in addition to argument FPRs. The
9915AIX calling convention was extended but not initially documented to
9916handle an obscure K&R C case of calling a function that takes the
9917address of its arguments with fewer arguments than declared. AIX XL
9918compilers access floating point arguments which do not fit in the
9919RSA from the stack when a subroutine is compiled without
9920optimization. Because always storing floating-point arguments on the
9921stack is inefficient and rarely needed, this option is not enabled by
9922default and only is necessary when calling subroutines compiled by AIX
9923XL compilers without optimization.
83575957 9924
39bc1876
NS
9925@item -mpe
9926@opindex mpe
9927Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@. Link an
9928application written to use message passing with special startup code to
9929enable the application to run. The system must have PE installed in the
9930standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
9931must be overridden with the @option{-specs=} option to specify the
9932appropriate directory location. The Parallel Environment does not
9933support threads, so the @option{-mpe} option and the @option{-pthread}
9934option are incompatible.
83575957 9935
39bc1876
NS
9936@item -malign-natural
9937@itemx -malign-power
9938@opindex malign-natural
9939@opindex malign-power
9940On AIX, Darwin, and 64-bit PowerPC GNU/Linux, the option
9941@option{-malign-natural} overrides the ABI-defined alignment of larger
9942types, such as floating-point doubles, on their natural size-based boundary.
9943The option @option{-malign-power} instructs GCC to follow the ABI-specified
9944alignment rules. GCC defaults to the standard alignment defined in the ABI.
83575957 9945
39bc1876
NS
9946@item -msoft-float
9947@itemx -mhard-float
9948@opindex msoft-float
9949@opindex mhard-float
9950Generate code that does not use (uses) the floating-point register set.
9951Software floating point emulation is provided if you use the
9952@option{-msoft-float} option, and pass the option to GCC when linking.
83575957 9953
39bc1876
NS
9954@item -mmultiple
9955@itemx -mno-multiple
9956@opindex mmultiple
9957@opindex mno-multiple
9958Generate code that uses (does not use) the load multiple word
9959instructions and the store multiple word instructions. These
9960instructions are generated by default on POWER systems, and not
9961generated on PowerPC systems. Do not use @option{-mmultiple} on little
9962endian PowerPC systems, since those instructions do not work when the
9963processor is in little endian mode. The exceptions are PPC740 and
9964PPC750 which permit the instructions usage in little endian mode.
83575957 9965
39bc1876
NS
9966@item -mstring
9967@itemx -mno-string
9968@opindex mstring
9969@opindex mno-string
9970Generate code that uses (does not use) the load string instructions
9971and the store string word instructions to save multiple registers and
9972do small block moves. These instructions are generated by default on
9973POWER systems, and not generated on PowerPC systems. Do not use
9974@option{-mstring} on little endian PowerPC systems, since those
9975instructions do not work when the processor is in little endian mode.
9976The exceptions are PPC740 and PPC750 which permit the instructions
9977usage in little endian mode.
052a4b28 9978
39bc1876
NS
9979@item -mupdate
9980@itemx -mno-update
9981@opindex mupdate
9982@opindex mno-update
9983Generate code that uses (does not use) the load or store instructions
9984that update the base register to the address of the calculated memory
9985location. These instructions are generated by default. If you use
9986@option{-mno-update}, there is a small window between the time that the
9987stack pointer is updated and the address of the previous frame is
9988stored, which means code that walks the stack frame across interrupts or
9989signals may get corrupted data.
052a4b28 9990
39bc1876
NS
9991@item -mfused-madd
9992@itemx -mno-fused-madd
9993@opindex mfused-madd
9994@opindex mno-fused-madd
9995Generate code that uses (does not use) the floating point multiply and
9996accumulate instructions. These instructions are generated by default if
9997hardware floating is used.
3a69a7d5 9998
39bc1876
NS
9999@item -mno-bit-align
10000@itemx -mbit-align
10001@opindex mno-bit-align
10002@opindex mbit-align
10003On System V.4 and embedded PowerPC systems do not (do) force structures
10004and unions that contain bit-fields to be aligned to the base type of the
10005bit-field.
3a69a7d5 10006
39bc1876
NS
10007For example, by default a structure containing nothing but 8
10008@code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
10009boundary and have a size of 4 bytes. By using @option{-mno-bit-align},
10010the structure would be aligned to a 1 byte boundary and be one byte in
10011size.
3a69a7d5 10012
39bc1876
NS
10013@item -mno-strict-align
10014@itemx -mstrict-align
10015@opindex mno-strict-align
10016@opindex mstrict-align
10017On System V.4 and embedded PowerPC systems do not (do) assume that
10018unaligned memory references will be handled by the system.
3a69a7d5 10019
39bc1876
NS
10020@item -mrelocatable
10021@itemx -mno-relocatable
10022@opindex mrelocatable
10023@opindex mno-relocatable
10024On embedded PowerPC systems generate code that allows (does not allow)
10025the program to be relocated to a different address at runtime. If you
10026use @option{-mrelocatable} on any module, all objects linked together must
10027be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
3a69a7d5 10028
39bc1876
NS
10029@item -mrelocatable-lib
10030@itemx -mno-relocatable-lib
10031@opindex mrelocatable-lib
10032@opindex mno-relocatable-lib
10033On embedded PowerPC systems generate code that allows (does not allow)
10034the program to be relocated to a different address at runtime. Modules
10035compiled with @option{-mrelocatable-lib} can be linked with either modules
10036compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
10037with modules compiled with the @option{-mrelocatable} options.
052a4b28 10038
39bc1876
NS
10039@item -mno-toc
10040@itemx -mtoc
10041@opindex mno-toc
10042@opindex mtoc
10043On System V.4 and embedded PowerPC systems do not (do) assume that
10044register 2 contains a pointer to a global area pointing to the addresses
10045used in the program.
052a4b28 10046
39bc1876
NS
10047@item -mlittle
10048@itemx -mlittle-endian
10049@opindex mlittle
10050@opindex mlittle-endian
10051On System V.4 and embedded PowerPC systems compile code for the
10052processor in little endian mode. The @option{-mlittle-endian} option is
10053the same as @option{-mlittle}.
052a4b28 10054
39bc1876
NS
10055@item -mbig
10056@itemx -mbig-endian
10057@opindex mbig
10058@opindex mbig-endian
10059On System V.4 and embedded PowerPC systems compile code for the
10060processor in big endian mode. The @option{-mbig-endian} option is
10061the same as @option{-mbig}.
052a4b28 10062
39bc1876
NS
10063@item -mdynamic-no-pic
10064@opindex mdynamic-no-pic
10065On Darwin and Mac OS X systems, compile code so that it is not
10066relocatable, but that its external references are relocatable. The
10067resulting code is suitable for applications, but not shared
10068libraries.
3a69a7d5 10069
39bc1876
NS
10070@item -mprioritize-restricted-insns=@var{priority}
10071@opindex mprioritize-restricted-insns
10072This option controls the priority that is assigned to
10073dispatch-slot restricted instructions during the second scheduling
10074pass. The argument @var{priority} takes the value @var{0/1/2} to assign
10075@var{no/highest/second-highest} priority to dispatch slot restricted
10076instructions.
3a69a7d5 10077
39bc1876
NS
10078@item -msched-costly-dep=@var{dependence_type}
10079@opindex msched-costly-dep
10080This option controls which dependences are considered costly
10081by the target during instruction scheduling. The argument
10082@var{dependence_type} takes one of the following values:
10083@var{no}: no dependence is costly,
10084@var{all}: all dependences are costly,
10085@var{true_store_to_load}: a true dependence from store to load is costly,
10086@var{store_to_load}: any dependence from store to load is costly,
10087@var{number}: any dependence which latency >= @var{number} is costly.
11338cda 10088
39bc1876
NS
10089@item -minsert-sched-nops=@var{scheme}
10090@opindex minsert-sched-nops
10091This option controls which nop insertion scheme will be used during
10092the second scheduling pass. The argument @var{scheme} takes one of the
10093following values:
10094@var{no}: Don't insert nops.
10095@var{pad}: Pad with nops any dispatch group which has vacant issue slots,
10096according to the scheduler's grouping.
10097@var{regroup_exact}: Insert nops to force costly dependent insns into
10098separate groups. Insert exactly as many nops as needed to force an insn
10099to a new group, according to the estimated processor grouping.
10100@var{number}: Insert nops to force costly dependent insns into
10101separate groups. Insert @var{number} nops to force an insn to a new group.
052a4b28 10102
39bc1876
NS
10103@item -mcall-sysv
10104@opindex mcall-sysv
10105On System V.4 and embedded PowerPC systems compile code using calling
10106conventions that adheres to the March 1995 draft of the System V
10107Application Binary Interface, PowerPC processor supplement. This is the
10108default unless you configured GCC using @samp{powerpc-*-eabiaix}.
789a3090 10109
39bc1876
NS
10110@item -mcall-sysv-eabi
10111@opindex mcall-sysv-eabi
10112Specify both @option{-mcall-sysv} and @option{-meabi} options.
789a3090 10113
39bc1876
NS
10114@item -mcall-sysv-noeabi
10115@opindex mcall-sysv-noeabi
10116Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
789a3090 10117
39bc1876
NS
10118@item -mcall-solaris
10119@opindex mcall-solaris
10120On System V.4 and embedded PowerPC systems compile code for the Solaris
10121operating system.
789a3090 10122
39bc1876
NS
10123@item -mcall-linux
10124@opindex mcall-linux
10125On System V.4 and embedded PowerPC systems compile code for the
10126Linux-based GNU system.
789a3090 10127
39bc1876
NS
10128@item -mcall-gnu
10129@opindex mcall-gnu
10130On System V.4 and embedded PowerPC systems compile code for the
10131Hurd-based GNU system.
789a3090 10132
39bc1876
NS
10133@item -mcall-netbsd
10134@opindex mcall-netbsd
10135On System V.4 and embedded PowerPC systems compile code for the
10136NetBSD operating system.
789a3090 10137
39bc1876
NS
10138@item -maix-struct-return
10139@opindex maix-struct-return
10140Return all structures in memory (as specified by the AIX ABI)@.
789a3090 10141
39bc1876
NS
10142@item -msvr4-struct-return
10143@opindex msvr4-struct-return
10144Return structures smaller than 8 bytes in registers (as specified by the
10145SVR4 ABI)@.
789a3090 10146
39bc1876
NS
10147@item -mabi=altivec
10148@opindex mabi=altivec
10149Extend the current ABI with AltiVec ABI extensions. This does not
10150change the default ABI, instead it adds the AltiVec ABI extensions to
10151the current ABI@.
789a3090 10152
39bc1876
NS
10153@item -mabi=no-altivec
10154@opindex mabi=no-altivec
10155Disable AltiVec ABI extensions for the current ABI.
789a3090 10156
39bc1876
NS
10157@item -mprototype
10158@itemx -mno-prototype
10159@opindex mprototype
10160@opindex mno-prototype
10161On System V.4 and embedded PowerPC systems assume that all calls to
10162variable argument functions are properly prototyped. Otherwise, the
10163compiler must insert an instruction before every non prototyped call to
10164set or clear bit 6 of the condition code register (@var{CR}) to
10165indicate whether floating point values were passed in the floating point
10166registers in case the function takes a variable arguments. With
10167@option{-mprototype}, only calls to prototyped variable argument functions
10168will set or clear the bit.
83575957 10169
39bc1876
NS
10170@item -msim
10171@opindex msim
10172On embedded PowerPC systems, assume that the startup module is called
10173@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
10174@file{libc.a}. This is the default for @samp{powerpc-*-eabisim}.
10175configurations.
df6194d4 10176
39bc1876
NS
10177@item -mmvme
10178@opindex mmvme
10179On embedded PowerPC systems, assume that the startup module is called
10180@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
10181@file{libc.a}.
df6194d4 10182
39bc1876
NS
10183@item -mads
10184@opindex mads
10185On embedded PowerPC systems, assume that the startup module is called
10186@file{crt0.o} and the standard C libraries are @file{libads.a} and
10187@file{libc.a}.
df6194d4 10188
39bc1876
NS
10189@item -myellowknife
10190@opindex myellowknife
10191On embedded PowerPC systems, assume that the startup module is called
10192@file{crt0.o} and the standard C libraries are @file{libyk.a} and
10193@file{libc.a}.
df6194d4 10194
39bc1876
NS
10195@item -mvxworks
10196@opindex mvxworks
10197On System V.4 and embedded PowerPC systems, specify that you are
10198compiling for a VxWorks system.
df6194d4 10199
39bc1876
NS
10200@item -mwindiss
10201@opindex mwindiss
10202Specify that you are compiling for the WindISS simulation environment.
df6194d4 10203
39bc1876
NS
10204@item -memb
10205@opindex memb
10206On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
10207header to indicate that @samp{eabi} extended relocations are used.
df6194d4 10208
39bc1876
NS
10209@item -meabi
10210@itemx -mno-eabi
10211@opindex meabi
10212@opindex mno-eabi
10213On System V.4 and embedded PowerPC systems do (do not) adhere to the
10214Embedded Applications Binary Interface (eabi) which is a set of
10215modifications to the System V.4 specifications. Selecting @option{-meabi}
10216means that the stack is aligned to an 8 byte boundary, a function
10217@code{__eabi} is called to from @code{main} to set up the eabi
10218environment, and the @option{-msdata} option can use both @code{r2} and
10219@code{r13} to point to two separate small data areas. Selecting
10220@option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
10221do not call an initialization function from @code{main}, and the
10222@option{-msdata} option will only use @code{r13} to point to a single
10223small data area. The @option{-meabi} option is on by default if you
10224configured GCC using one of the @samp{powerpc*-*-eabi*} options.
df6194d4 10225
39bc1876
NS
10226@item -msdata=eabi
10227@opindex msdata=eabi
10228On System V.4 and embedded PowerPC systems, put small initialized
10229@code{const} global and static data in the @samp{.sdata2} section, which
10230is pointed to by register @code{r2}. Put small initialized
10231non-@code{const} global and static data in the @samp{.sdata} section,
10232which is pointed to by register @code{r13}. Put small uninitialized
10233global and static data in the @samp{.sbss} section, which is adjacent to
10234the @samp{.sdata} section. The @option{-msdata=eabi} option is
10235incompatible with the @option{-mrelocatable} option. The
10236@option{-msdata=eabi} option also sets the @option{-memb} option.
df6194d4 10237
39bc1876
NS
10238@item -msdata=sysv
10239@opindex msdata=sysv
10240On System V.4 and embedded PowerPC systems, put small global and static
10241data in the @samp{.sdata} section, which is pointed to by register
10242@code{r13}. Put small uninitialized global and static data in the
10243@samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
10244The @option{-msdata=sysv} option is incompatible with the
10245@option{-mrelocatable} option.
df6194d4 10246
39bc1876 10247@item -msdata=default
df6194d4 10248@itemx -msdata
39bc1876 10249@opindex msdata=default
cd3bb277 10250@opindex msdata
39bc1876
NS
10251On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
10252compile code the same as @option{-msdata=eabi}, otherwise compile code the
10253same as @option{-msdata=sysv}.
df6194d4 10254
39bc1876
NS
10255@item -msdata-data
10256@opindex msdata-data
10257On System V.4 and embedded PowerPC systems, put small global and static
10258data in the @samp{.sdata} section. Put small uninitialized global and
10259static data in the @samp{.sbss} section. Do not use register @code{r13}
10260to address small data however. This is the default behavior unless
10261other @option{-msdata} options are used.
df6194d4 10262
39bc1876
NS
10263@item -msdata=none
10264@itemx -mno-sdata
10265@opindex msdata=none
10266@opindex mno-sdata
10267On embedded PowerPC systems, put all initialized global and static data
10268in the @samp{.data} section, and all uninitialized data in the
10269@samp{.bss} section.
df6194d4 10270
39bc1876
NS
10271@item -G @var{num}
10272@opindex G
10273@cindex smaller data references (PowerPC)
10274@cindex .sdata/.sdata2 references (PowerPC)
10275On embedded PowerPC systems, put global and static items less than or
10276equal to @var{num} bytes into the small data or bss sections instead of
10277the normal data or bss section. By default, @var{num} is 8. The
10278@option{-G @var{num}} switch is also passed to the linker.
10279All modules should be compiled with the same @option{-G @var{num}} value.
dcffbade 10280
39bc1876
NS
10281@item -mregnames
10282@itemx -mno-regnames
10283@opindex mregnames
10284@opindex mno-regnames
10285On System V.4 and embedded PowerPC systems do (do not) emit register
10286names in the assembly language output using symbolic forms.
dcffbade 10287
39bc1876
NS
10288@item -mlongcall
10289@itemx -mno-longcall
10290@opindex mlongcall
10291@opindex mno-longcall
10292Default to making all function calls indirectly, using a register, so
10293that functions which reside further than 32 megabytes (33,554,432
10294bytes) from the current location can be called. This setting can be
10295overridden by the @code{shortcall} function attribute, or by
10296@code{#pragma longcall(0)}.
dcffbade 10297
39bc1876
NS
10298Some linkers are capable of detecting out-of-range calls and generating
10299glue code on the fly. On these systems, long calls are unnecessary and
10300generate slower code. As of this writing, the AIX linker can do this,
10301as can the GNU linker for PowerPC/64. It is planned to add this feature
10302to the GNU linker for 32-bit PowerPC systems as well.
df6194d4 10303
39bc1876
NS
10304On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr
10305callee, L42'', plus a ``branch island'' (glue code). The two target
10306addresses represent the callee and the ``branch island.'' The
10307Darwin/PPC linker will prefer the first address and generate a ``bl
10308callee'' if the PPC ``bl'' instruction will reach the callee directly;
10309otherwise, the linker will generate ``bl L42'' to call the ``branch
10310island.'' The ``branch island'' is appended to the body of the
10311calling function; it computes the full 32-bit address of the callee
10312and jumps to it.
df6194d4 10313
39bc1876
NS
10314On Mach-O (Darwin) systems, this option directs the compiler emit to
10315the glue for every direct call, and the Darwin linker decides whether
10316to use or discard it.
10317
10318In the future, we may cause GCC to ignore all longcall specifications
10319when the linker is known to generate glue.
10320
10321@item -pthread
10322@opindex pthread
10323Adds support for multithreading with the @dfn{pthreads} library.
10324This option sets flags for both the preprocessor and linker.
30028c85 10325
df6194d4
JW
10326@end table
10327
91abf72d
HP
10328@node S/390 and zSeries Options
10329@subsection S/390 and zSeries Options
10330@cindex S/390 and zSeries Options
10331
10332These are the @samp{-m} options defined for the S/390 and zSeries architecture.
10333
10334@table @gcctabopt
10335@item -mhard-float
10336@itemx -msoft-float
10337@opindex mhard-float
10338@opindex msoft-float
10339Use (do not use) the hardware floating-point instructions and registers
10340for floating-point operations. When @option{-msoft-float} is specified,
10341functions in @file{libgcc.a} will be used to perform floating-point
10342operations. When @option{-mhard-float} is specified, the compiler
10343generates IEEE floating-point instructions. This is the default.
10344
10345@item -mbackchain
10346@itemx -mno-backchain
10347@opindex mbackchain
10348@opindex mno-backchain
f282ffb3 10349Generate (or do not generate) code which maintains an explicit
91abf72d 10350backchain within the stack frame that points to the caller's frame.
590fcf48
UW
10351This may be needed to allow debugging using tools that do not understand
10352DWARF-2 call frame information. The default is not to generate the
10353backchain.
91abf72d
HP
10354
10355@item -msmall-exec
10356@itemx -mno-small-exec
10357@opindex msmall-exec
10358@opindex mno-small-exec
f282ffb3
JM
10359Generate (or do not generate) code using the @code{bras} instruction
10360to do subroutine calls.
91abf72d
HP
10361This only works reliably if the total executable size does not
10362exceed 64k. The default is to use the @code{basr} instruction instead,
10363which does not have this limitation.
10364
10365@item -m64
10366@itemx -m31
10367@opindex m64
10368@opindex m31
10369When @option{-m31} is specified, generate code compliant to the
95fef11f
JM
10370GNU/Linux for S/390 ABI@. When @option{-m64} is specified, generate
10371code compliant to the GNU/Linux for zSeries ABI@. This allows GCC in
91abf72d 10372particular to generate 64-bit instructions. For the @samp{s390}
f282ffb3 10373targets, the default is @option{-m31}, while the @samp{s390x}
91abf72d
HP
10374targets default to @option{-m64}.
10375
1fec52be
HP
10376@item -mzarch
10377@itemx -mesa
10378@opindex mzarch
10379@opindex mesa
daf2f129
JM
10380When @option{-mzarch} is specified, generate code using the
10381instructions available on z/Architecture.
10382When @option{-mesa} is specified, generate code using the
1fec52be
HP
10383instructions available on ESA/390. Note that @option{-mesa} is
10384not possible with @option{-m64}.
95fef11f 10385When generating code compliant to the GNU/Linux for S/390 ABI,
f13e0d4e 10386the default is @option{-mesa}. When generating code compliant
95fef11f 10387to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
1fec52be 10388
91abf72d
HP
10389@item -mmvcle
10390@itemx -mno-mvcle
10391@opindex mmvcle
10392@opindex mno-mvcle
f282ffb3 10393Generate (or do not generate) code using the @code{mvcle} instruction
3364c33b 10394to perform block moves. When @option{-mno-mvcle} is specified,
91abf72d
HP
10395use a @code{mvc} loop instead. This is the default.
10396
10397@item -mdebug
10398@itemx -mno-debug
10399@opindex mdebug
10400@opindex mno-debug
10401Print (or do not print) additional debug information when compiling.
10402The default is to not print debug information.
10403
f13e0d4e 10404@item -march=@var{cpu-type}
1fec52be 10405@opindex march
f13e0d4e 10406Generate code that will run on @var{cpu-type}, which is the name of a system
1fec52be 10407representing a certain processor type. Possible values for
f13e0d4e
UW
10408@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}.
10409When generating code using the instructions available on z/Architecture,
10410the default is @option{-march=z900}. Otherwise, the default is
10411@option{-march=g5}.
1fec52be 10412
f13e0d4e 10413@item -mtune=@var{cpu-type}
35082351 10414@opindex mtune
1fec52be 10415Tune to @var{cpu-type} everything applicable about the generated code,
f13e0d4e
UW
10416except for the ABI and the set of available instructions.
10417The list of @var{cpu-type} values is the same as for @option{-march}.
10418The default is the value used for @option{-march}.
1fec52be 10419
f26c1794
EC
10420@item -mtpf-trace
10421@itemx -mno-tpf-trace
10422@opindex mtpf-trace
10423@opindex mno-tpf-trace
10424Generate code that adds (does not add) in TPF OS specific branches to trace
10425routines in the operating system. This option is off by default, even
10426when compiling for the TPF OS.
10427
f2d226e1
AK
10428@item -mfused-madd
10429@itemx -mno-fused-madd
10430@opindex mfused-madd
10431@opindex mno-fused-madd
10432Generate code that uses (does not use) the floating point multiply and
10433accumulate instructions. These instructions are generated by default if
10434hardware floating point is used.
91abf72d
HP
10435@end table
10436
39bc1876
NS
10437@node SH Options
10438@subsection SH Options
bcf684c7 10439
39bc1876 10440These @samp{-m} options are defined for the SH implementations:
bcf684c7 10441
5d22c1a5 10442@table @gcctabopt
39bc1876
NS
10443@item -m1
10444@opindex m1
10445Generate code for the SH1.
9f85bca7 10446
39bc1876
NS
10447@item -m2
10448@opindex m2
10449Generate code for the SH2.
9f85bca7 10450
39bc1876
NS
10451@item -m2e
10452Generate code for the SH2e.
9f85bca7 10453
39bc1876
NS
10454@item -m3
10455@opindex m3
10456Generate code for the SH3.
9f85bca7 10457
39bc1876
NS
10458@item -m3e
10459@opindex m3e
10460Generate code for the SH3e.
9f85bca7 10461
39bc1876
NS
10462@item -m4-nofpu
10463@opindex m4-nofpu
10464Generate code for the SH4 without a floating-point unit.
9f85bca7 10465
39bc1876
NS
10466@item -m4-single-only
10467@opindex m4-single-only
10468Generate code for the SH4 with a floating-point unit that only
10469supports single-precision arithmetic.
9f85bca7 10470
39bc1876
NS
10471@item -m4-single
10472@opindex m4-single
10473Generate code for the SH4 assuming the floating-point unit is in
10474single-precision mode by default.
9f85bca7 10475
39bc1876
NS
10476@item -m4
10477@opindex m4
10478Generate code for the SH4.
9f85bca7 10479
39bc1876
NS
10480@item -mb
10481@opindex mb
10482Compile code for the processor in big endian mode.
9f85bca7 10483
39bc1876
NS
10484@item -ml
10485@opindex ml
10486Compile code for the processor in little endian mode.
9f85bca7 10487
39bc1876
NS
10488@item -mdalign
10489@opindex mdalign
10490Align doubles at 64-bit boundaries. Note that this changes the calling
10491conventions, and thus some functions from the standard C library will
10492not work unless you recompile it first with @option{-mdalign}.
9f85bca7 10493
39bc1876
NS
10494@item -mrelax
10495@opindex mrelax
10496Shorten some address references at link time, when possible; uses the
10497linker option @option{-relax}.
9f85bca7 10498
39bc1876
NS
10499@item -mbigtable
10500@opindex mbigtable
10501Use 32-bit offsets in @code{switch} tables. The default is to use
1050216-bit offsets.
9f85bca7 10503
39bc1876
NS
10504@item -mfmovd
10505@opindex mfmovd
10506Enable the use of the instruction @code{fmovd}.
9f85bca7 10507
39bc1876
NS
10508@item -mhitachi
10509@opindex mhitachi
10510Comply with the calling conventions defined by Renesas.
9f85bca7 10511
39bc1876
NS
10512@item -mnomacsave
10513@opindex mnomacsave
10514Mark the @code{MAC} register as call-clobbered, even if
10515@option{-mhitachi} is given.
9f85bca7 10516
39bc1876
NS
10517@item -mieee
10518@opindex mieee
10519Increase IEEE-compliance of floating-point code.
9f85bca7 10520
39bc1876
NS
10521@item -misize
10522@opindex misize
10523Dump instruction size and location in the assembly code.
9f85bca7 10524
39bc1876
NS
10525@item -mpadstruct
10526@opindex mpadstruct
10527This option is deprecated. It pads structures to multiple of 4 bytes,
10528which is incompatible with the SH ABI@.
9f85bca7 10529
39bc1876
NS
10530@item -mspace
10531@opindex mspace
10532Optimize for space instead of speed. Implied by @option{-Os}.
9f85bca7 10533
39bc1876
NS
10534@item -mprefergot
10535@opindex mprefergot
10536When generating position-independent code, emit function calls using
10537the Global Offset Table instead of the Procedure Linkage Table.
9f85bca7 10538
39bc1876
NS
10539@item -musermode
10540@opindex musermode
10541Generate a library function call to invalidate instruction cache
10542entries, after fixing up a trampoline. This library function call
10543doesn't assume it can write to the whole memory address space. This
10544is the default when the target is @code{sh-*-linux*}.
9f85bca7
JM
10545@end table
10546
39bc1876
NS
10547@node SPARC Options
10548@subsection SPARC Options
10549@cindex SPARC options
69a0611f 10550
39bc1876 10551These @samp{-m} options are supported on the SPARC:
69a0611f
GK
10552
10553@table @gcctabopt
39bc1876
NS
10554@item -mno-app-regs
10555@itemx -mapp-regs
10556@opindex mno-app-regs
10557@opindex mapp-regs
10558Specify @option{-mapp-regs} to generate output using the global registers
105592 through 4, which the SPARC SVR4 ABI reserves for applications. This
10560is the default.
69a0611f 10561
39bc1876
NS
10562To be fully SVR4 ABI compliant at the cost of some performance loss,
10563specify @option{-mno-app-regs}. You should compile libraries and system
10564software with this option.
70899148 10565
39bc1876
NS
10566@item -mfpu
10567@itemx -mhard-float
10568@opindex mfpu
10569@opindex mhard-float
10570Generate output containing floating point instructions. This is the
10571default.
70899148 10572
39bc1876
NS
10573@item -mno-fpu
10574@itemx -msoft-float
10575@opindex mno-fpu
10576@opindex msoft-float
10577Generate output containing library calls for floating point.
10578@strong{Warning:} the requisite libraries are not available for all SPARC
10579targets. Normally the facilities of the machine's usual C compiler are
10580used, but this cannot be done directly in cross-compilation. You must make
10581your own arrangements to provide suitable library functions for
10582cross-compilation. The embedded targets @samp{sparc-*-aout} and
10583@samp{sparclite-*-*} do provide software floating point support.
70899148 10584
39bc1876
NS
10585@option{-msoft-float} changes the calling convention in the output file;
10586therefore, it is only useful if you compile @emph{all} of a program with
10587this option. In particular, you need to compile @file{libgcc.a}, the
10588library that comes with GCC, with @option{-msoft-float} in order for
10589this to work.
70899148 10590
39bc1876
NS
10591@item -mhard-quad-float
10592@opindex mhard-quad-float
10593Generate output containing quad-word (long double) floating point
10594instructions.
70899148 10595
39bc1876
NS
10596@item -msoft-quad-float
10597@opindex msoft-quad-float
10598Generate output containing library calls for quad-word (long double)
10599floating point instructions. The functions called are those specified
10600in the SPARC ABI@. This is the default.
70899148 10601
39bc1876
NS
10602As of this writing, there are no SPARC implementations that have hardware
10603support for the quad-word floating point instructions. They all invoke
10604a trap handler for one of these instructions, and then the trap handler
10605emulates the effect of the instruction. Because of the trap handler overhead,
10606this is much slower than calling the ABI library routines. Thus the
10607@option{-msoft-quad-float} option is the default.
70899148 10608
39bc1876
NS
10609@item -mno-unaligned-doubles
10610@itemx -munaligned-doubles
10611@opindex mno-unaligned-doubles
10612@opindex munaligned-doubles
10613Assume that doubles have 8 byte alignment. This is the default.
70899148 10614
39bc1876
NS
10615With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
10616alignment only if they are contained in another type, or if they have an
10617absolute address. Otherwise, it assumes they have 4 byte alignment.
10618Specifying this option avoids some rare compatibility problems with code
10619generated by other compilers. It is not the default because it results
10620in a performance loss, especially for floating point code.
70899148 10621
39bc1876
NS
10622@item -mno-faster-structs
10623@itemx -mfaster-structs
10624@opindex mno-faster-structs
10625@opindex mfaster-structs
10626With @option{-mfaster-structs}, the compiler assumes that structures
10627should have 8 byte alignment. This enables the use of pairs of
10628@code{ldd} and @code{std} instructions for copies in structure
10629assignment, in place of twice as many @code{ld} and @code{st} pairs.
10630However, the use of this changed alignment directly violates the SPARC
10631ABI@. Thus, it's intended only for use on targets where the developer
10632acknowledges that their resulting code will not be directly in line with
10633the rules of the ABI@.
70899148 10634
39bc1876
NS
10635@item -mimpure-text
10636@opindex mimpure-text
10637@option{-mimpure-text}, used in addition to @option{-shared}, tells
10638the compiler to not pass @option{-z text} to the linker when linking a
10639shared object. Using this option, you can link position-dependent
10640code into a shared object.
70899148 10641
39bc1876
NS
10642@option{-mimpure-text} suppresses the ``relocations remain against
10643allocatable but non-writable sections'' linker error message.
10644However, the necessary relocations will trigger copy-on-write, and the
10645shared object is not actually shared across processes. Instead of
10646using @option{-mimpure-text}, you should compile all source code with
10647@option{-fpic} or @option{-fPIC}.
10648
10649This option is only available on SunOS and Solaris.
10650
10651@item -mcpu=@var{cpu_type}
10652@opindex mcpu
10653Set the instruction set, register set, and instruction scheduling parameters
10654for machine type @var{cpu_type}. Supported values for @var{cpu_type} are
10655@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
10656@samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
10657@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, and
10658@samp{ultrasparc3}.
70899148 10659
39bc1876
NS
10660Default instruction scheduling parameters are used for values that select
10661an architecture and not an implementation. These are @samp{v7}, @samp{v8},
10662@samp{sparclite}, @samp{sparclet}, @samp{v9}.
70899148 10663
39bc1876
NS
10664Here is a list of each supported architecture and their supported
10665implementations.
70899148 10666
39bc1876
NS
10667@smallexample
10668 v7: cypress
10669 v8: supersparc, hypersparc
10670 sparclite: f930, f934, sparclite86x
10671 sparclet: tsc701
10672 v9: ultrasparc, ultrasparc3
10673@end smallexample
70899148 10674
39bc1876
NS
10675By default (unless configured otherwise), GCC generates code for the V7
10676variant of the SPARC architecture. With @option{-mcpu=cypress}, the compiler
10677additionally optimizes it for the Cypress CY7C602 chip, as used in the
10678SPARCStation/SPARCServer 3xx series. This is also appropriate for the older
10679SPARCStation 1, 2, IPX etc.
70899148 10680
39bc1876
NS
10681With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
10682architecture. The only difference from V7 code is that the compiler emits
10683the integer multiply and integer divide instructions which exist in SPARC-V8
10684but not in SPARC-V7. With @option{-mcpu=supersparc}, the compiler additionally
10685optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
106862000 series.
70899148 10687
39bc1876
NS
10688With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
10689the SPARC architecture. This adds the integer multiply, integer divide step
10690and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
10691With @option{-mcpu=f930}, the compiler additionally optimizes it for the
10692Fujitsu MB86930 chip, which is the original SPARClite, with no FPU. With
10693@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
10694MB86934 chip, which is the more recent SPARClite with FPU.
70899148 10695
39bc1876
NS
10696With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
10697the SPARC architecture. This adds the integer multiply, multiply/accumulate,
10698integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
10699but not in SPARC-V7. With @option{-mcpu=tsc701}, the compiler additionally
10700optimizes it for the TEMIC SPARClet chip.
70899148 10701
39bc1876
NS
10702With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
10703architecture. This adds 64-bit integer and floating-point move instructions,
107043 additional floating-point condition code registers and conditional move
10705instructions. With @option{-mcpu=ultrasparc}, the compiler additionally
10706optimizes it for the Sun UltraSPARC I/II chips. With
10707@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
10708Sun UltraSPARC III chip.
70899148 10709
39bc1876
NS
10710@item -mtune=@var{cpu_type}
10711@opindex mtune
10712Set the instruction scheduling parameters for machine type
10713@var{cpu_type}, but do not set the instruction set or register set that the
10714option @option{-mcpu=@var{cpu_type}} would.
70899148 10715
39bc1876
NS
10716The same values for @option{-mcpu=@var{cpu_type}} can be used for
10717@option{-mtune=@var{cpu_type}}, but the only useful values are those
10718that select a particular cpu implementation. Those are @samp{cypress},
10719@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
10720@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, and
10721@samp{ultrasparc3}.
70899148 10722
39bc1876
NS
10723@item -mv8plus
10724@itemx -mno-v8plus
10725@opindex mv8plus
10726@opindex mno-v8plus
10727With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI. The
10728difference from the V8 ABI is that the global and out registers are
10729considered 64-bit wide. This is enabled by default on Solaris in 32-bit
10730mode for all SPARC-V9 processors.
70899148 10731
39bc1876
NS
10732@item -mvis
10733@itemx -mno-vis
10734@opindex mvis
10735@opindex mno-vis
10736With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
10737Visual Instruction Set extensions. The default is @option{-mno-vis}.
10738@end table
70899148 10739
39bc1876
NS
10740These @samp{-m} options are supported in addition to the above
10741on SPARC-V9 processors in 64-bit environments:
70899148 10742
39bc1876
NS
10743@table @gcctabopt
10744@item -mlittle-endian
10745@opindex mlittle-endian
10746Generate code for a processor running in little-endian mode. It is only
10747available for a few configurations and most notably not on Solaris.
70899148 10748
39bc1876
NS
10749@item -m32
10750@itemx -m64
10751@opindex m32
10752@opindex m64
10753Generate code for a 32-bit or 64-bit environment.
10754The 32-bit environment sets int, long and pointer to 32 bits.
10755The 64-bit environment sets int to 32 bits and long and pointer
10756to 64 bits.
70899148 10757
39bc1876
NS
10758@item -mcmodel=medlow
10759@opindex mcmodel=medlow
10760Generate code for the Medium/Low code model: 64-bit addresses, programs
10761must be linked in the low 32 bits of memory. Programs can be statically
10762or dynamically linked.
70899148 10763
39bc1876
NS
10764@item -mcmodel=medmid
10765@opindex mcmodel=medmid
10766Generate code for the Medium/Middle code model: 64-bit addresses, programs
10767must be linked in the low 44 bits of memory, the text and data segments must
10768be less than 2GB in size and the data segment must be located within 2GB of
10769the text segment.
70899148 10770
39bc1876
NS
10771@item -mcmodel=medany
10772@opindex mcmodel=medany
10773Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
10774may be linked anywhere in memory, the text and data segments must be less
10775than 2GB in size and the data segment must be located within 2GB of the
10776text segment.
70899148 10777
39bc1876
NS
10778@item -mcmodel=embmedany
10779@opindex mcmodel=embmedany
10780Generate code for the Medium/Anywhere code model for embedded systems:
1078164-bit addresses, the text and data segments must be less than 2GB in
10782size, both starting anywhere in memory (determined at link time). The
10783global register %g4 points to the base of the data segment. Programs
10784are statically linked and PIC is not supported.
70899148 10785
39bc1876
NS
10786@item -mstack-bias
10787@itemx -mno-stack-bias
10788@opindex mstack-bias
10789@opindex mno-stack-bias
10790With @option{-mstack-bias}, GCC assumes that the stack pointer, and
10791frame pointer if present, are offset by @minus{}2047 which must be added back
10792when making stack frame references. This is the default in 64-bit mode.
10793Otherwise, assume no such offset is present.
10794@end table
70899148 10795
39bc1876
NS
10796@node System V Options
10797@subsection Options for System V
70899148 10798
39bc1876
NS
10799These additional options are available on System V Release 4 for
10800compatibility with other compilers on those systems:
70899148 10801
39bc1876
NS
10802@table @gcctabopt
10803@item -G
10804@opindex G
10805Create a shared object.
10806It is recommended that @option{-symbolic} or @option{-shared} be used instead.
70899148 10807
39bc1876
NS
10808@item -Qy
10809@opindex Qy
10810Identify the versions of each tool used by the compiler, in a
10811@code{.ident} assembler directive in the output.
70899148 10812
39bc1876
NS
10813@item -Qn
10814@opindex Qn
10815Refrain from adding @code{.ident} directives to the output file (this is
10816the default).
70899148 10817
39bc1876
NS
10818@item -YP,@var{dirs}
10819@opindex YP
10820Search the directories @var{dirs}, and no others, for libraries
10821specified with @option{-l}.
70899148 10822
39bc1876
NS
10823@item -Ym,@var{dir}
10824@opindex Ym
10825Look in the directory @var{dir} to find the M4 preprocessor.
10826The assembler uses this option.
10827@c This is supposed to go with a -Yd for predefined M4 macro files, but
10828@c the generic assembler that comes with Solaris takes just -Ym.
10829@end table
70899148 10830
39bc1876
NS
10831@node TMS320C3x/C4x Options
10832@subsection TMS320C3x/C4x Options
10833@cindex TMS320C3x/C4x Options
70899148 10834
39bc1876 10835These @samp{-m} options are defined for TMS320C3x/C4x implementations:
70899148 10836
39bc1876 10837@table @gcctabopt
70899148 10838
39bc1876
NS
10839@item -mcpu=@var{cpu_type}
10840@opindex mcpu
10841Set the instruction set, register set, and instruction scheduling
10842parameters for machine type @var{cpu_type}. Supported values for
10843@var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
10844@samp{c44}. The default is @samp{c40} to generate code for the
10845TMS320C40.
70899148 10846
39bc1876
NS
10847@item -mbig-memory
10848@itemx -mbig
10849@itemx -msmall-memory
10850@itemx -msmall
10851@opindex mbig-memory
10852@opindex mbig
10853@opindex msmall-memory
10854@opindex msmall
10855Generates code for the big or small memory model. The small memory
10856model assumed that all data fits into one 64K word page. At run-time
10857the data page (DP) register must be set to point to the 64K page
10858containing the .bss and .data program sections. The big memory model is
10859the default and requires reloading of the DP register for every direct
10860memory access.
70899148 10861
39bc1876
NS
10862@item -mbk
10863@itemx -mno-bk
10864@opindex mbk
10865@opindex mno-bk
10866Allow (disallow) allocation of general integer operands into the block
10867count register BK@.
70899148 10868
39bc1876
NS
10869@item -mdb
10870@itemx -mno-db
10871@opindex mdb
10872@opindex mno-db
10873Enable (disable) generation of code using decrement and branch,
10874DBcond(D), instructions. This is enabled by default for the C4x. To be
10875on the safe side, this is disabled for the C3x, since the maximum
10876iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than
10877@math{2^{23}} times on the C3x?). Note that GCC will try to reverse a loop so
10878that it can utilize the decrement and branch instruction, but will give
10879up if there is more than one memory reference in the loop. Thus a loop
10880where the loop counter is decremented can generate slightly more
10881efficient code, in cases where the RPTB instruction cannot be utilized.
70899148 10882
39bc1876
NS
10883@item -mdp-isr-reload
10884@itemx -mparanoid
10885@opindex mdp-isr-reload
10886@opindex mparanoid
10887Force the DP register to be saved on entry to an interrupt service
10888routine (ISR), reloaded to point to the data section, and restored on
10889exit from the ISR@. This should not be required unless someone has
10890violated the small memory model by modifying the DP register, say within
10891an object library.
70899148 10892
39bc1876
NS
10893@item -mmpyi
10894@itemx -mno-mpyi
10895@opindex mmpyi
10896@opindex mno-mpyi
10897For the C3x use the 24-bit MPYI instruction for integer multiplies
10898instead of a library call to guarantee 32-bit results. Note that if one
10899of the operands is a constant, then the multiplication will be performed
10900using shifts and adds. If the @option{-mmpyi} option is not specified for the C3x,
10901then squaring operations are performed inline instead of a library call.
70899148 10902
39bc1876
NS
10903@item -mfast-fix
10904@itemx -mno-fast-fix
10905@opindex mfast-fix
10906@opindex mno-fast-fix
10907The C3x/C4x FIX instruction to convert a floating point value to an
10908integer value chooses the nearest integer less than or equal to the
10909floating point value rather than to the nearest integer. Thus if the
10910floating point number is negative, the result will be incorrectly
10911truncated an additional code is necessary to detect and correct this
10912case. This option can be used to disable generation of the additional
10913code required to correct the result.
70899148 10914
39bc1876
NS
10915@item -mrptb
10916@itemx -mno-rptb
10917@opindex mrptb
10918@opindex mno-rptb
10919Enable (disable) generation of repeat block sequences using the RPTB
10920instruction for zero overhead looping. The RPTB construct is only used
10921for innermost loops that do not call functions or jump across the loop
10922boundaries. There is no advantage having nested RPTB loops due to the
10923overhead required to save and restore the RC, RS, and RE registers.
10924This is enabled by default with @option{-O2}.
70899148 10925
39bc1876
NS
10926@item -mrpts=@var{count}
10927@itemx -mno-rpts
10928@opindex mrpts
10929@opindex mno-rpts
10930Enable (disable) the use of the single instruction repeat instruction
10931RPTS@. If a repeat block contains a single instruction, and the loop
10932count can be guaranteed to be less than the value @var{count}, GCC will
10933emit a RPTS instruction instead of a RPTB@. If no value is specified,
10934then a RPTS will be emitted even if the loop count cannot be determined
10935at compile time. Note that the repeated instruction following RPTS does
10936not have to be reloaded from memory each iteration, thus freeing up the
10937CPU buses for operands. However, since interrupts are blocked by this
10938instruction, it is disabled by default.
70899148 10939
39bc1876
NS
10940@item -mloop-unsigned
10941@itemx -mno-loop-unsigned
10942@opindex mloop-unsigned
10943@opindex mno-loop-unsigned
10944The maximum iteration count when using RPTS and RPTB (and DB on the C40)
10945is @math{2^{31} + 1} since these instructions test if the iteration count is
10946negative to terminate the loop. If the iteration count is unsigned
10947there is a possibility than the @math{2^{31} + 1} maximum iteration count may be
10948exceeded. This switch allows an unsigned iteration count.
70899148 10949
39bc1876
NS
10950@item -mti
10951@opindex mti
10952Try to emit an assembler syntax that the TI assembler (asm30) is happy
10953with. This also enforces compatibility with the API employed by the TI
10954C3x C compiler. For example, long doubles are passed as structures
10955rather than in floating point registers.
70899148 10956
39bc1876
NS
10957@item -mregparm
10958@itemx -mmemparm
10959@opindex mregparm
10960@opindex mmemparm
10961Generate code that uses registers (stack) for passing arguments to functions.
10962By default, arguments are passed in registers where possible rather
10963than by pushing arguments on to the stack.
70899148 10964
39bc1876
NS
10965@item -mparallel-insns
10966@itemx -mno-parallel-insns
10967@opindex mparallel-insns
10968@opindex mno-parallel-insns
10969Allow the generation of parallel instructions. This is enabled by
10970default with @option{-O2}.
70899148 10971
39bc1876
NS
10972@item -mparallel-mpy
10973@itemx -mno-parallel-mpy
10974@opindex mparallel-mpy
10975@opindex mno-parallel-mpy
10976Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
10977provided @option{-mparallel-insns} is also specified. These instructions have
10978tight register constraints which can pessimize the code generation
10979of large functions.
70899148 10980
39bc1876 10981@end table
70899148 10982
39bc1876
NS
10983@node V850 Options
10984@subsection V850 Options
10985@cindex V850 Options
70899148 10986
39bc1876 10987These @samp{-m} options are defined for V850 implementations:
70899148 10988
39bc1876
NS
10989@table @gcctabopt
10990@item -mlong-calls
10991@itemx -mno-long-calls
10992@opindex mlong-calls
10993@opindex mno-long-calls
10994Treat all calls as being far away (near). If calls are assumed to be
10995far away, the compiler will always load the functions address up into a
10996register, and call indirect through the pointer.
70899148 10997
39bc1876
NS
10998@item -mno-ep
10999@itemx -mep
11000@opindex mno-ep
11001@opindex mep
11002Do not optimize (do optimize) basic blocks that use the same index
11003pointer 4 or more times to copy pointer into the @code{ep} register, and
11004use the shorter @code{sld} and @code{sst} instructions. The @option{-mep}
11005option is on by default if you optimize.
70899148 11006
39bc1876
NS
11007@item -mno-prolog-function
11008@itemx -mprolog-function
11009@opindex mno-prolog-function
11010@opindex mprolog-function
11011Do not use (do use) external functions to save and restore registers
11012at the prologue and epilogue of a function. The external functions
11013are slower, but use less code space if more than one function saves
11014the same number of registers. The @option{-mprolog-function} option
11015is on by default if you optimize.
70899148 11016
39bc1876
NS
11017@item -mspace
11018@opindex mspace
11019Try to make the code as small as possible. At present, this just turns
11020on the @option{-mep} and @option{-mprolog-function} options.
70899148 11021
39bc1876
NS
11022@item -mtda=@var{n}
11023@opindex mtda
11024Put static or global variables whose size is @var{n} bytes or less into
11025the tiny data area that register @code{ep} points to. The tiny data
11026area can hold up to 256 bytes in total (128 bytes for byte references).
70899148 11027
39bc1876
NS
11028@item -msda=@var{n}
11029@opindex msda
11030Put static or global variables whose size is @var{n} bytes or less into
11031the small data area that register @code{gp} points to. The small data
11032area can hold up to 64 kilobytes.
70899148 11033
39bc1876
NS
11034@item -mzda=@var{n}
11035@opindex mzda
11036Put static or global variables whose size is @var{n} bytes or less into
11037the first 32 kilobytes of memory.
70899148 11038
39bc1876
NS
11039@item -mv850
11040@opindex mv850
11041Specify that the target processor is the V850.
70899148 11042
39bc1876
NS
11043@item -mbig-switch
11044@opindex mbig-switch
11045Generate code suitable for big switch tables. Use this option only if
11046the assembler/linker complain about out of range branches within a switch
11047table.
70899148 11048
39bc1876
NS
11049@item -mapp-regs
11050@opindex mapp-regs
11051This option will cause r2 and r5 to be used in the code generated by
11052the compiler. This setting is the default.
70899148 11053
39bc1876
NS
11054@item -mno-app-regs
11055@opindex mno-app-regs
11056This option will cause r2 and r5 to be treated as fixed registers.
70899148 11057
39bc1876
NS
11058@item -mv850e1
11059@opindex mv850e1
11060Specify that the target processor is the V850E1. The preprocessor
11061constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
11062this option is used.
70899148 11063
39bc1876
NS
11064@item -mv850e
11065@opindex mv850e
11066Specify that the target processor is the V850E. The preprocessor
11067constant @samp{__v850e__} will be defined if this option is used.
70899148 11068
39bc1876
NS
11069If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
11070are defined then a default target processor will be chosen and the
11071relevant @samp{__v850*__} preprocessor constant will be defined.
70899148 11072
39bc1876
NS
11073The preprocessor constants @samp{__v850} and @samp{__v851__} are always
11074defined, regardless of which processor variant is the target.
70899148 11075
39bc1876
NS
11076@item -mdisable-callt
11077@opindex mdisable-callt
11078This option will suppress generation of the CALLT instruction for the
11079v850e and v850e1 flavors of the v850 architecture. The default is
11080@option{-mno-disable-callt} which allows the CALLT instruction to be used.
70899148 11081
39bc1876 11082@end table
70899148 11083
39bc1876
NS
11084@node VAX Options
11085@subsection VAX Options
11086@cindex VAX options
70899148 11087
39bc1876 11088These @samp{-m} options are defined for the VAX:
70899148 11089
39bc1876
NS
11090@table @gcctabopt
11091@item -munix
11092@opindex munix
11093Do not output certain jump instructions (@code{aobleq} and so on)
11094that the Unix assembler for the VAX cannot handle across long
11095ranges.
70899148 11096
39bc1876
NS
11097@item -mgnu
11098@opindex mgnu
11099Do output those jump instructions, on the assumption that you
11100will assemble with the GNU assembler.
70899148 11101
39bc1876
NS
11102@item -mg
11103@opindex mg
11104Output code for g-format floating point numbers instead of d-format.
11105@end table
70899148 11106
39bc1876
NS
11107@node x86-64 Options
11108@subsection x86-64 Options
11109@cindex x86-64 options
70899148 11110
39bc1876 11111These are listed under @xref{i386 and x86-64 Options}.
70899148 11112
39bc1876
NS
11113@node Xstormy16 Options
11114@subsection Xstormy16 Options
11115@cindex Xstormy16 Options
70899148 11116
39bc1876 11117These options are defined for Xstormy16:
70899148 11118
39bc1876
NS
11119@table @gcctabopt
11120@item -msim
11121@opindex msim
11122Choose startup files and linker script suitable for the simulator.
70899148
BS
11123@end table
11124
03984308
BW
11125@node Xtensa Options
11126@subsection Xtensa Options
11127@cindex Xtensa Options
11128
6cedbe44 11129These options are supported for Xtensa targets:
03984308
BW
11130
11131@table @gcctabopt
f42f5a1b
BW
11132@item -mconst16
11133@itemx -mno-const16
11134@opindex mconst16
11135@opindex mno-const16
6c2e8d1c
BW
11136Enable or disable use of @code{CONST16} instructions for loading
11137constant values. The @code{CONST16} instruction is currently not a
11138standard option from Tensilica. When enabled, @code{CONST16}
11139instructions are always used in place of the standard @code{L32R}
11140instructions. The use of @code{CONST16} is enabled by default only if
11141the @code{L32R} instruction is not available.
11142
03984308
BW
11143@item -mfused-madd
11144@itemx -mno-fused-madd
11145@opindex mfused-madd
11146@opindex mno-fused-madd
11147Enable or disable use of fused multiply/add and multiply/subtract
11148instructions in the floating-point option. This has no effect if the
11149floating-point option is not also enabled. Disabling fused multiply/add
11150and multiply/subtract instructions forces the compiler to use separate
11151instructions for the multiply and add/subtract operations. This may be
11152desirable in some cases where strict IEEE 754-compliant results are
11153required: the fused multiply add/subtract instructions do not round the
11154intermediate result, thereby producing results with @emph{more} bits of
11155precision than specified by the IEEE standard. Disabling fused multiply
11156add/subtract instructions also ensures that the program output is not
11157sensitive to the compiler's ability to combine multiply and add/subtract
11158operations.
11159
03984308
BW
11160@item -mtext-section-literals
11161@itemx -mno-text-section-literals
11162@opindex mtext-section-literals
11163@opindex mno-text-section-literals
11164Control the treatment of literal pools. The default is
11165@option{-mno-text-section-literals}, which places literals in a separate
11166section in the output file. This allows the literal pool to be placed
11167in a data RAM/ROM, and it also allows the linker to combine literal
11168pools from separate object files to remove redundant literals and
11169improve code size. With @option{-mtext-section-literals}, the literals
11170are interspersed in the text section in order to keep them as close as
11171possible to their references. This may be necessary for large assembly
11172files.
11173
11174@item -mtarget-align
11175@itemx -mno-target-align
11176@opindex mtarget-align
11177@opindex mno-target-align
11178When this option is enabled, GCC instructs the assembler to
11179automatically align instructions to reduce branch penalties at the
11180expense of some code density. The assembler attempts to widen density
11181instructions to align branch targets and the instructions following call
11182instructions. If there are not enough preceding safe density
11183instructions to align a target, no widening will be performed. The
11184default is @option{-mtarget-align}. These options do not affect the
11185treatment of auto-aligned instructions like @code{LOOP}, which the
11186assembler will always align, either by widening density instructions or
11187by inserting no-op instructions.
11188
11189@item -mlongcalls
11190@itemx -mno-longcalls
11191@opindex mlongcalls
11192@opindex mno-longcalls
11193When this option is enabled, GCC instructs the assembler to translate
11194direct calls to indirect calls unless it can determine that the target
11195of a direct call is in the range allowed by the call instruction. This
11196translation typically occurs for calls to functions in other source
11197files. Specifically, the assembler translates a direct @code{CALL}
11198instruction into an @code{L32R} followed by a @code{CALLX} instruction.
11199The default is @option{-mno-longcalls}. This option should be used in
11200programs where the call target can potentially be out of range. This
11201option is implemented in the assembler, not the compiler, so the
11202assembly code generated by GCC will still show direct call
11203instructions---look at the disassembled object code to see the actual
11204instructions. Note that the assembler will use an indirect call for
11205every cross-file call, not just those that really will be out of range.
11206@end table
11207
39bc1876
NS
11208@node zSeries Options
11209@subsection zSeries Options
11210@cindex zSeries options
11211
11212These are listed under @xref{S/390 and zSeries Options}.
11213
74291a4b
MM
11214@node Code Gen Options
11215@section Options for Code Generation Conventions
11216@cindex code generation conventions
11217@cindex options, code generation
11218@cindex run-time options
11219
11220These machine-independent options control the interface conventions
11221used in code generation.
11222
11223Most of them have both positive and negative forms; the negative form
630d3d5a 11224of @option{-ffoo} would be @option{-fno-foo}. In the table below, only
74291a4b
MM
11225one of the forms is listed---the one which is not the default. You
11226can figure out the other form by either removing @samp{no-} or adding
11227it.
11228
2642624b 11229@table @gcctabopt
d4463dfc
JQ
11230@item -fbounds-check
11231@opindex fbounds-check
11232For front-ends that support it, generate additional code to check that
11233indices used to access arrays are within the declared range. This is
11234currently only supported by the Java and Fortran 77 front-ends, where
11235this option defaults to true and false respectively.
11236
11237@item -ftrapv
11238@opindex ftrapv
11239This option generates traps for signed overflow on addition, subtraction,
11240multiplication operations.
11241
4fa26a60
RS
11242@item -fwrapv
11243@opindex fwrapv
11244This option instructs the compiler to assume that signed arithmetic
11245overflow of addition, subtraction and multiplication wraps around
c0cbdbd9 11246using twos-complement representation. This flag enables some optimizations
4fa26a60
RS
11247and disables other. This option is enabled by default for the Java
11248front-end, as required by the Java language specification.
11249
956d6950 11250@item -fexceptions
cd3bb277 11251@opindex fexceptions
767094dd 11252Enable exception handling. Generates extra code needed to propagate
f0523f02 11253exceptions. For some targets, this implies GCC will generate frame
c5c76735
JL
11254unwind information for all functions, which can produce significant data
11255size overhead, although it does not affect execution. If you do not
f0523f02 11256specify this option, GCC will enable it by default for languages like
90ecce3e 11257C++ which normally require exception handling, and disable it for
c5c76735
JL
11258languages like C that do not normally require it. However, you may need
11259to enable this option when compiling C code that needs to interoperate
11260properly with exception handlers written in C++. You may also wish to
11261disable this option if you are compiling older C++ programs that don't
11262use exception handling.
956d6950 11263
6cfc0341
RH
11264@item -fnon-call-exceptions
11265@opindex fnon-call-exceptions
11266Generate code that allows trapping instructions to throw exceptions.
11267Note that this requires platform-specific runtime support that does
11268not exist everywhere. Moreover, it only allows @emph{trapping}
e979f9e8 11269instructions to throw exceptions, i.e.@: memory references or floating
6cfc0341
RH
11270point instructions. It does not allow exceptions to be thrown from
11271arbitrary signal handlers such as @code{SIGALRM}.
11272
14a774a9 11273@item -funwind-tables
cd3bb277 11274@opindex funwind-tables
bedc7537 11275Similar to @option{-fexceptions}, except that it will just generate any needed
14a774a9
RK
11276static data, but will not affect the generated code in any other way.
11277You will normally not enable this option; instead, a language processor
11278that needs this handling would enable it on your behalf.
11279
b932f770
JH
11280@item -fasynchronous-unwind-tables
11281@opindex funwind-tables
11282Generate unwind table in dwarf2 format, if supported by target machine. The
11283table is exact at each instruction boundary, so it can be used for stack
11284unwinding from asynchronous events (such as debugger or garbage collector).
11285
74291a4b 11286@item -fpcc-struct-return
cd3bb277 11287@opindex fpcc-struct-return
74291a4b
MM
11288Return ``short'' @code{struct} and @code{union} values in memory like
11289longer ones, rather than in registers. This convention is less
11290efficient, but it has the advantage of allowing intercallability between
a9c60612
JJ
11291GCC-compiled files and files compiled with other compilers, particularly
11292the Portable C Compiler (pcc).
74291a4b
MM
11293
11294The precise convention for returning structures in memory depends
11295on the target configuration macros.
11296
11297Short structures and unions are those whose size and alignment match
11298that of some integer type.
11299
a9c60612
JJ
11300@strong{Warning:} code compiled with the @option{-fpcc-struct-return}
11301switch is not binary compatible with code compiled with the
11302@option{-freg-struct-return} switch.
11303Use it to conform to a non-default application binary interface.
11304
74291a4b 11305@item -freg-struct-return
cd3bb277 11306@opindex freg-struct-return
9c34dbbf
ZW
11307Return @code{struct} and @code{union} values in registers when possible.
11308This is more efficient for small structures than
11309@option{-fpcc-struct-return}.
74291a4b 11310
9c34dbbf 11311If you specify neither @option{-fpcc-struct-return} nor
630d3d5a 11312@option{-freg-struct-return}, GCC defaults to whichever convention is
0c2d1a2a 11313standard for the target. If there is no standard convention, GCC
9c34dbbf
ZW
11314defaults to @option{-fpcc-struct-return}, except on targets where GCC is
11315the principal compiler. In those cases, we can choose the standard, and
11316we chose the more efficient register return alternative.
74291a4b 11317
a9c60612
JJ
11318@strong{Warning:} code compiled with the @option{-freg-struct-return}
11319switch is not binary compatible with code compiled with the
11320@option{-fpcc-struct-return} switch.
11321Use it to conform to a non-default application binary interface.
11322
74291a4b 11323@item -fshort-enums
cd3bb277 11324@opindex fshort-enums
74291a4b
MM
11325Allocate to an @code{enum} type only as many bytes as it needs for the
11326declared range of possible values. Specifically, the @code{enum} type
11327will be equivalent to the smallest integer type which has enough room.
11328
a9c60612
JJ
11329@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
11330code that is not binary compatible with code generated without that switch.
11331Use it to conform to a non-default application binary interface.
11332
74291a4b 11333@item -fshort-double
cd3bb277 11334@opindex fshort-double
74291a4b
MM
11335Use the same size for @code{double} as for @code{float}.
11336
a9c60612
JJ
11337@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
11338code that is not binary compatible with code generated without that switch.
11339Use it to conform to a non-default application binary interface.
11340
11341@item -fshort-wchar
11342@opindex fshort-wchar
11343Override the underlying type for @samp{wchar_t} to be @samp{short
11344unsigned int} instead of the default for the target. This option is
11345useful for building programs to run under WINE@.
11346
11347@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
11348code that is not binary compatible with code generated without that switch.
11349Use it to conform to a non-default application binary interface.
11350
74291a4b 11351@item -fshared-data
cd3bb277 11352@opindex fshared-data
74291a4b
MM
11353Requests that the data and non-@code{const} variables of this
11354compilation be shared data rather than private data. The distinction
11355makes sense only on certain operating systems, where shared data is
11356shared between processes running the same program, while private data
11357exists in one copy per process.
11358
11359@item -fno-common
cd3bb277 11360@opindex fno-common
90ecce3e 11361In C, allocate even uninitialized global variables in the data section of the
74291a4b
MM
11362object file, rather than generating them as common blocks. This has the
11363effect that if the same variable is declared (without @code{extern}) in
11364two different compilations, you will get an error when you link them.
11365The only reason this might be useful is if you wish to verify that the
11366program will work on other systems which always work this way.
11367
11368@item -fno-ident
cd3bb277 11369@opindex fno-ident
74291a4b
MM
11370Ignore the @samp{#ident} directive.
11371
74291a4b 11372@item -finhibit-size-directive
cd3bb277 11373@opindex finhibit-size-directive
74291a4b
MM
11374Don't output a @code{.size} assembler directive, or anything else that
11375would cause trouble if the function is split in the middle, and the
11376two halves are placed at locations far apart in memory. This option is
11377used when compiling @file{crtstuff.c}; you should not need to use it
11378for anything else.
11379
11380@item -fverbose-asm
cd3bb277 11381@opindex fverbose-asm
74291a4b
MM
11382Put extra commentary information in the generated assembly code to
11383make it more readable. This option is generally only of use to those
11384who actually need to read the generated assembly code (perhaps while
11385debugging the compiler itself).
11386
630d3d5a 11387@option{-fno-verbose-asm}, the default, causes the
74291a4b
MM
11388extra information to be omitted and is useful when comparing two assembler
11389files.
11390
74291a4b 11391@item -fpic
cd3bb277 11392@opindex fpic
74291a4b
MM
11393@cindex global offset table
11394@cindex PIC
11395Generate position-independent code (PIC) suitable for use in a shared
11396library, if supported for the target machine. Such code accesses all
161d7b59 11397constant addresses through a global offset table (GOT)@. The dynamic
861bb6c1 11398loader resolves the GOT entries when the program starts (the dynamic
0c2d1a2a 11399loader is not part of GCC; it is part of the operating system). If
861bb6c1
JL
11400the GOT size for the linked executable exceeds a machine-specific
11401maximum size, you get an error message from the linker indicating that
630d3d5a 11402@option{-fpic} does not work; in that case, recompile with @option{-fPIC}
b6e69d94 11403instead. (These maximums are 8k on the SPARC and 32k
861bb6c1 11404on the m68k and RS/6000. The 386 has no such limit.)
74291a4b
MM
11405
11406Position-independent code requires special support, and therefore works
0c2d1a2a 11407only on certain machines. For the 386, GCC supports PIC for System V
74291a4b
MM
11408but not for the Sun 386i. Code generated for the IBM RS/6000 is always
11409position-independent.
11410
74291a4b 11411@item -fPIC
cd3bb277 11412@opindex fPIC
74291a4b
MM
11413If supported for the target machine, emit position-independent code,
11414suitable for dynamic linking and avoiding any limit on the size of the
b6e69d94 11415global offset table. This option makes a difference on the m68k
981f6289 11416and the SPARC.
74291a4b
MM
11417
11418Position-independent code requires special support, and therefore works
11419only on certain machines.
11420
24a4dd31
JJ
11421@item -fpie
11422@itemx -fPIE
11423@opindex fpie
11424@opindex fPIE
11425These options are similar to @option{-fpic} and @option{-fPIC}, but
11426generated position independent code can be only linked into executables.
11427Usually these options are used when @option{-pie} GCC option will be
11428used during linking.
11429
74291a4b 11430@item -ffixed-@var{reg}
cd3bb277 11431@opindex ffixed
74291a4b
MM
11432Treat the register named @var{reg} as a fixed register; generated code
11433should never refer to it (except perhaps as a stack pointer, frame
11434pointer or in some other fixed role).
11435
11436@var{reg} must be the name of a register. The register names accepted
11437are machine-specific and are defined in the @code{REGISTER_NAMES}
11438macro in the machine description macro file.
11439
11440This flag does not have a negative form, because it specifies a
11441three-way choice.
11442
11443@item -fcall-used-@var{reg}
cd3bb277 11444@opindex fcall-used
956d6950 11445Treat the register named @var{reg} as an allocable register that is
74291a4b
MM
11446clobbered by function calls. It may be allocated for temporaries or
11447variables that do not live across a call. Functions compiled this way
11448will not save and restore the register @var{reg}.
11449
cb2fdc84
GRK
11450It is an error to used this flag with the frame pointer or stack pointer.
11451Use of this flag for other registers that have fixed pervasive roles in
11452the machine's execution model will produce disastrous results.
74291a4b
MM
11453
11454This flag does not have a negative form, because it specifies a
11455three-way choice.
11456
11457@item -fcall-saved-@var{reg}
cd3bb277 11458@opindex fcall-saved
956d6950 11459Treat the register named @var{reg} as an allocable register saved by
74291a4b
MM
11460functions. It may be allocated even for temporaries or variables that
11461live across a call. Functions compiled this way will save and restore
11462the register @var{reg} if they use it.
11463
cb2fdc84
GRK
11464It is an error to used this flag with the frame pointer or stack pointer.
11465Use of this flag for other registers that have fixed pervasive roles in
11466the machine's execution model will produce disastrous results.
74291a4b
MM
11467
11468A different sort of disaster will result from the use of this flag for
11469a register in which function values may be returned.
11470
11471This flag does not have a negative form, because it specifies a
11472three-way choice.
11473
11474@item -fpack-struct
cd3bb277 11475@opindex fpack-struct
a9c60612
JJ
11476Pack all structure members together without holes.
11477
11478@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
11479code that is not binary compatible with code generated without that switch.
3364c33b 11480Additionally, it makes the code suboptimal.
a9c60612 11481Use it to conform to a non-default application binary interface.
74291a4b 11482
07417085 11483@item -finstrument-functions
cd3bb277 11484@opindex finstrument-functions
07417085
KR
11485Generate instrumentation calls for entry and exit to functions. Just
11486after function entry and just before function exit, the following
11487profiling functions will be called with the address of the current
11488function and its call site. (On some platforms,
11489@code{__builtin_return_address} does not work beyond the current
11490function, so the call site information may not be available to the
11491profiling functions otherwise.)
11492
3ab51846 11493@smallexample
310668e8
JM
11494void __cyg_profile_func_enter (void *this_fn,
11495 void *call_site);
11496void __cyg_profile_func_exit (void *this_fn,
11497 void *call_site);
3ab51846 11498@end smallexample
07417085
KR
11499
11500The first argument is the address of the start of the current function,
11501which may be looked up exactly in the symbol table.
11502
11503This instrumentation is also done for functions expanded inline in other
11504functions. The profiling calls will indicate where, conceptually, the
11505inline function is entered and exited. This means that addressable
11506versions of such functions must be available. If all your uses of a
11507function are expanded inline, this may mean an additional expansion of
11508code size. If you use @samp{extern inline} in your C code, an
11509addressable version of such functions must be provided. (This is
11510normally the case anyways, but if you get lucky and the optimizer always
11511expands the functions inline, you might have gotten away without
11512providing static copies.)
11513
11514A function may be given the attribute @code{no_instrument_function}, in
11515which case this instrumentation will not be done. This can be used, for
11516example, for the profiling functions listed above, high-priority
11517interrupt routines, and any functions from which the profiling functions
11518cannot safely be called (perhaps signal handlers, if the profiling
11519routines generate output or allocate memory).
11520
861bb6c1 11521@item -fstack-check
cd3bb277 11522@opindex fstack-check
861bb6c1
JL
11523Generate code to verify that you do not go beyond the boundary of the
11524stack. You should specify this flag if you are running in an
11525environment with multiple threads, but only rarely need to specify it in
11526a single-threaded environment since stack overflow is automatically
11527detected on nearly all systems if there is only one stack.
11528
a157febd
GK
11529Note that this switch does not actually cause checking to be done; the
11530operating system must do that. The switch causes generation of code
11531to ensure that the operating system sees the stack being extended.
11532
11533@item -fstack-limit-register=@var{reg}
11534@itemx -fstack-limit-symbol=@var{sym}
11535@itemx -fno-stack-limit
cd3bb277
JM
11536@opindex fstack-limit-register
11537@opindex fstack-limit-symbol
11538@opindex fno-stack-limit
a157febd
GK
11539Generate code to ensure that the stack does not grow beyond a certain value,
11540either the value of a register or the address of a symbol. If the stack
11541would grow beyond the value, a signal is raised. For most targets,
11542the signal is raised before the stack overruns the boundary, so
11543it is possible to catch the signal without taking special precautions.
11544
9c34dbbf
ZW
11545For instance, if the stack starts at absolute address @samp{0x80000000}
11546and grows downwards, you can use the flags
11547@option{-fstack-limit-symbol=__stack_limit} and
11548@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
11549of 128KB@. Note that this may only work with the GNU linker.
a157febd 11550
e5eb27e5
JL
11551@cindex aliasing of parameters
11552@cindex parameters, aliased
11553@item -fargument-alias
04afd9d6
JL
11554@itemx -fargument-noalias
11555@itemx -fargument-noalias-global
cd3bb277
JM
11556@opindex fargument-alias
11557@opindex fargument-noalias
11558@opindex fargument-noalias-global
e5eb27e5
JL
11559Specify the possible relationships among parameters and between
11560parameters and global data.
11561
630d3d5a 11562@option{-fargument-alias} specifies that arguments (parameters) may
9c34dbbf 11563alias each other and may alias global storage.@*
630d3d5a 11564@option{-fargument-noalias} specifies that arguments do not alias
9c34dbbf 11565each other, but may alias global storage.@*
630d3d5a 11566@option{-fargument-noalias-global} specifies that arguments do not
e5eb27e5
JL
11567alias each other and do not alias global storage.
11568
11569Each language will automatically use whatever option is required by
11570the language standard. You should not need to use these options yourself.
19283265
RH
11571
11572@item -fleading-underscore
cd3bb277 11573@opindex fleading-underscore
695ac33f 11574This option and its counterpart, @option{-fno-leading-underscore}, forcibly
19283265
RH
11575change the way C symbols are represented in the object file. One use
11576is to help link with legacy assembly code.
11577
a9c60612
JJ
11578@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
11579generate code that is not binary compatible with code generated without that
11580switch. Use it to conform to a non-default application binary interface.
11581Not all targets provide complete support for this switch.
3d78f2e9
RH
11582
11583@item -ftls-model=@var{model}
11584Alter the thread-local storage model to be used (@pxref{Thread-Local}).
11585The @var{model} argument should be one of @code{global-dynamic},
11586@code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
11587
11588The default without @option{-fpic} is @code{initial-exec}; with
11589@option{-fpic} the default is @code{global-dynamic}.
74291a4b
MM
11590@end table
11591
ee457005
JM
11592@c man end
11593
74291a4b 11594@node Environment Variables
0c2d1a2a 11595@section Environment Variables Affecting GCC
74291a4b
MM
11596@cindex environment variables
11597
ee457005 11598@c man begin ENVIRONMENT
0c2d1a2a
JB
11599This section describes several environment variables that affect how GCC
11600operates. Some of them work by specifying directories or prefixes to use
767094dd 11601when searching for various kinds of files. Some are used to specify other
46103ab4 11602aspects of the compilation environment.
74291a4b 11603
74291a4b 11604Note that you can also specify places to search using options such as
630d3d5a 11605@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These
74291a4b 11606take precedence over places specified using environment variables, which
161d7b59 11607in turn take precedence over those specified by the configuration of GCC@.
b11cc610
JM
11608@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
11609GNU Compiler Collection (GCC) Internals}.
74291a4b 11610
bedc7537 11611@table @env
ab87f8c8
JL
11612@item LANG
11613@itemx LC_CTYPE
11614@c @itemx LC_COLLATE
11615@itemx LC_MESSAGES
11616@c @itemx LC_MONETARY
11617@c @itemx LC_NUMERIC
11618@c @itemx LC_TIME
11619@itemx LC_ALL
11620@findex LANG
11621@findex LC_CTYPE
11622@c @findex LC_COLLATE
11623@findex LC_MESSAGES
11624@c @findex LC_MONETARY
11625@c @findex LC_NUMERIC
11626@c @findex LC_TIME
11627@findex LC_ALL
11628@cindex locale
0c2d1a2a
JB
11629These environment variables control the way that GCC uses
11630localization information that allow GCC to work with different
11631national conventions. GCC inspects the locale categories
bedc7537 11632@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
ab87f8c8
JL
11633so. These locale categories can be set to any value supported by your
11634installation. A typical value is @samp{en_UK} for English in the United
11635Kingdom.
11636
bedc7537 11637The @env{LC_CTYPE} environment variable specifies character
0c2d1a2a 11638classification. GCC uses it to determine the character boundaries in
ab87f8c8
JL
11639a string; this is needed for some multibyte encodings that contain quote
11640and escape characters that would otherwise be interpreted as a string
11641end or escape.
11642
bedc7537 11643The @env{LC_MESSAGES} environment variable specifies the language to
ab87f8c8
JL
11644use in diagnostic messages.
11645
bedc7537
NC
11646If the @env{LC_ALL} environment variable is set, it overrides the value
11647of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
11648and @env{LC_MESSAGES} default to the value of the @env{LANG}
0c2d1a2a 11649environment variable. If none of these variables are set, GCC
ab87f8c8
JL
11650defaults to traditional C English behavior.
11651
74291a4b
MM
11652@item TMPDIR
11653@findex TMPDIR
bedc7537 11654If @env{TMPDIR} is set, it specifies the directory to use for temporary
0c2d1a2a 11655files. GCC uses temporary files to hold the output of one stage of
74291a4b
MM
11656compilation which is to be used as input to the next stage: for example,
11657the output of the preprocessor, which is the input to the compiler
11658proper.
11659
11660@item GCC_EXEC_PREFIX
11661@findex GCC_EXEC_PREFIX
bedc7537 11662If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
74291a4b
MM
11663names of the subprograms executed by the compiler. No slash is added
11664when this prefix is combined with the name of a subprogram, but you can
11665specify a prefix that ends with a slash if you wish.
11666
f0523f02 11667If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
0deb20df
TT
11668an appropriate prefix to use based on the pathname it was invoked with.
11669
0c2d1a2a 11670If GCC cannot find the subprogram using the specified prefix, it
74291a4b
MM
11671tries looking in the usual places for the subprogram.
11672
bedc7537 11673The default value of @env{GCC_EXEC_PREFIX} is
8e5f33ff 11674@file{@var{prefix}/lib/gcc/} where @var{prefix} is the value
74291a4b
MM
11675of @code{prefix} when you ran the @file{configure} script.
11676
630d3d5a 11677Other prefixes specified with @option{-B} take precedence over this prefix.
74291a4b
MM
11678
11679This prefix is also used for finding files such as @file{crt0.o} that are
11680used for linking.
11681
11682In addition, the prefix is used in an unusual way in finding the
11683directories to search for header files. For each of the standard
8e5f33ff 11684directories whose name normally begins with @samp{/usr/local/lib/gcc}
bedc7537 11685(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
74291a4b 11686replacing that beginning with the specified prefix to produce an
630d3d5a 11687alternate directory name. Thus, with @option{-Bfoo/}, GCC will search
74291a4b
MM
11688@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
11689These alternate directories are searched first; the standard directories
11690come next.
11691
11692@item COMPILER_PATH
11693@findex COMPILER_PATH
bedc7537
NC
11694The value of @env{COMPILER_PATH} is a colon-separated list of
11695directories, much like @env{PATH}. GCC tries the directories thus
74291a4b 11696specified when searching for subprograms, if it can't find the
bedc7537 11697subprograms using @env{GCC_EXEC_PREFIX}.
74291a4b
MM
11698
11699@item LIBRARY_PATH
11700@findex LIBRARY_PATH
bedc7537
NC
11701The value of @env{LIBRARY_PATH} is a colon-separated list of
11702directories, much like @env{PATH}. When configured as a native compiler,
0c2d1a2a 11703GCC tries the directories thus specified when searching for special
bedc7537 11704linker files, if it can't find them using @env{GCC_EXEC_PREFIX}. Linking
0c2d1a2a 11705using GCC also uses these directories when searching for ordinary
630d3d5a
JM
11706libraries for the @option{-l} option (but directories specified with
11707@option{-L} come first).
74291a4b 11708
56f48ce9
DB
11709@item LANG
11710@findex LANG
11711@cindex locale definition
767094dd 11712This variable is used to pass locale information to the compiler. One way in
56f48ce9
DB
11713which this information is used is to determine the character set to be used
11714when character literals, string literals and comments are parsed in C and C++.
11715When the compiler is configured to allow multibyte characters,
bedc7537 11716the following values for @env{LANG} are recognized:
56f48ce9 11717
2642624b 11718@table @samp
56f48ce9
DB
11719@item C-JIS
11720Recognize JIS characters.
11721@item C-SJIS
11722Recognize SJIS characters.
11723@item C-EUCJP
11724Recognize EUCJP characters.
11725@end table
11726
bedc7537 11727If @env{LANG} is not defined, or if it has some other value, then the
56f48ce9
DB
11728compiler will use mblen and mbtowc as defined by the default locale to
11729recognize and translate multibyte characters.
74291a4b
MM
11730@end table
11731
40adaa27
NB
11732@noindent
11733Some additional environments variables affect the behavior of the
11734preprocessor.
11735
11736@include cppenv.texi
11737
9d86bffc
JM
11738@c man end
11739
17211ab5
GK
11740@node Precompiled Headers
11741@section Using Precompiled Headers
11742@cindex precompiled headers
11743@cindex speed of compilation
11744
11745Often large projects have many header files that are included in every
11746source file. The time the compiler takes to process these header files
11747over and over again can account for nearly all of the time required to
11748build the project. To make builds faster, GCC allows users to
11749`precompile' a header file; then, if builds can use the precompiled
11750header file they will be much faster.
11751
f7b6f250
MM
11752@strong{Caution:} There are a few known situations where GCC will
11753crash when trying to use a precompiled header. If you have trouble
11754with a precompiled header, you should remove the precompiled header
11755and compile without it. In addition, please use GCC's on-line
11756defect-tracking system to report any problems you encounter with
11757precompiled headers. @xref{Bugs}.
11758
17211ab5
GK
11759To create a precompiled header file, simply compile it as you would any
11760other file, if necessary using the @option{-x} option to make the driver
11761treat it as a C or C++ header file. You will probably want to use a
11762tool like @command{make} to keep the precompiled header up-to-date when
11763the headers it contains change.
11764
11765A precompiled header file will be searched for when @code{#include} is
11766seen in the compilation. As it searches for the included file
24726b96 11767(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
17211ab5
GK
11768compiler looks for a precompiled header in each directory just before it
11769looks for the include file in that directory. The name searched for is
d8fad4ea 11770the name specified in the @code{#include} with @samp{.gch} appended. If
17211ab5
GK
11771the precompiled header file can't be used, it is ignored.
11772
11773For instance, if you have @code{#include "all.h"}, and you have
d8fad4ea 11774@file{all.h.gch} in the same directory as @file{all.h}, then the
17211ab5
GK
11775precompiled header file will be used if possible, and the original
11776header will be used otherwise.
11777
11778Alternatively, you might decide to put the precompiled header file in a
11779directory and use @option{-I} to ensure that directory is searched
11780before (or instead of) the directory containing the original header.
11781Then, if you want to check that the precompiled header file is always
11782used, you can put a file of the same name as the original header in this
11783directory containing an @code{#error} command.
11784
11785This also works with @option{-include}. So yet another way to use
11786precompiled headers, good for projects not designed with precompiled
11787header files in mind, is to simply take most of the header files used by
11788a project, include them from another header file, precompile that header
11789file, and @option{-include} the precompiled header. If the header files
11790have guards against multiple inclusion, they will be skipped because
11791they've already been included (in the precompiled header).
11792
11793If you need to precompile the same header file for different
11794languages, targets, or compiler options, you can instead make a
d8fad4ea 11795@emph{directory} named like @file{all.h.gch}, and put each precompiled
54e109ed
GK
11796header in the directory, perhaps using @option{-o}. It doesn't matter
11797what you call the files in the directory, every precompiled header in
11798the directory will be considered. The first precompiled header
11799encountered in the directory that is valid for this compilation will
11800be used; they're searched in no particular order.
17211ab5
GK
11801
11802There are many other possibilities, limited only by your imagination,
11803good sense, and the constraints of your build system.
11804
11805A precompiled header file can be used only when these conditions apply:
11806
11807@itemize
11808@item
11809Only one precompiled header can be used in a particular compilation.
54e109ed 11810
17211ab5
GK
11811@item
11812A precompiled header can't be used once the first C token is seen. You
11813can have preprocessor directives before a precompiled header; you can
11814even include a precompiled header from inside another header, so long as
11815there are no C tokens before the @code{#include}.
54e109ed 11816
17211ab5
GK
11817@item
11818The precompiled header file must be produced for the same language as
11819the current compilation. You can't use a C precompiled header for a C++
11820compilation.
54e109ed 11821
17211ab5
GK
11822@item
11823The precompiled header file must be produced by the same compiler
11824version and configuration as the current compilation is using.
11825The easiest way to guarantee this is to use the same compiler binary
11826for creating and using precompiled headers.
54e109ed 11827
17211ab5 11828@item
54e109ed
GK
11829Any macros defined before the precompiled header is included must
11830either be defined in the same way as when the precompiled header was
11831generated, or must not affect the precompiled header, which usually
11832means that the they don't appear in the precompiled header at all.
11833
11834The @option{-D} option is one way to define a macro before a
11835precompiled header is included; using a @code{#define} can also do it.
11836There are also some options that define macros implicitly, like
11837@option{-O} and @option{-Wdeprecated}; the same rule applies to macros
11838defined this way.
11839
11840@item If debugging information is output when using the precompiled
11841header, using @option{-g} or similar, the same kind of debugging information
11842must have been output when building the precompiled header. However,
11843a precompiled header built using @option{-g} can be used in a compilation
11844when no debugging information is being output.
11845
11846@item The same @option{-m} options must generally be used when building
11847and using the precompiled header. @xref{Submodel Options},
11848for any cases where this rule is relaxed.
11849
11850@item Each of the following options must be the same when building and using
11851the precompiled header:
11852
11853@gccoptlist{-fexceptions -funit-at-a-time}
11854
17211ab5 11855@item
54e109ed
GK
11856Some other command-line options starting with @option{-f},
11857@option{-p}, or @option{-O} must be defined in the same way as when
11858the precompiled header was generated. At present, it's not clear
11859which options are safe to change and which are not; the safest choice
11860is to use exactly the same options when generating and using the
11861precompiled header. The following are known to be safe:
11862
c0d578e6 11863@gccoptlist{-fpreprocessed -pedantic-errors}
54e109ed 11864
17211ab5
GK
11865@end itemize
11866
54e109ed
GK
11867For all of these except the last, the compiler will automatically
11868ignore the precompiled header if the conditions aren't met. If you
11869find an option combination that doesn't work and doesn't cause the
11870precompiled header to be ignored, please consider filing a bug report,
11871see @ref{Bugs}.
17211ab5 11872
c0d578e6
GK
11873If you do use differing options when generating and using the
11874precompiled header, the actual behaviour will be a mixture of the
11875behaviour for the options. For instance, if you use @option{-g} to
11876generate the precompiled header but not when using it, you may or may
11877not get debugging information for routines in the precompiled header.
11878
74291a4b
MM
11879@node Running Protoize
11880@section Running Protoize
11881
161d7b59 11882The program @code{protoize} is an optional part of GCC@. You can use
c1030c7c 11883it to add prototypes to a program, thus converting the program to ISO
74291a4b
MM
11884C in one respect. The companion program @code{unprotoize} does the
11885reverse: it removes argument types from any prototypes that are found.
11886
11887When you run these programs, you must specify a set of source files as
11888command line arguments. The conversion programs start out by compiling
11889these files to see what functions they define. The information gathered
11890about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
11891
11892After scanning comes actual conversion. The specified files are all
11893eligible to be converted; any files they include (whether sources or
11894just headers) are eligible as well.
11895
11896But not all the eligible files are converted. By default,
11897@code{protoize} and @code{unprotoize} convert only source and header
11898files in the current directory. You can specify additional directories
630d3d5a 11899whose files should be converted with the @option{-d @var{directory}}
74291a4b 11900option. You can also specify particular files to exclude with the
630d3d5a 11901@option{-x @var{file}} option. A file is converted if it is eligible, its
74291a4b
MM
11902directory name matches one of the specified directory names, and its
11903name within the directory has not been excluded.
11904
11905Basic conversion with @code{protoize} consists of rewriting most
11906function definitions and function declarations to specify the types of
11907the arguments. The only ones not rewritten are those for varargs
11908functions.
11909
11910@code{protoize} optionally inserts prototype declarations at the
11911beginning of the source file, to make them available for any calls that
11912precede the function's definition. Or it can insert prototype
11913declarations with block scope in the blocks where undeclared functions
11914are called.
11915
11916Basic conversion with @code{unprotoize} consists of rewriting most
11917function declarations to remove any argument types, and rewriting
c1030c7c 11918function definitions to the old-style pre-ISO form.
74291a4b
MM
11919
11920Both conversion programs print a warning for any function declaration or
11921definition that they can't convert. You can suppress these warnings
630d3d5a 11922with @option{-q}.
74291a4b
MM
11923
11924The output from @code{protoize} or @code{unprotoize} replaces the
11925original source file. The original file is renamed to a name ending
02f52e19 11926with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
a7db8bbb
MK
11927without the original @samp{.c} suffix). If the @samp{.save} (@samp{.sav}
11928for DOS) file already exists, then the source file is simply discarded.
74291a4b 11929
0c2d1a2a 11930@code{protoize} and @code{unprotoize} both depend on GCC itself to
74291a4b 11931scan the program and collect information about the functions it uses.
0c2d1a2a 11932So neither of these programs will work until GCC is installed.
74291a4b
MM
11933
11934Here is a table of the options you can use with @code{protoize} and
11935@code{unprotoize}. Each option works with both programs unless
11936otherwise stated.
11937
11938@table @code
11939@item -B @var{directory}
11940Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
11941usual directory (normally @file{/usr/local/lib}). This file contains
11942prototype information about standard system functions. This option
11943applies only to @code{protoize}.
11944
11945@item -c @var{compilation-options}
05739753 11946Use @var{compilation-options} as the options when running @command{gcc} to
630d3d5a 11947produce the @samp{.X} files. The special option @option{-aux-info} is
05739753 11948always passed in addition, to tell @command{gcc} to write a @samp{.X} file.
74291a4b
MM
11949
11950Note that the compilation options must be given as a single argument to
11951@code{protoize} or @code{unprotoize}. If you want to specify several
05739753 11952@command{gcc} options, you must quote the entire set of compilation options
74291a4b
MM
11953to make them a single word in the shell.
11954
05739753 11955There are certain @command{gcc} arguments that you cannot use, because they
630d3d5a
JM
11956would produce the wrong kind of output. These include @option{-g},
11957@option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in
74291a4b
MM
11958the @var{compilation-options}, they are ignored.
11959
11960@item -C
a7db8bbb 11961Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
02f52e19 11962systems) instead of @samp{.c}. This is convenient if you are converting
ee77eda5 11963a C program to C++. This option applies only to @code{protoize}.
74291a4b
MM
11964
11965@item -g
11966Add explicit global declarations. This means inserting explicit
11967declarations at the beginning of each source file for each function
11968that is called in the file and was not declared. These declarations
11969precede the first function definition that contains a call to an
11970undeclared function. This option applies only to @code{protoize}.
11971
11972@item -i @var{string}
11973Indent old-style parameter declarations with the string @var{string}.
11974This option applies only to @code{protoize}.
11975
11976@code{unprotoize} converts prototyped function definitions to old-style
11977function definitions, where the arguments are declared between the
11978argument list and the initial @samp{@{}. By default, @code{unprotoize}
11979uses five spaces as the indentation. If you want to indent with just
630d3d5a 11980one space instead, use @option{-i " "}.
74291a4b
MM
11981
11982@item -k
11983Keep the @samp{.X} files. Normally, they are deleted after conversion
11984is finished.
11985
11986@item -l
630d3d5a 11987Add explicit local declarations. @code{protoize} with @option{-l} inserts
74291a4b
MM
11988a prototype declaration for each function in each block which calls the
11989function without any declaration. This option applies only to
11990@code{protoize}.
11991
11992@item -n
11993Make no real changes. This mode just prints information about the conversions
630d3d5a 11994that would have been done without @option{-n}.
74291a4b
MM
11995
11996@item -N
11997Make no @samp{.save} files. The original files are simply deleted.
11998Use this option with caution.
11999
12000@item -p @var{program}
12001Use the program @var{program} as the compiler. Normally, the name
12002@file{gcc} is used.
12003
12004@item -q
12005Work quietly. Most warnings are suppressed.
12006
12007@item -v
05739753 12008Print the version number, just like @option{-v} for @command{gcc}.
74291a4b
MM
12009@end table
12010
12011If you need special compiler options to compile one of your program's
12012source files, then you should generate that file's @samp{.X} file
05739753 12013specially, by running @command{gcc} on that source file with the
630d3d5a 12014appropriate options and the option @option{-aux-info}. Then run
74291a4b
MM
12015@code{protoize} on the entire set of files. @code{protoize} will use
12016the existing @samp{.X} file because it is newer than the source file.
12017For example:
12018
3ab51846 12019@smallexample
b1018de6 12020gcc -Dfoo=bar file1.c -aux-info file1.X
74291a4b 12021protoize *.c
3ab51846 12022@end smallexample
74291a4b
MM
12023
12024@noindent
12025You need to include the special files along with the rest in the
12026@code{protoize} command, even though their @samp{.X} files already
12027exist, because otherwise they won't get converted.
12028
12029@xref{Protoize Caveats}, for more information on how to use
12030@code{protoize} successfully.
This page took 4.315163 seconds and 5 git commands to generate.