]> gcc.gnu.org Git - gcc.git/blame - gcc/invoke.texi
configure.target: Just use os_include_dir always.
[gcc.git] / gcc / invoke.texi
CommitLineData
5c25e11d 1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
74291a4b
MM
2@c This is part of the GCC manual.
3@c For copying conditions, see the file gcc.texi.
4
9d86bffc
JM
5@ignore
6@c man begin COPYRIGHT
7Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
21c7361e 81998, 1999, 2000, 2001 Free Software Foundation, Inc.
9d86bffc
JM
9
10Permission is granted to make and distribute verbatim copies of this
11manual provided the copyright notice and this permission notice are
12preserved on all copies.
13
14Permission is granted to copy and distribute modified versions of this
15manual under the conditions for verbatim copying, provided also that the
16entire resulting derived work is distributed under the terms of a
17permission notice identical to this one.
18
19Permission is granted to copy and distribute translations of this manual
20into another language, under the above conditions for modified versions,
21except that this permission notice may be included in translations
22approved by the Free Software Foundation instead of in the original
23English.
24@c man end
25@c Set file name and title for the man page.
26@setfilename gcc
27@settitle GNU project C and C++ compiler
28@c man begin SYNOPSIS
29gcc [@samp{-c}|@samp{-S}|@samp{-E}] [@samp{-std=}@var{standard}]
30 [@samp{-g}] [@samp{-pg}] [@samp{-O}@var{level}]
31 [@samp{-W}@var{warn}...] [@samp{-pedantic}]
32 [@samp{-I}@var{dir}...] [@samp{-L}@var{dir}...]
33 [@samp{-D}@var{macro}[=@var{defn}]...] [@samp{-U}@var{macro}]
34 [@samp{-f}@var{option}...] [@samp{-m}@var{machine-option}...]
35 [@samp{-o} @var{outfile}] @var{infile}...
36
37Only the most useful options are listed here; see below for the
38remainder. @samp{g++} accepts mostly the same options as @samp{gcc}.
39@c man end
40@c man begin SEEALSO
41cpp(1), gcov(1), g77(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
42and the Info entries for @file{gcc}, @file{cpp}, @file{g77}, @file{as},
43@file{ld}, @file{binutils} and @file{gdb}.
44@c man end
2642624b
JM
45@c man begin BUGS
46For instructions on reporting bugs, see
bedc7537 47@w{@uref{http://gcc.gnu.org/bugs.html}}. Use of the @command{gccbug}
2642624b
JM
48script to report bugs is recommended.
49@c man end
50@c man begin AUTHOR
51See the Info entry for @file{gcc}, or
52@w{@uref{http://gcc.gnu.org/thanks.html}}, for contributors to GCC.
53@c man end
9d86bffc
JM
54@end ignore
55
74291a4b 56@node Invoking GCC
0c2d1a2a
JB
57@chapter GCC Command Options
58@cindex GCC command options
74291a4b 59@cindex command options
0c2d1a2a 60@cindex options, GCC command
74291a4b 61
9d86bffc
JM
62@c man begin DESCRIPTION
63
0c2d1a2a 64When you invoke GCC, it normally does preprocessing, compilation,
74291a4b
MM
65assembly and linking. The ``overall options'' allow you to stop this
66process at an intermediate stage. For example, the @samp{-c} option
67says not to run the linker. Then the output consists of object files
68output by the assembler.
69
70Other options are passed on to one stage of processing. Some options
71control the preprocessor and others the compiler itself. Yet other
72options control the assembler and linker; most of these are not
73documented here, since you rarely need to use any of them.
74
75@cindex C compilation options
0c2d1a2a 76Most of the command line options that you can use with GCC are useful
74291a4b
MM
77for C programs; when an option is only useful with another language
78(usually C++), the explanation says so explicitly. If the description
79for a particular option does not mention a source language, you can use
80that option with all supported languages.
81
82@cindex C++ compilation options
83@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
84options for compiling C++ programs.
85
86@cindex grouping options
87@cindex options, grouping
bedc7537 88The @command{gcc} program accepts options and file names as operands. Many
b192711e 89options have multi-letter names; therefore multiple single-letter options
74291a4b
MM
90may @emph{not} be grouped: @samp{-dr} is very different from @w{@samp{-d
91-r}}.
92
93@cindex order of options
94@cindex options, order
95You can mix options and other arguments. For the most part, the order
96you use doesn't matter. Order does matter when you use several options
97of the same kind; for example, if you specify @samp{-L} more than once,
98the directories are searched in the order specified.
99
100Many options have long names starting with @samp{-f} or with
101@samp{-W}---for example, @samp{-fforce-mem},
102@samp{-fstrength-reduce}, @samp{-Wformat} and so on. Most of
103these have both positive and negative forms; the negative form of
104@samp{-ffoo} would be @samp{-fno-foo}. This manual documents
105only one of these two forms, whichever one is not the default.
106
9d86bffc
JM
107@c man end
108
74291a4b
MM
109@menu
110* Option Summary:: Brief list of all options, without explanations.
111* Overall Options:: Controlling the kind of output:
112 an executable, object files, assembler files,
113 or preprocessed source.
114* Invoking G++:: Compiling C++ programs.
115* C Dialect Options:: Controlling the variant of C language compiled.
116* C++ Dialect Options:: Variations on C++.
764dbbf2
GDR
117* Language Independent Options:: Controlling how diagnostics should be
118 formatted.
74291a4b
MM
119* Warning Options:: How picky should the compiler be?
120* Debugging Options:: Symbol tables, measurements, and debugging dumps.
121* Optimize Options:: How much optimization?
122* Preprocessor Options:: Controlling header files and macro definitions.
123 Also, getting dependency information for Make.
124* Assembler Options:: Passing options to the assembler.
125* Link Options:: Specifying libraries and so on.
126* Directory Options:: Where to find header files and libraries.
127 Where to find the compiler executable files.
a743d340 128* Spec Files:: How to pass switches to sub-processes.
0c2d1a2a 129* Target Options:: Running a cross-compiler, or an old version of GCC.
74291a4b
MM
130* Submodel Options:: Specifying minor hardware or convention variations,
131 such as 68010 vs 68020.
132* Code Gen Options:: Specifying conventions for function calls, data layout
133 and register usage.
0c2d1a2a 134* Environment Variables:: Env vars that affect GCC.
74291a4b
MM
135* Running Protoize:: Automatically adding or removing function prototypes.
136@end menu
137
4bc1997b
JM
138@c man begin OPTIONS
139
74291a4b
MM
140@node Option Summary
141@section Option Summary
142
143Here is a summary of all the options, grouped by type. Explanations are
144in the following sections.
145
146@table @emph
147@item Overall Options
148@xref{Overall Options,,Options Controlling the Kind of Output}.
4bc1997b
JM
149@gccoptlist{
150-c -S -E -o @var{file} -pipe -pass-exit-codes -x @var{language} @gol
151-v --target-help --help}
74291a4b
MM
152
153@item C Language Options
154@xref{C Dialect Options,,Options Controlling C Dialect}.
4bc1997b
JM
155@gccoptlist{
156-ansi -std=@var{standard} -fno-asm -fno-builtin @gol
157-fhosted -ffreestanding @gol
158-trigraphs -traditional -traditional-cpp @gol
159-fallow-single-precision -fcond-mismatch @gol
160-fsigned-bitfields -fsigned-char @gol
161-funsigned-bitfields -funsigned-char @gol
162-fwritable-strings -fshort-wchar}
74291a4b
MM
163
164@item C++ Language Options
165@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
4bc1997b
JM
166@gccoptlist{
167-fno-access-control -fcheck-new -fconserve-space @gol
168-fdollars-in-identifiers -fno-elide-constructors @gol
169-fno-enforce-eh-specs -fexternal-templates @gol
170-falt-external-templates @gol
171-ffor-scope -fno-for-scope -fno-gnu-keywords -fhonor-std @gol
172-fhuge-objects -fno-implicit-templates @gol
173-fno-implicit-inline-templates @gol
174-fno-implement-inlines -fms-extensions @gol
175-fname-mangling-version-@var{n} -fno-operator-names @gol
176-fno-optional-diags -fpermissive @gol
177-frepo -fno-rtti -fsquangle -ftemplate-depth-@var{n} @gol
178-fuse-cxa-atexit -fvtable-thunks -nostdinc++ @gol
179-fno-default-inline -Wctor-dtor-privacy @gol
180-Wnon-virtual-dtor -Wreorder @gol
181-Weffc++ -Wno-deprecated @gol
182-Wno-non-template-friend -Wold-style-cast @gol
183-Woverloaded-virtual -Wno-pmf-conversions @gol
184-Wsign-promo -Wsynth}
74291a4b 185
764dbbf2
GDR
186@item Language Independent Options
187@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
4bc1997b
JM
188@gccoptlist{
189-fmessage-length=@var{n} @gol
190-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}}
764dbbf2 191
74291a4b
MM
192@item Warning Options
193@xref{Warning Options,,Options to Request or Suppress Warnings}.
4bc1997b
JM
194@gccoptlist{
195-fsyntax-only -pedantic -pedantic-errors @gol
196-w -W -Wall -Waggregate-return @gol
197-Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol
198-Wconversion -Wdisabled-optimization -Werror @gol
199-Wfloat-equal -Wformat -Wformat=2 @gol
200-Wformat-nonliteral -Wformat-security @gol
201-Wid-clash-@var{len} -Wimplicit -Wimplicit-int @gol
202-Wimplicit-function-declaration @gol
203-Werror-implicit-function-declaration @gol
204-Wimport -Winline @gol
205-Wlarger-than-@var{len} -Wlong-long @gol
206-Wmain -Wmissing-declarations @gol
207-Wmissing-format-attribute -Wmissing-noreturn @gol
208-Wmultichar -Wno-format-extra-args -Wno-format-y2k @gol
209-Wno-import -Wpacked -Wpadded @gol
210-Wparentheses -Wpointer-arith -Wredundant-decls @gol
211-Wreturn-type -Wsequence-point -Wshadow @gol
212-Wsign-compare -Wswitch -Wsystem-headers @gol
213-Wtrigraphs -Wundef -Wuninitialized @gol
214-Wunknown-pragmas -Wunreachable-code @gol
215-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol
216-Wunused-value -Wunused-variable -Wwrite-strings}
74291a4b 217
fe50c0eb 218@item C-only Warning Options
4bc1997b
JM
219@gccoptlist{
220-Wbad-function-cast -Wmissing-prototypes -Wnested-externs @gol
221-Wstrict-prototypes -Wtraditional}
fe50c0eb 222
74291a4b
MM
223@item Debugging Options
224@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
4bc1997b
JM
225@gccoptlist{
226-a -ax -d@var{letters} -fdump-unnumbered -fdump-translation-unit-@var{file} @gol
227-fpretend-float -fprofile-arcs -ftest-coverage @gol
228-g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 @gol
229-ggdb -gstabs -gstabs+ -gxcoff -gxcoff+ @gol
230-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol
231-print-prog-name=@var{program} -print-search-dirs -Q @gol
232-save-temps -time}
74291a4b
MM
233
234@item Optimization Options
235@xref{Optimize Options,,Options that Control Optimization}.
4bc1997b
JM
236@gccoptlist{
237-falign-functions=@var{n} -falign-jumps=@var{n} @gol
238-falign-labels=@var{n} -falign-loops=@var{n} @gol
239-fbranch-probabilities -fcaller-saves @gol
240-fcse-follow-jumps -fcse-skip-blocks -fdata-sections -fdce @gol
241-fdelayed-branch -fdelete-null-pointer-checks @gol
242-fexpensive-optimizations -ffast-math -ffloat-store @gol
243-fforce-addr -fforce-mem -ffunction-sections -fgcse @gol
244-finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol
245-fkeep-static-consts -fmove-all-movables @gol
246-fno-default-inline -fno-defer-pop @gol
454d0cc7
AH
247-fno-function-cse -fno-guess-branch-probability
248-fno-inline -fno-math-errno -fno-peephole @gol
4bc1997b
JM
249-fomit-frame-pointer -foptimize-register-move @gol
250-foptimize-sibling-calls -freduce-all-givs @gol
251-fregmove -frename-registers @gol
252-frerun-cse-after-loop -frerun-loop-opt @gol
253-fschedule-insns -fschedule-insns2 @gol
254-fsingle-precision-constant -fssa @gol
255-fstrength-reduce -fstrict-aliasing -fthread-jumps -ftrapv @gol
256-funroll-all-loops -funroll-loops @gol
257-O -O0 -O1 -O2 -O3 -Os}
74291a4b
MM
258
259@item Preprocessor Options
260@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
4bc1997b
JM
261@gccoptlist{
262-$ -A@var{question}=@var{answer} -A-@var{question}@r{[}=@var{answer}@r{]} @gol
263-C -dD -dI -dM -dN @gol
264-D@var{macro}@r{[}=@var{defn}@r{]} -E -H @gol
265-idirafter @var{dir} @gol
266-include @var{file} -imacros @var{file} @gol
267-iprefix @var{file} -iwithprefix @var{dir} @gol
268-iwithprefixbefore @var{dir} -isystem @var{dir} -isystem-c++ @var{dir} @gol
269-M -MM -MF -MG -MP -MQ -MT -nostdinc -P -remap @gol
270-trigraphs -undef -U@var{macro} -Wp,@var{option}}
74291a4b
MM
271
272@item Assembler Option
273@xref{Assembler Options,,Passing Options to the Assembler}.
4bc1997b
JM
274@gccoptlist{
275-Wa,@var{option}}
74291a4b
MM
276
277@item Linker Options
278@xref{Link Options,,Options for Linking}.
4bc1997b
JM
279@gccoptlist{
280@var{object-file-name} -l@var{library} @gol
281-nostartfiles -nodefaultlibs -nostdlib @gol
282-s -static -static-libgcc -shared -shared-libgcc -symbolic @gol
283-Wl,@var{option} -Xlinker @var{option} @gol
284-u @var{symbol}}
74291a4b
MM
285
286@item Directory Options
287@xref{Directory Options,,Options for Directory Search}.
4bc1997b
JM
288@gccoptlist{
289-B@var{prefix} -I@var{dir} -I- -L@var{dir} -specs=@var{file}}
74291a4b
MM
290
291@item Target Options
292@c I wrote this xref this way to avoid overfull hbox. -- rms
293@xref{Target Options}.
4bc1997b
JM
294@gccoptlist{
295-b @var{machine} -V @var{version}}
74291a4b
MM
296
297@item Machine Dependent Options
298@xref{Submodel Options,,Hardware Models and Configurations}.
74291a4b 299@emph{M680x0 Options}
4bc1997b
JM
300@gccoptlist{
301-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol
302-m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 @gol
303-mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol
304-malign-int -mstrict-align}
74291a4b 305
2856c3e3 306@emph{M68hc1x Options}
4bc1997b
JM
307@gccoptlist{
308-m6811 -m6812 -m68hc11 -m68hc12 @gol
309-mauto-incdec -mshort -msoft-reg-count=@var{count}}
2856c3e3 310
74291a4b 311@emph{VAX Options}
4bc1997b
JM
312@gccoptlist{
313-mg -mgnu -munix}
74291a4b
MM
314
315@emph{SPARC Options}
4bc1997b
JM
316@gccoptlist{
317-mcpu=@var{cpu type} @gol
318-mtune=@var{cpu type} @gol
319-mcmodel=@var{code model} @gol
320-m32 -m64 @gol
321-mapp-regs -mbroken-saverestore -mcypress @gol
322-mepilogue -mfaster-structs -mflat @gol
323-mfpu -mhard-float -mhard-quad-float @gol
324-mimpure-text -mlive-g0 -mno-app-regs @gol
325-mno-epilogue -mno-faster-structs -mno-flat -mno-fpu @gol
326-mno-impure-text -mno-stack-bias -mno-unaligned-doubles @gol
327-msoft-float -msoft-quad-float -msparclite -mstack-bias @gol
328-msupersparc -munaligned-doubles -mv8}
74291a4b
MM
329
330@emph{Convex Options}
4bc1997b
JM
331@gccoptlist{
332-mc1 -mc2 -mc32 -mc34 -mc38 @gol
333-margcount -mnoargcount @gol
334-mlong32 -mlong64 @gol
335-mvolatile-cache -mvolatile-nocache}
74291a4b
MM
336
337@emph{AMD29K Options}
4bc1997b
JM
338@gccoptlist{
339-m29000 -m29050 -mbw -mnbw -mdw -mndw @gol
340-mlarge -mnormal -msmall @gol
341-mkernel-registers -mno-reuse-arg-regs @gol
342-mno-stack-check -mno-storem-bug @gol
343-mreuse-arg-regs -msoft-float -mstack-check @gol
344-mstorem-bug -muser-registers}
74291a4b
MM
345
346@emph{ARM Options}
4bc1997b
JM
347@gccoptlist{
348-mapcs-frame -mno-apcs-frame @gol
349-mapcs-26 -mapcs-32 @gol
350-mapcs-stack-check -mno-apcs-stack-check @gol
351-mapcs-float -mno-apcs-float @gol
352-mapcs-reentrant -mno-apcs-reentrant @gol
353-msched-prolog -mno-sched-prolog @gol
354-mlittle-endian -mbig-endian -mwords-little-endian @gol
355-malignment-traps -mno-alignment-traps @gol
356-msoft-float -mhard-float -mfpe @gol
357-mthumb-interwork -mno-thumb-interwork @gol
358-mcpu= -march= -mfpe= @gol
359-mstructure-size-boundary= @gol
360-mbsd -mxopen -mno-symrename @gol
361-mabort-on-noreturn @gol
362-mlong-calls -mno-long-calls @gol
363-mnop-fun-dllimport -mno-nop-fun-dllimport @gol
364-msingle-pic-base -mno-single-pic-base @gol
365-mpic-register=}
157a620e
NC
366
367@emph{Thumb Options}
4bc1997b
JM
368@gccoptlist{
369-mtpcs-frame -mno-tpcs-frame @gol
370-mtpcs-leaf-frame -mno-tpcs-leaf-frame @gol
371-mlittle-endian -mbig-endian @gol
372-mthumb-interwork -mno-thumb-interwork @gol
373-mstructure-size-boundary= @gol
374-mnop-fun-dllimport -mno-nop-fun-dllimport @gol
375-mcallee-super-interworking -mno-callee-super-interworking @gol
376-mcaller-super-interworking -mno-caller-super-interworking @gol
377-msingle-pic-base -mno-single-pic-base @gol
378-mpic-register=}
74291a4b 379
ecff22ab 380@emph{MN10200 Options}
4bc1997b
JM
381@gccoptlist{
382-mrelax}
ecff22ab 383
6d6d0fa0 384@emph{MN10300 Options}
4bc1997b
JM
385@gccoptlist{
386-mmult-bug @gol
387-mno-mult-bug @gol
388-mam33 @gol
389-mno-am33 @gol
390-mrelax}
6d6d0fa0 391
861bb6c1 392@emph{M32R/D Options}
4bc1997b
JM
393@gccoptlist{
394-mcode-model=@var{model type} -msdata=@var{sdata type} @gol
395-G @var{num}}
861bb6c1 396
74291a4b 397@emph{M88K Options}
4bc1997b
JM
398@gccoptlist{
399-m88000 -m88100 -m88110 -mbig-pic @gol
400-mcheck-zero-division -mhandle-large-shift @gol
401-midentify-revision -mno-check-zero-division @gol
402-mno-ocs-debug-info -mno-ocs-frame-position @gol
403-mno-optimize-arg-area -mno-serialize-volatile @gol
404-mno-underscores -mocs-debug-info @gol
405-mocs-frame-position -moptimize-arg-area @gol
406-mserialize-volatile -mshort-data-@var{num} -msvr3 @gol
407-msvr4 -mtrap-large-shift -muse-div-instruction @gol
408-mversion-03.00 -mwarn-passed-structs}
74291a4b
MM
409
410@emph{RS/6000 and PowerPC Options}
4bc1997b
JM
411@gccoptlist{
412-mcpu=@var{cpu type} @gol
413-mtune=@var{cpu type} @gol
414-mpower -mno-power -mpower2 -mno-power2 @gol
415-mpowerpc -mpowerpc64 -mno-powerpc @gol
416-mpowerpc-gpopt -mno-powerpc-gpopt @gol
417-mpowerpc-gfxopt -mno-powerpc-gfxopt @gol
418-mnew-mnemonics -mold-mnemonics @gol
419-mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc @gol
420-m64 -m32 -mxl-call -mno-xl-call -mthreads -mpe @gol
421-msoft-float -mhard-float -mmultiple -mno-multiple @gol
422-mstring -mno-string -mupdate -mno-update @gol
423-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol
424-mstrict-align -mno-strict-align -mrelocatable @gol
425-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol
426-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol
427-mcall-aix -mcall-sysv -mprototype -mno-prototype @gol
428-msim -mmvme -mads -myellowknife -memb -msdata @gol
429-msdata=@var{opt} -mvxworks -G @var{num}}
74291a4b
MM
430
431@emph{RT Options}
4bc1997b
JM
432@gccoptlist{
433-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs @gol
434-mfull-fp-blocks -mhc-struct-return -min-line-mul @gol
435-mminimum-fp-blocks -mnohc-struct-return}
74291a4b
MM
436
437@emph{MIPS Options}
4bc1997b 438@gccoptlist{
84a0e7b8 439-mabicalls -mcpu=@var{cpu type}
4bc1997b
JM
440-membedded-data -muninit-const-in-rodata @gol
441-membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64 @gol
442-mgpopt -mhalf-pic -mhard-float -mint64 -mips1 @gol
443-mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy @gol
444-mmips-as -mmips-tfile -mno-abicalls @gol
445-mno-embedded-data -mno-uninit-const-in-rodata -mno-embedded-pic @gol
446-mno-gpopt -mno-long-calls @gol
447-mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats @gol
448-mrnames -msoft-float @gol
449-m4650 -msingle-float -mmad @gol
450-mstats -EL -EB -G @var{num} -nocpp @gol
451-mabi=32 -mabi=n32 -mabi=64 -mabi=eabi @gol
452-mfix7000 -mno-crt0}
74291a4b
MM
453
454@emph{i386 Options}
4bc1997b
JM
455@gccoptlist{
456-mcpu=@var{cpu type} -march=@var{cpu type} @gol
457-mintel-syntax -mieee-fp -mno-fancy-math-387 @gol
458-mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol
459-mno-wide-multiply -mrtd -malign-double @gol
460-mreg-alloc=@var{list} -mregparm=@var{num} @gol
461-malign-jumps=@var{num} -malign-loops=@var{num} @gol
462-malign-functions=@var{num} -mpreferred-stack-boundary=@var{num} @gol
463-mthreads -mno-align-stringops -minline-all-stringops @gol
464-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
465-m96bit-long-double}
74291a4b
MM
466
467@emph{HPPA Options}
4bc1997b
JM
468@gccoptlist{
469-march=@var{architecture type} @gol
470-mbig-switch -mdisable-fpregs -mdisable-indexing @gol
471-mfast-indirect-calls -mgas -mjump-in-delay @gol
472-mlong-load-store -mno-big-switch -mno-disable-fpregs @gol
473-mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol
474-mno-jump-in-delay -mno-long-load-store @gol
475-mno-portable-runtime -mno-soft-float @gol
476-mno-space-regs -msoft-float -mpa-risc-1-0 @gol
477-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol
478-mschedule=@var{cpu type} -mspace-regs}
74291a4b
MM
479
480@emph{Intel 960 Options}
4bc1997b
JM
481@gccoptlist{
482-m@var{cpu type} -masm-compat -mclean-linkage @gol
483-mcode-align -mcomplex-addr -mleaf-procedures @gol
484-mic-compat -mic2.0-compat -mic3.0-compat @gol
485-mintel-asm -mno-clean-linkage -mno-code-align @gol
486-mno-complex-addr -mno-leaf-procedures @gol
487-mno-old-align -mno-strict-align -mno-tail-call @gol
488-mnumerics -mold-align -msoft-float -mstrict-align @gol
489-mtail-call}
74291a4b
MM
490
491@emph{DEC Alpha Options}
4bc1997b
JM
492@gccoptlist{
493-mfp-regs -mno-fp-regs -mno-soft-float -msoft-float @gol
494-malpha-as -mgas @gol
495-mieee -mieee-with-inexact -mieee-conformant @gol
496-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol
497-mtrap-precision=@var{mode} -mbuild-constants @gol
498-mcpu=@var{cpu type} @gol
499-mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max @gol
500-mmemory-latency=@var{time}}
74291a4b
MM
501
502@emph{Clipper Options}
4bc1997b
JM
503@gccoptlist{
504-mc300 -mc400}
74291a4b
MM
505
506@emph{H8/300 Options}
4bc1997b
JM
507@gccoptlist{
508-mrelax -mh -ms -mint32 -malign-300}
74291a4b
MM
509
510@emph{SH Options}
4bc1997b
JM
511@gccoptlist{
512-m1 -m2 -m3 -m3e @gol
513-m4-nofpu -m4-single-only -m4-single -m4 @gol
514-mb -ml -mdalign -mrelax @gol
515-mbigtable -mfmovd -mhitachi -mnomacsave @gol
516-misize -mpadstruct -mspace @gol
1a66cd67 517-mprefergot
4bc1997b 518-musermode}
74291a4b
MM
519
520@emph{System V Options}
4bc1997b
JM
521@gccoptlist{
522-Qy -Qn -YP,@var{paths} -Ym,@var{dir}}
74291a4b 523
56b2d7a7 524@emph{ARC Options}
4bc1997b
JM
525@gccoptlist{
526-EB -EL @gol
527-mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text section} @gol
528-mdata=@var{data section} -mrodata=@var{readonly data section}}
56b2d7a7 529
282a61e6 530@emph{TMS320C3x/C4x Options}
4bc1997b
JM
531@gccoptlist{
532-mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm @gol
533-mfast-fix -mmpyi -mbk -mti -mdp-isr-reload @gol
534-mrpts=@var{count} -mrptb -mdb -mloop-unsigned @gol
535-mparallel-insns -mparallel-mpy -mpreserve-float}
282a61e6 536
f84271d9 537@emph{V850 Options}
4bc1997b
JM
538@gccoptlist{
539-mlong-calls -mno-long-calls -mep -mno-ep @gol
540-mprolog-function -mno-prolog-function -mspace @gol
541-mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol
542-mv850 -mbig-switch}
83575957
ID
543
544@emph{NS32K Options}
4bc1997b
JM
545@gccoptlist{
546-m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add @gol
547-msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb @gol
548-mbitfield -mnobitfield -mhimem -mnohimem}
789a3090 549
052a4b28 550@emph{AVR Options}
4bc1997b
JM
551@gccoptlist{
552-mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts @gol
553-mcall-prologues -mno-tablejump -mtiny-stack}
052a4b28 554
789a3090 555@emph{MCore Options}
4bc1997b
JM
556@gccoptlist{
557-mhardlit, -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol
558-mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol
559-m4byte-functions -mno-4byte-functions -mcallgraph-data @gol
560-mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol
561-mlittle-endian -mbig-endian -m210 -m340 -mstack-increment}
f84271d9 562
df6194d4
JW
563@emph{IA-64 Options}
564@gccoptlist{
565-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol
566-mvolatile-asm-stop -mb-step -mregister-names -mno-sdata @gol
567-mconstant-gp -mauto-pic -minline-divide-min-latency @gol
568-minline-divide-max-throughput -mno-dwarf2-asm @gol
569-mfixed-range=@var{register range}}
570
74291a4b
MM
571@item Code Generation Options
572@xref{Code Gen Options,,Options for Code Generation Conventions}.
4bc1997b
JM
573@gccoptlist{
574-fcall-saved-@var{reg} -fcall-used-@var{reg} @gol
575-fexceptions -funwind-tables -ffixed-@var{reg} @gol
576-finhibit-size-directive -finstrument-functions @gol
577-fcheck-memory-usage -fprefix-function-name @gol
578-fno-common -fno-ident -fno-gnu-linker @gol
579-fpcc-struct-return -fpic -fPIC @gol
580-freg-struct-return -fshared-data -fshort-enums @gol
581-fshort-double -fvolatile -fvolatile-global -fvolatile-static @gol
582-fverbose-asm -fpack-struct -fstack-check @gol
583-fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol
584-fargument-alias -fargument-noalias @gol
585-fargument-noalias-global @gol
586-fleading-underscore}
74291a4b
MM
587@end table
588
589@menu
590* Overall Options:: Controlling the kind of output:
591 an executable, object files, assembler files,
592 or preprocessed source.
593* C Dialect Options:: Controlling the variant of C language compiled.
594* C++ Dialect Options:: Variations on C++.
764dbbf2
GDR
595* Language Independent Options:: Controlling how diagnostics should be
596 formatted.
74291a4b
MM
597* Warning Options:: How picky should the compiler be?
598* Debugging Options:: Symbol tables, measurements, and debugging dumps.
599* Optimize Options:: How much optimization?
600* Preprocessor Options:: Controlling header files and macro definitions.
601 Also, getting dependency information for Make.
602* Assembler Options:: Passing options to the assembler.
603* Link Options:: Specifying libraries and so on.
604* Directory Options:: Where to find header files and libraries.
605 Where to find the compiler executable files.
a743d340 606* Spec Files:: How to pass switches to sub-processes.
0c2d1a2a 607* Target Options:: Running a cross-compiler, or an old version of GCC.
74291a4b
MM
608@end menu
609
610@node Overall Options
611@section Options Controlling the Kind of Output
612
613Compilation can involve up to four stages: preprocessing, compilation
614proper, assembly and linking, always in that order. The first three
615stages apply to an individual source file, and end by producing an
616object file; linking combines all the object files (those newly
617compiled, and those specified as input) into an executable file.
618
619@cindex file name suffix
620For any given input file, the file name suffix determines what kind of
621compilation is done:
622
2642624b 623@table @gcctabopt
74291a4b
MM
624@item @var{file}.c
625C source code which must be preprocessed.
626
627@item @var{file}.i
628C source code which should not be preprocessed.
629
630@item @var{file}.ii
631C++ source code which should not be preprocessed.
632
633@item @var{file}.m
634Objective-C source code. Note that you must link with the library
635@file{libobjc.a} to make an Objective-C program work.
636
b9265ec1
JM
637@item @var{file}.mi
638Objective-C source code which should not be preprocessed.
639
74291a4b
MM
640@item @var{file}.h
641C header file (not to be compiled or linked).
642
643@item @var{file}.cc
b9265ec1 644@itemx @var{file}.cp
74291a4b
MM
645@itemx @var{file}.cxx
646@itemx @var{file}.cpp
b9265ec1 647@itemx @var{file}.c++
74291a4b
MM
648@itemx @var{file}.C
649C++ source code which must be preprocessed. Note that in @samp{.cxx},
650the last two letters must both be literally @samp{x}. Likewise,
651@samp{.C} refers to a literal capital C.
652
b9265ec1
JM
653@item @var{file}.f
654@itemx @var{file}.for
655@itemx @var{file}.FOR
656Fortran source code which should not be preprocessed.
657
658@item @var{file}.F
659@itemx @var{file}.fpp
660@itemx @var{file}.FPP
661Fortran source code which must be preprocessed (with the traditional
662preprocessor).
663
664@item @var{file}.r
665Fortran source code which must be preprocessed with a RATFOR
666preprocessor (not included with GCC).
667
668@xref{Overall Options,,Options Controlling the Kind of Output, g77,
669Using and Porting GNU Fortran}, for more details of the handling of
670Fortran input files.
671
672@c FIXME: Descriptions of Java file types.
673@c @var{file}.java
674@c @var{file}.class
675@c @var{file}.zip
676@c @var{file}.jar
677
678@c GCC also knows about some suffixes for languages not yet included:
679@c Ada:
680@c @var{file}.ads
681@c @var{file}.adb
682@c @var{file}.ada
683@c Pascal:
684@c @var{file}.p
685@c @var{file}.pas
686
687@item @var{file}.ch
688@itemx @var{file}.chi
689CHILL source code (preprocessed with the traditional preprocessor).
690
74291a4b
MM
691@item @var{file}.s
692Assembler code.
693
694@item @var{file}.S
695Assembler code which must be preprocessed.
696
697@item @var{other}
698An object file to be fed straight into linking.
699Any file name with no recognized suffix is treated this way.
700@end table
701
702You can specify the input language explicitly with the @samp{-x} option:
703
2642624b 704@table @gcctabopt
74291a4b
MM
705@item -x @var{language}
706Specify explicitly the @var{language} for the following input files
707(rather than letting the compiler choose a default based on the file
708name suffix). This option applies to all following input files until
709the next @samp{-x} option. Possible values for @var{language} are:
710@example
b9265ec1
JM
711c c-header cpp-output
712c++ c++-cpp-output
713objective-c objc-cpp-output
74291a4b 714assembler assembler-with-cpp
b9265ec1
JM
715f77 f77-cpp-input ratfor
716java chill
74291a4b 717@end example
b9265ec1 718@c Also f77-version, for internal use only.
74291a4b
MM
719
720@item -x none
721Turn off any specification of a language, so that subsequent files are
722handled according to their file name suffixes (as they are if @samp{-x}
723has not been used at all).
14a774a9
RK
724
725@item -pass-exit-codes
bedc7537 726Normally the @command{gcc} program will exit with the code of 1 if any
14a774a9 727phase of the compiler returns a non-success return code. If you specify
bedc7537 728@samp{-pass-exit-codes}, the @command{gcc} program will instead return with
14a774a9
RK
729numerically highest error produced by any phase that returned an error
730indication.
74291a4b
MM
731@end table
732
733If you only want some of the stages of compilation, you can use
bedc7537 734@samp{-x} (or filename suffixes) to tell @command{gcc} where to start, and
74291a4b 735one of the options @samp{-c}, @samp{-S}, or @samp{-E} to say where
bedc7537
NC
736@command{gcc} is to stop. Note that some combinations (for example,
737@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
74291a4b 738
2642624b 739@table @gcctabopt
74291a4b
MM
740@item -c
741Compile or assemble the source files, but do not link. The linking
742stage simply is not done. The ultimate output is in the form of an
743object file for each source file.
744
745By default, the object file name for a source file is made by replacing
746the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
747
748Unrecognized input files, not requiring compilation or assembly, are
749ignored.
750
751@item -S
752Stop after the stage of compilation proper; do not assemble. The output
753is in the form of an assembler code file for each non-assembler input
754file specified.
755
756By default, the assembler file name for a source file is made by
757replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
758
759Input files that don't require compilation are ignored.
760
761@item -E
762Stop after the preprocessing stage; do not run the compiler proper. The
763output is in the form of preprocessed source code, which is sent to the
764standard output.
765
766Input files which don't require preprocessing are ignored.
767
768@cindex output file option
769@item -o @var{file}
770Place output in file @var{file}. This applies regardless to whatever
771sort of output is being produced, whether it be an executable file,
772an object file, an assembler file or preprocessed C code.
773
774Since only one output file can be specified, it does not make sense to
775use @samp{-o} when compiling more than one input file, unless you are
776producing an executable file as output.
777
778If @samp{-o} is not specified, the default is to put an executable file
779in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
780@file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
781all preprocessed C source on standard output.@refill
782
783@item -v
784Print (on standard error output) the commands executed to run the stages
785of compilation. Also print the version number of the compiler driver
786program and of the preprocessor and the compiler proper.
787
788@item -pipe
789Use pipes rather than temporary files for communication between the
790various stages of compilation. This fails to work on some systems where
791the assembler is unable to read from a pipe; but the GNU assembler has
792no trouble.
844642e6
NC
793
794@item --help
795Print (on the standard output) a description of the command line options
bedc7537
NC
796understood by @command{gcc}. If the @option{-v} option is also specified
797then @option{--help} will also be passed on to the various processes
798invoked by @command{gcc}, so that they can display the command line options
799they accept. If the @option{-W} option is also specified then command
844642e6
NC
800line options which have no documentation associated with them will also
801be displayed.
10501d8f
CC
802
803@item --target-help
804Print (on the standard output) a description of target specific command
805line options for each tool.
74291a4b
MM
806@end table
807
808@node Invoking G++
809@section Compiling C++ Programs
810
811@cindex suffixes for C++ source
812@cindex C++ source file suffixes
813C++ source files conventionally use one of the suffixes @samp{.C},
bba975d4 814@samp{.cc}, @samp{.cpp}, @samp{.c++}, @samp{.cp}, or @samp{.cxx};
0c2d1a2a 815preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes
bba975d4
JM
816files with these names and compiles them as C++ programs even if you
817call the compiler the same way as for compiling C programs (usually with
bedc7537 818the name @command{gcc}).
74291a4b
MM
819
820@findex g++
821@findex c++
822However, C++ programs often require class libraries as well as a
823compiler that understands the C++ language---and under some
824circumstances, you might want to compile programs from standard input,
825or otherwise without a suffix that flags them as C++ programs.
bedc7537 826@command{g++} is a program that calls GCC with the default language
e5e809f4 827set to C++, and automatically specifies linking against the C++
bedc7537
NC
828library. On many systems, @command{g++} is also
829installed with the name @command{c++}.
74291a4b 830
bedc7537 831@cindex invoking @command{g++}
74291a4b
MM
832When you compile C++ programs, you may specify many of the same
833command-line options that you use for compiling programs in any
834language; or command-line options meaningful for C and related
835languages; or options that are meaningful only for C++ programs.
836@xref{C Dialect Options,,Options Controlling C Dialect}, for
837explanations of options for languages related to C.
838@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
839explanations of options that are meaningful only for C++ programs.
840
841@node C Dialect Options
842@section Options Controlling C Dialect
843@cindex dialect options
844@cindex language dialect options
845@cindex options, dialect
846
847The following options control the dialect of C (or languages derived
848from C, such as C++ and Objective C) that the compiler accepts:
849
2642624b 850@table @gcctabopt
74291a4b 851@cindex ANSI support
c1030c7c 852@cindex ISO support
74291a4b 853@item -ansi
c1030c7c 854In C mode, support all ISO C89 programs. In C++ mode,
775afb25 855remove GNU extensions that conflict with ISO C++.
74291a4b 856
c1030c7c 857This turns off certain features of GCC that are incompatible with ISO
775afb25 858C (when compiling C code), or of standard C++ (when compiling C++ code),
0c2d1a2a 859such as the @code{asm} and @code{typeof} keywords, and
74291a4b
MM
860predefined macros such as @code{unix} and @code{vax} that identify the
861type of system you are using. It also enables the undesirable and
c1030c7c 862rarely used ISO trigraph feature. For the C compiler,
0c2d1a2a 863it disables recognition of C++ style @samp{//} comments as well as
775afb25 864the @code{inline} keyword.
74291a4b
MM
865
866The alternate keywords @code{__asm__}, @code{__extension__},
867@code{__inline__} and @code{__typeof__} continue to work despite
c1030c7c 868@samp{-ansi}. You would not want to use them in an ISO C program, of
74291a4b
MM
869course, but it is useful to put them in header files that might be included
870in compilations done with @samp{-ansi}. Alternate predefined macros
871such as @code{__unix__} and @code{__vax__} are also available, with or
872without @samp{-ansi}.
873
c1030c7c 874The @samp{-ansi} option does not cause non-ISO programs to be
74291a4b
MM
875rejected gratuitously. For that, @samp{-pedantic} is required in
876addition to @samp{-ansi}. @xref{Warning Options}.
877
878The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
879option is used. Some header files may notice this macro and refrain
880from declaring certain functions or defining certain macros that the
c1030c7c 881ISO standard doesn't call for; this is to avoid interfering with any
74291a4b
MM
882programs that might use these names for other things.
883
01702459
JM
884Functions which would normally be builtin but do not have semantics
885defined by ISO C (such as @code{alloca} and @code{ffs}) are not builtin
886functions with @samp{-ansi} is used. @xref{Other Builtins,,Other
887built-in functions provided by GNU CC}, for details of the functions
888affected.
74291a4b 889
49419c8f 890@item -std=
3043b30e
ML
891Determine the language standard. A value for this option must be provided;
892possible values are
3932261a 893
ee457005 894@table @samp
3043b30e 895@item iso9899:1990
bedc7537 896Same as @option{-ansi}
3043b30e
ML
897
898@item iso9899:199409
899ISO C as modified in amend. 1
900
49419c8f
JM
901@item iso9899:1999
902ISO C99. Note that this standard is not yet fully supported; see
2642624b 903@w{@uref{http://gcc.gnu.org/c99status.html}} for more information.
3043b30e
ML
904
905@item c89
bedc7537 906same as @option{-std=iso9899:1990}
3043b30e 907
49419c8f 908@item c99
bedc7537 909same as @option{-std=iso9899:1999}
3043b30e
ML
910
911@item gnu89
912default, iso9899:1990 + gnu extensions
913
49419c8f
JM
914@item gnu99
915iso9899:1999 + gnu extensions
916
917@item iso9899:199x
bedc7537 918same as @option{-std=iso9899:1999}, deprecated
49419c8f
JM
919
920@item c9x
bedc7537 921same as @option{-std=iso9899:1999}, deprecated
49419c8f 922
3043b30e 923@item gnu9x
bedc7537 924same as @option{-std=gnu99}, deprecated
49419c8f 925
ee457005 926@end table
3043b30e
ML
927
928Even when this option is not specified, you can still use some of the
929features of newer standards in so far as they do not conflict with
930previous C standards. For example, you may use @code{__restrict__} even
bedc7537 931when @option{-std=c99} is not specified.
3932261a 932
5490d604
JM
933The @option{-std} options specifying some version of ISO C have the same
934effects as @option{-ansi}, except that features that were not in ISO C89
935but are in the specified version (for example, @samp{//} comments and
936the @code{inline} keyword in ISO C99) are not disabled.
937
c1030c7c
JM
938@xref{Standards,,Language Standards Supported by GCC}, for details of
939these standard versions.
940
74291a4b
MM
941@item -fno-asm
942Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
943keyword, so that code can use these words as identifiers. You can use
944the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
945instead. @samp{-ansi} implies @samp{-fno-asm}.
946
947In C++, this switch only affects the @code{typeof} keyword, since
948@code{asm} and @code{inline} are standard keywords. You may want to
5490d604
JM
949use the @samp{-fno-gnu-keywords} flag instead, which has the same
950effect. In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
951switch only affects the @code{asm} and @code{typeof} keywords, since
952@code{inline} is a standard keyword in ISO C99.
74291a4b
MM
953
954@item -fno-builtin
955@cindex builtin functions
01702459
JM
956Don't recognize builtin functions that do not begin with
957@samp{__builtin_} as prefix. @xref{Other Builtins,,Other built-in
958functions provided by GNU CC}, for details of the functions affected,
5490d604
JM
959including those which are not builtin functions when @option{-ansi} or
960@option{-std} options for strict ISO C conformance are used because they
961do not have an ISO standard meaning.
74291a4b
MM
962
963GCC normally generates special code to handle certain builtin functions
964more efficiently; for instance, calls to @code{alloca} may become single
965instructions that adjust the stack directly, and calls to @code{memcpy}
966may become inline copy loops. The resulting code is often both smaller
967and faster, but since the function calls no longer appear as such, you
968cannot set a breakpoint on those calls, nor can you change the behavior
969of the functions by linking with a different library.
970
861bb6c1
JL
971@item -fhosted
972@cindex hosted environment
973
974Assert that compilation takes place in a hosted environment. This implies
975@samp{-fbuiltin}. A hosted environment is one in which the
976entire standard library is available, and in which @code{main} has a return
977type of @code{int}. Examples are nearly everything except a kernel.
978This is equivalent to @samp{-fno-freestanding}.
979
980@item -ffreestanding
981@cindex hosted environment
982
983Assert that compilation takes place in a freestanding environment. This
984implies @samp{-fno-builtin}. A freestanding environment
985is one in which the standard library may not exist, and program startup may
986not necessarily be at @code{main}. The most obvious example is an OS kernel.
987This is equivalent to @samp{-fno-hosted}.
988
c1030c7c
JM
989@xref{Standards,,Language Standards Supported by GCC}, for details of
990freestanding and hosted environments.
991
74291a4b 992@item -trigraphs
c1030c7c 993Support ISO C trigraphs. You don't want to know about this
5490d604
JM
994brain-damage. The @option{-ansi} option (and @option{-std} options for
995strict ISO C conformance) implies @option{-trigraphs}.
74291a4b
MM
996
997@cindex traditional C language
998@cindex C language, traditional
999@item -traditional
1000Attempt to support some aspects of traditional C compilers.
1001Specifically:
1002
1003@itemize @bullet
1004@item
1005All @code{extern} declarations take effect globally even if they
1006are written inside of a function definition. This includes implicit
1007declarations of functions.
1008
1009@item
1010The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
1011and @code{volatile} are not recognized. (You can still use the
1012alternative keywords such as @code{__typeof__}, @code{__inline__}, and
1013so on.)
1014
1015@item
1016Comparisons between pointers and integers are always allowed.
1017
1018@item
1019Integer types @code{unsigned short} and @code{unsigned char} promote
1020to @code{unsigned int}.
1021
1022@item
1023Out-of-range floating point literals are not an error.
1024
1025@item
c1030c7c 1026Certain constructs which ISO regards as a single invalid preprocessing
74291a4b
MM
1027number, such as @samp{0xe-0xd}, are treated as expressions instead.
1028
1029@item
1030String ``constants'' are not necessarily constant; they are stored in
1031writable space, and identical looking constants are allocated
1032separately. (This is the same as the effect of
1033@samp{-fwritable-strings}.)
1034
1035@cindex @code{longjmp} and automatic variables
1036@item
1037All automatic variables not declared @code{register} are preserved by
c1030c7c 1038@code{longjmp}. Ordinarily, GNU C follows ISO C: automatic variables
74291a4b
MM
1039not declared @code{volatile} may be clobbered.
1040
1041@item
1042@kindex \x
1043@kindex \a
1044@cindex escape sequences, traditional
1045The character escape sequences @samp{\x} and @samp{\a} evaluate as the
1046literal characters @samp{x} and @samp{a} respectively. Without
1047@w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal
1048representation of a character, and @samp{\a} produces a bell.
ad299d9b 1049@end itemize
74291a4b 1050
74291a4b
MM
1051You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
1052if your program uses names that are normally GNU C builtin functions for
1053other purposes of its own.
1054
1055You cannot use @samp{-traditional} if you include any header files that
c1030c7c
JM
1056rely on ISO C features. Some vendors are starting to ship systems with
1057ISO C header files and you cannot use @samp{-traditional} on such
74291a4b
MM
1058systems to compile files that include any system headers.
1059
e5e809f4
JL
1060The @samp{-traditional} option also enables @samp{-traditional-cpp},
1061which is described next.
74291a4b
MM
1062
1063@item -traditional-cpp
1064Attempt to support some aspects of traditional C preprocessors.
1065Specifically:
1066
1067@itemize @bullet
1068@item
1069Comments convert to nothing at all, rather than to a space. This allows
1070traditional token concatenation.
1071
1072@item
1073In a preprocessing directive, the @samp{#} symbol must appear as the first
1074character of a line.
1075
1076@item
1077Macro arguments are recognized within string constants in a macro
1078definition (and their values are stringified, though without additional
1079quote marks, when they appear in such a context). The preprocessor
1080always considers a string constant to end at a newline.
1081
1082@item
1083@cindex detecting @w{@samp{-traditional}}
1084The predefined macro @code{__STDC__} is not defined when you use
1085@samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions
1086which @code{__GNUC__} indicates are not affected by
1087@samp{-traditional}). If you need to write header files that work
1088differently depending on whether @samp{-traditional} is in use, by
1089testing both of these predefined macros you can distinguish four
c1030c7c 1090situations: GNU C, traditional GNU C, other ISO C compilers, and other
74291a4b
MM
1091old C compilers. The predefined macro @code{__STDC_VERSION__} is also
1092not defined when you use @samp{-traditional}. @xref{Standard
1093Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
1094for more discussion of these and other predefined macros.
1095
1096@item
1097@cindex string constants vs newline
1098@cindex newline vs string constants
1099The preprocessor considers a string constant to end at a newline (unless
1100the newline is escaped with @samp{\}). (Without @w{@samp{-traditional}},
1101string constants can contain the newline character as typed.)
1102@end itemize
1103
1104@item -fcond-mismatch
1105Allow conditional expressions with mismatched types in the second and
a7537031
JM
1106third arguments. The value of such an expression is void. This option
1107is not supported for C++.
74291a4b
MM
1108
1109@item -funsigned-char
1110Let the type @code{char} be unsigned, like @code{unsigned char}.
1111
1112Each kind of machine has a default for what @code{char} should
1113be. It is either like @code{unsigned char} by default or like
1114@code{signed char} by default.
1115
1116Ideally, a portable program should always use @code{signed char} or
1117@code{unsigned char} when it depends on the signedness of an object.
1118But many programs have been written to use plain @code{char} and
1119expect it to be signed, or expect it to be unsigned, depending on the
1120machines they were written for. This option, and its inverse, let you
1121make such a program work with the opposite default.
1122
1123The type @code{char} is always a distinct type from each of
1124@code{signed char} or @code{unsigned char}, even though its behavior
1125is always just like one of those two.
1126
1127@item -fsigned-char
1128Let the type @code{char} be signed, like @code{signed char}.
1129
1130Note that this is equivalent to @samp{-fno-unsigned-char}, which is
1131the negative form of @samp{-funsigned-char}. Likewise, the option
1132@samp{-fno-signed-char} is equivalent to @samp{-funsigned-char}.
1133
1134You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
1135if your program uses names that are normally GNU C builtin functions for
1136other purposes of its own.
1137
1138You cannot use @samp{-traditional} if you include any header files that
c1030c7c
JM
1139rely on ISO C features. Some vendors are starting to ship systems with
1140ISO C header files and you cannot use @samp{-traditional} on such
74291a4b
MM
1141systems to compile files that include any system headers.
1142
1143@item -fsigned-bitfields
1144@itemx -funsigned-bitfields
1145@itemx -fno-signed-bitfields
1146@itemx -fno-unsigned-bitfields
1147These options control whether a bitfield is signed or unsigned, when the
1148declaration does not use either @code{signed} or @code{unsigned}. By
1149default, such a bitfield is signed, because this is consistent: the
1150basic integer types such as @code{int} are signed types.
1151
1152However, when @samp{-traditional} is used, bitfields are all unsigned
1153no matter what.
1154
1155@item -fwritable-strings
1156Store string constants in the writable data segment and don't uniquize
1157them. This is for compatibility with old programs which assume they can
1158write into string constants. The option @samp{-traditional} also has
1159this effect.
1160
1161Writing into string constants is a very bad idea; ``constants'' should
1162be constant.
1163
1164@item -fallow-single-precision
1165Do not promote single precision math operations to double precision,
1166even when compiling with @samp{-traditional}.
1167
1168Traditional K&R C promotes all floating point operations to double
1169precision, regardless of the sizes of the operands. On the
1170architecture for which you are compiling, single precision may be faster
1171than double precision. If you must use @samp{-traditional}, but want
1172to use single precision operations when the operands are single
1173precision, use this option. This option has no effect when compiling
c1030c7c 1174with ISO or GNU C conventions (the default).
74291a4b 1175
3e37bef5
JM
1176@item -fshort-wchar
1177Override the underlying type for @samp{wchar_t} to be @samp{short
1178unsigned int} instead of the default for the target. This option is
1179useful for building programs to run under WINE.
74291a4b
MM
1180@end table
1181
1182@node C++ Dialect Options
1183@section Options Controlling C++ Dialect
1184
1185@cindex compiler options, C++
1186@cindex C++ options, command line
1187@cindex options, C++
1188This section describes the command-line options that are only meaningful
1189for C++ programs; but you can also use most of the GNU compiler options
1190regardless of what language your program is in. For example, you
1191might compile a file @code{firstClass.C} like this:
1192
1193@example
1dc5fc4b 1194g++ -g -frepo -O -c firstClass.C
74291a4b
MM
1195@end example
1196
1197@noindent
1dc5fc4b 1198In this example, only @samp{-frepo} is an option meant
74291a4b 1199only for C++ programs; you can use the other options with any
0c2d1a2a 1200language supported by GCC.
74291a4b
MM
1201
1202Here is a list of options that are @emph{only} for compiling C++ programs:
1203
2642624b 1204@table @gcctabopt
74291a4b
MM
1205@item -fno-access-control
1206Turn off all access checking. This switch is mainly useful for working
1207around bugs in the access control code.
1208
74291a4b
MM
1209@item -fcheck-new
1210Check that the pointer returned by @code{operator new} is non-null
1211before attempting to modify the storage allocated. The current Working
1212Paper requires that @code{operator new} never return a null pointer, so
1213this check is normally unnecessary.
1214
1dc5fc4b
JM
1215An alternative to using this option is to specify that your
1216@code{operator new} does not throw any exceptions; if you declare it
1217@samp{throw()}, g++ will check the return value. See also @samp{new
1218(nothrow)}.
1219
74291a4b
MM
1220@item -fconserve-space
1221Put uninitialized or runtime-initialized global variables into the
1222common segment, as C does. This saves space in the executable at the
1223cost of not diagnosing duplicate definitions. If you compile with this
1224flag and your program mysteriously crashes after @code{main()} has
1225completed, you may have an object that is being destroyed twice because
1226two definitions were merged.
1227
1dc5fc4b
JM
1228This option is no longer useful on most targets, now that support has
1229been added for putting variables into BSS without making them common.
1230
74291a4b
MM
1231@item -fdollars-in-identifiers
1232Accept @samp{$} in identifiers. You can also explicitly prohibit use of
eb795509
RK
1233@samp{$} with the option @samp{-fno-dollars-in-identifiers}. (GNU C allows
1234@samp{$} by default on most target systems, but there are a few exceptions.)
74291a4b 1235Traditional C allowed the character @samp{$} to form part of
c1030c7c 1236identifiers. However, ISO C and C++ forbid @samp{$} in identifiers.
74291a4b 1237
1dc5fc4b
JM
1238@item -fno-elide-constructors
1239The C++ standard allows an implementation to omit creating a temporary
1240which is only used to initialize another object of the same type.
1241Specifying this option disables that optimization, and forces g++ to
1242call the copy constructor in all cases.
74291a4b 1243
dd1ba632
JM
1244@item -fno-enforce-eh-specs
1245Don't check for violation of exception specifications at runtime. This
1246option violates the C++ standard, but may be useful for reducing code
1247size in production builds, much like defining @samp{NDEBUG}. The compiler
1248will still optimize based on the exception specifications.
1249
74291a4b
MM
1250@item -fexternal-templates
1251Cause template instantiations to obey @samp{#pragma interface} and
1252@samp{implementation}; template instances are emitted or not according
1253to the location of the template definition. @xref{Template
1254Instantiation}, for more information.
1255
37f6b6bf
MM
1256This option is deprecated.
1257
74291a4b
MM
1258@item -falt-external-templates
1259Similar to -fexternal-templates, but template instances are emitted or
1260not according to the place where they are first instantiated.
1261@xref{Template Instantiation}, for more information.
1262
37f6b6bf
MM
1263This option is deprecated.
1264
74291a4b 1265@item -ffor-scope
8c81598d 1266@itemx -fno-for-scope
74291a4b
MM
1267If -ffor-scope is specified, the scope of variables declared in
1268a @i{for-init-statement} is limited to the @samp{for} loop itself,
34527c47 1269as specified by the C++ standard.
74291a4b
MM
1270If -fno-for-scope is specified, the scope of variables declared in
1271a @i{for-init-statement} extends to the end of the enclosing scope,
1272as was the case in old versions of gcc, and other (traditional)
1273implementations of C++.
1274
1275The default if neither flag is given to follow the standard,
1276but to allow and give a warning for old-style code that would
1277otherwise be invalid, or have different behavior.
1278
1279@item -fno-gnu-keywords
9762e8a4
ML
1280Do not recognize @code{typeof} as a keyword, so that code can use this
1281word as an identifier. You can use the keyword @code{__typeof__} instead.
1282@samp{-ansi} implies @samp{-fno-gnu-keywords}.
74291a4b 1283
95c81fb8
ML
1284@item -fhonor-std
1285Treat the @code{namespace std} as a namespace, instead of ignoring
1286it. For compatibility with earlier versions of g++, the compiler will,
1287by default, ignore @code{namespace-declarations},
1288@code{using-declarations}, @code{using-directives}, and
1289@code{namespace-names}, if they involve @code{std}.
1290
74291a4b
MM
1291@item -fhuge-objects
1292Support virtual function calls for objects that exceed the size
1293representable by a @samp{short int}. Users should not use this flag by
1dc5fc4b 1294default; if you need to use it, the compiler will tell you so.
74291a4b
MM
1295
1296This flag is not useful when compiling with -fvtable-thunks.
1297
1dc5fc4b
JM
1298Like all options that change the ABI, all C++ code, @emph{including
1299libgcc} must be built with the same setting of this option.
1300
1301@item -fno-implicit-templates
bba975d4
JM
1302Never emit code for non-inline templates which are instantiated
1303implicitly (i.e. by use); only emit code for explicit instantiations.
1304@xref{Template Instantiation}, for more information.
1305
1306@item -fno-implicit-inline-templates
1307Don't emit code for implicit instantiations of inline templates, either.
1308The default is to handle inlines differently so that compiles with and
1309without optimization will need the same set of explicit instantiations.
1dc5fc4b 1310
74291a4b
MM
1311@item -fno-implement-inlines
1312To save space, do not emit out-of-line copies of inline functions
1313controlled by @samp{#pragma implementation}. This will cause linker
1314errors if these functions are not inlined everywhere they are called.
1315
631cf95d 1316@item -fms-extensions
32fb1fb2
PE
1317Disable pedantic warnings about constructs used in MFC, such as implicit
1318int and getting a pointer to member function via non-standard syntax.
631cf95d 1319
669ec2b4
JM
1320@item -fname-mangling-version-@var{n}
1321Control the way in which names are mangled. Version 0 is compatible
1322with versions of g++ before 2.8. Version 1 is the default. Version 1
1323will allow correct mangling of function templates. For example,
1324version 0 mangling does not mangle foo<int, double> and foo<int, char>
1325given this declaration:
1326
1327@example
1328template <class T, class U> void foo(T t);
1329@end example
1330
1331Like all options that change the ABI, all C++ code, @emph{including
1332libgcc} must be built with the same setting of this option.
1333
775afb25
ML
1334@item -fno-operator-names
1335Do not treat the operator name keywords @code{and}, @code{bitand},
74291a4b 1336@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
775afb25 1337synonyms as keywords.
74291a4b 1338
4f8b4fd9
JM
1339@item -fno-optional-diags
1340Disable diagnostics that the standard says a compiler does not need to
bba975d4
JM
1341issue. Currently, the only such diagnostic issued by g++ is the one for
1342a name having multiple meanings within a class.
4f8b4fd9 1343
8c7707b0
JM
1344@item -fpermissive
1345Downgrade messages about nonconformant code from errors to warnings. By
1346default, g++ effectively sets @samp{-pedantic-errors} without
1347@samp{-pedantic}; this option reverses that. This behavior and this
2d9f9cf1 1348option are superseded by @samp{-pedantic}, which works as it does for GNU C.
8c7707b0 1349
8c81598d
JM
1350@item -frepo
1351Enable automatic template instantiation. This option also implies
1352@samp{-fno-implicit-templates}. @xref{Template Instantiation}, for more
1353information.
1354
8c7707b0 1355@item -fno-rtti
a7fbfcf9
JM
1356Disable generation of information about every class with virtual
1357functions for use by the C++ runtime type identification features
1358(@samp{dynamic_cast} and @samp{typeid}). If you don't use those parts
1359of the language, you can save some space by using this flag. Note that
1360exception handling uses the same information, but it will generate it as
1361needed.
8c7707b0 1362
669ec2b4
JM
1363@item -fsquangle
1364@itemx -fno-squangle
1365@samp{-fsquangle} will enable a compressed form of name mangling for
1366identifiers. In particular, it helps to shorten very long names by recognizing
1367types and class names which occur more than once, replacing them with special
1368short ID codes. This option also requires any C++ libraries being used to
1369be compiled with this option as well. The compiler has this disabled (the
1370equivalent of @samp{-fno-squangle}) by default.
1371
1372Like all options that change the ABI, all C++ code, @emph{including
1373libgcc.a} must be built with the same setting of this option.
1374
1dc5fc4b
JM
1375@item -ftemplate-depth-@var{n}
1376Set the maximum instantiation depth for template classes to @var{n}.
1377A limit on the template instantiation depth is needed to detect
1378endless recursions during template class instantiation. ANSI/ISO C++
1379conforming programs must not rely on a maximum depth greater than 17.
1380
fc693822
MM
1381@item -fuse-cxa-atexit
1382Register destructors for objects with static storage duration with the
1383@code{__cxa_atexit} function rather than the @code{atexit} function.
1384This option is required for fully standards-compliant handling of static
1385destructors, but will only work if your C library supports
1386@code{__cxa_atexit}.
1387
74291a4b
MM
1388@item -fvtable-thunks
1389Use @samp{thunks} to implement the virtual function dispatch table
1390(@samp{vtable}). The traditional (cfront-style) approach to
1391implementing vtables was to store a pointer to the function and two
1392offsets for adjusting the @samp{this} pointer at the call site. Newer
1393implementations store a single pointer to a @samp{thunk} function which
1394does any necessary adjustment and then calls the target function.
1395
f5a1b0d2
NC
1396This option also enables a heuristic for controlling emission of
1397vtables; if a class has any non-inline virtual functions, the vtable
1398will be emitted in the translation unit containing the first one of
1399those.
1400
1dc5fc4b
JM
1401Like all options that change the ABI, all C++ code, @emph{including
1402libgcc.a} must be built with the same setting of this option.
861bb6c1 1403
74291a4b
MM
1404@item -nostdinc++
1405Do not search for header files in the standard directories specific to
1406C++, but do still search the other standard directories. (This option
e5e809f4 1407is used when building the C++ library.)
74291a4b
MM
1408@end table
1409
1410In addition, these optimization, warning, and code generation options
1411have meanings only for C++ programs:
1412
2642624b 1413@table @gcctabopt
74291a4b
MM
1414@item -fno-default-inline
1415Do not assume @samp{inline} for functions defined inside a class scope.
1dc5fc4b
JM
1416@xref{Optimize Options,,Options That Control Optimization}. Note that these
1417functions will have linkage like inline functions; they just won't be
1418inlined by default.
74291a4b 1419
bba975d4
JM
1420@item -Wctor-dtor-privacy (C++ only)
1421Warn when a class seems unusable, because all the constructors or
1422destructors in a class are private and the class has no friends or
1423public static member functions.
1424
1425@item -Wnon-virtual-dtor (C++ only)
1426Warn when a class declares a non-virtual destructor that should probably
1427be virtual, because it looks like the class will be used polymorphically.
1428
1429@item -Wreorder (C++ only)
1430@cindex reordering, warning
1431@cindex warning for reordering of member initializers
1432Warn when the order of member initializers given in the code does not
1433match the order in which they must be executed. For instance:
1434
1435@smallexample
1436struct A @{
1437 int i;
1438 int j;
1439 A(): j (0), i (1) @{ @}
1440@};
1441@end smallexample
1442
1443Here the compiler will warn that the member initializers for @samp{i}
1444and @samp{j} will be rearranged to match the declaration order of the
1445members.
1446@end table
1447
1448The following @samp{-W@dots{}} options are not affected by @samp{-Wall}.
1449
2642624b 1450@table @gcctabopt
bba975d4
JM
1451@item -Weffc++ (C++ only)
1452Warn about violations of various style guidelines from Scott Meyers'
1453@cite{Effective C++} books. If you use this option, you should be aware
1454that the standard library headers do not obey all of these guidelines;
1455you can use @samp{grep -v} to filter out those warnings.
1456
2de45c06
ML
1457@item -Wno-deprecated (C++ only)
1458Do not warn about usage of deprecated features. @xref{Deprecated Features}.
1459
bba975d4
JM
1460@item -Wno-non-template-friend (C++ only)
1461Disable warnings when non-templatized friend functions are declared
1462within a template. With the advent of explicit template specification
1463support in g++, if the name of the friend is an unqualified-id (ie,
1464@samp{friend foo(int)}), the C++ language specification demands that the
1465friend declare or define an ordinary, nontemplate function. (Section
146614.5.3). Before g++ implemented explicit specification, unqualified-ids
1467could be interpreted as a particular specialization of a templatized
1468function. Because this non-conforming behavior is no longer the default
1469behavior for g++, @samp{-Wnon-template-friend} allows the compiler to
1470check existing code for potential trouble spots, and is on by default.
2228d450
MM
1471This new compiler behavior can be turned off with
1472@samp{-Wno-non-template-friend} which keeps the conformant compiler code
1473but disables the helpful warning.
bba975d4
JM
1474
1475@item -Wold-style-cast (C++ only)
1476Warn if an old-style (C-style) cast is used within a C++ program. The
1477new-style casts (@samp{static_cast}, @samp{reinterpret_cast}, and
1478@samp{const_cast}) are less vulnerable to unintended effects.
1479
1480@item -Woverloaded-virtual (C++ only)
1481@cindex overloaded virtual fn, warning
1482@cindex warning for overloaded virtual fn
1483Warn when a derived class function declaration may be an error in
1484defining a virtual function. In a derived class, the
1485definitions of virtual functions must match the type signature of a
1486virtual function declared in the base class. With this option, the
1487compiler warns when you define a function with the same name as a
1488virtual function, but with a type signature that does not match any
1489declarations from the base class.
1490
1491@item -Wno-pmf-conversions (C++ only)
1492Disable the diagnostic for converting a bound pointer to member function
1493to a plain pointer.
1494
1495@item -Wsign-promo (C++ only)
1496Warn when overload resolution chooses a promotion from unsigned or
1497enumeral type to a signed type over a conversion to an unsigned type of
1498the same size. Previous versions of g++ would try to preserve
1499unsignedness, but the standard mandates the current behavior.
1500
1501@item -Wsynth (C++ only)
1502@cindex warning for synthesized methods
1503@cindex synthesized methods, warning
1504Warn when g++'s synthesis behavior does not match that of cfront. For
1505instance:
1506
1507@smallexample
1508struct A @{
1509 operator int ();
1510 A& operator = (int);
1511@};
1512
1513main ()
1514@{
1515 A a,b;
1516 a = b;
1517@}
1518@end smallexample
74291a4b 1519
bba975d4
JM
1520In this example, g++ will synthesize a default @samp{A& operator =
1521(const A&);}, while cfront will use the user-defined @samp{operator =}.
74291a4b
MM
1522@end table
1523
764dbbf2
GDR
1524@node Language Independent Options
1525@section Options to Control Diagnostic Messages Formatting
1526@cindex options to control diagnostics formatting
1527@cindex diagnostic messages
1528@cindex message formatting
1529
b192711e 1530Traditionally, diagnostic messages have been formatted irrespective of
764dbbf2
GDR
1531the output device's aspect (e.g. its width, ...). The options described
1532below can be used to control the diagnostic messages formatting
1533algorithm, e.g. how many characters per line, how often source location
1534information should be reported. Right now, only the C++ front-end can
1535honor these options. However it is expected, in the near future, that
1536the remaining front-ends would be able to digest them correctly.
1537
2642624b 1538@table @gcctabopt
764dbbf2
GDR
1539@item -fmessage-length=@var{n}
1540Try to format error messages so that they fit on lines of about @var{n}
1541characters. The default is 72 characters for g++ and 0 for the rest of
1542the front-ends supported by GCC. If @var{n} is zero, then no
1543line-wrapping will be done; each error message will appear on a single
1544line.
1545
1546@item -fdiagnostics-show-location=once
b192711e 1547Only meaningful in line-wrapping mode. Instructs the diagnostic messages
764dbbf2
GDR
1548reporter to emit @emph{once} source location information; that is, in
1549case the message is too long to fit on a single physical line and has to
1550be wrapped, the source location won't be emitted (as prefix) again,
1551over and over, in subsequent continuation lines. This is the default
1552behaviour.
1553
1554@item -fdiagnostics-show-location=every-line
1555Only meaningful in line-wrapping mode. Instructs the diagnostic
1556messages reporter to emit the same source location information (as
1557prefix) for physical lines that result from the process of breaking a
b192711e 1558a message which is too long to fit on a single line.
764dbbf2
GDR
1559
1560@end table
1561
74291a4b
MM
1562@node Warning Options
1563@section Options to Request or Suppress Warnings
1564@cindex options to control warnings
1565@cindex warning messages
1566@cindex messages, warning
1567@cindex suppressing warnings
1568
1569Warnings are diagnostic messages that report constructions which
1570are not inherently erroneous but which are risky or suggest there
1571may have been an error.
1572
1573You can request many specific warnings with options beginning @samp{-W},
1574for example @samp{-Wimplicit} to request warnings on implicit
1575declarations. Each of these specific warning options also has a
1576negative form beginning @samp{-Wno-} to turn off warnings;
1577for example, @samp{-Wno-implicit}. This manual lists only one of the
1578two forms, whichever is not the default.
1579
0c2d1a2a 1580These options control the amount and kinds of warnings produced by GCC:
74291a4b 1581
2642624b 1582@table @gcctabopt
74291a4b
MM
1583@cindex syntax checking
1584@item -fsyntax-only
1585Check the code for syntax errors, but don't do anything beyond that.
1586
1587@item -pedantic
074e95e3
JM
1588Issue all the warnings demanded by strict ISO C and ISO C++;
1589reject all programs that use forbidden extensions, and some other
1590programs that do not follow ISO C and ISO C++. For ISO C, follows the
1591version of the ISO C standard specified by any @samp{-std} option used.
74291a4b 1592
074e95e3 1593Valid ISO C and ISO C++ programs should compile properly with or without
5490d604
JM
1594this option (though a rare few will require @option{-ansi} or a
1595@option{-std} option specifying the required version of ISO C). However,
b1d16193
JL
1596without this option, certain GNU extensions and traditional C and C++
1597features are supported as well. With this option, they are rejected.
74291a4b
MM
1598
1599@samp{-pedantic} does not cause warning messages for use of the
1600alternate keywords whose names begin and end with @samp{__}. Pedantic
1601warnings are also disabled in the expression that follows
1602@code{__extension__}. However, only system header files should use
1603these escape routes; application programs should avoid them.
1604@xref{Alternate Keywords}.
1605
074e95e3 1606Some users try to use @samp{-pedantic} to check programs for strict ISO
74291a4b 1607C conformance. They soon find that it does not do quite what they want:
c1030c7c 1608it finds some non-ISO practices, but not all---only those for which
074e95e3
JM
1609ISO C @emph{requires} a diagnostic, and some others for which
1610diagnostics have been added.
74291a4b 1611
074e95e3 1612A feature to report any failure to conform to ISO C might be useful in
74291a4b 1613some instances, but would require considerable additional work and would
892d0a6d
AO
1614be quite different from @samp{-pedantic}. We don't have plans to
1615support such a feature in the near future.
74291a4b
MM
1616
1617@item -pedantic-errors
1618Like @samp{-pedantic}, except that errors are produced rather than
1619warnings.
1620
1621@item -w
1622Inhibit all warning messages.
1623
1624@item -Wno-import
1625Inhibit warning messages about the use of @samp{#import}.
1626
1627@item -Wchar-subscripts
1628Warn if an array subscript has type @code{char}. This is a common cause
1629of error, as programmers often forget that this type is signed on some
1630machines.
1631
1632@item -Wcomment
1633Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
1634comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
1635
1636@item -Wformat
1637Check calls to @code{printf} and @code{scanf}, etc., to make sure that
1638the arguments supplied have types appropriate to the format string
26f6672d
JM
1639specified, and that the conversions specified in the format string make
1640sense. This includes standard functions, and others specified by format
1641attributes (@pxref{Function Attributes}), in the @code{printf},
1642@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
1643not in the C standard) families.
74291a4b 1644
8308e0b7
JM
1645The formats are checked against the format features supported by GNU
1646libc version 2.2. These include all ISO C89 and C99 features, as well
1647as features from the Single Unix Specification and some BSD and GNU
1648extensions. Other library implementations may not support all these
1649features; GCC does not support warning about features that go beyond a
1650particular library's limitations. However, if @samp{-pedantic} is used
1651with @samp{-Wformat}, warnings will be given about format features not
26f6672d
JM
1652in the selected standard version (but not for @code{strfmon} formats,
1653since those are not in any version of the C standard). @xref{C Dialect
1654Options,,Options Controlling C Dialect}.
8308e0b7 1655
4d808927
JM
1656@samp{-Wformat} is included in @samp{-Wall}. For more control over some
1657aspects of format checking, the options @samp{-Wno-format-y2k},
c907e684
JM
1658@samp{-Wno-format-extra-args}, @samp{-Wformat-nonliteral},
1659@samp{-Wformat-security} and @samp{-Wformat=2} are available, but are
1660not included in @samp{-Wall}.
4d808927
JM
1661
1662@item -Wno-format-y2k
1663If @samp{-Wformat} is specified, do not warn about @code{strftime}
1664formats which may yield only a two-digit year.
1665
1666@item -Wno-format-extra-args
1667If @samp{-Wformat} is specified, do not warn about excess arguments to a
1668@code{printf} or @code{scanf} format function. The C standard specifies
1669that such arguments are ignored.
1670
1671@item -Wformat-nonliteral
1672If @samp{-Wformat} is specified, also warn if the format string is not a
1673string literal and so cannot be checked, unless the format function
1674takes its format arguments as a @code{va_list}.
1675
c907e684
JM
1676@item -Wformat-security
1677If @samp{-Wformat} is specified, also warn about uses of format
1678functions that represent possible security problems. At present, this
1679warns about calls to @code{printf} and @code{scanf} functions where the
1680format string is not a string literal and there are no format arguments,
1681as in @code{printf (foo);}. This may be a security hole if the format
1682string came from untrusted input and contains @samp{%n}. (This is
1683currently a subset of what @samp{-Wformat-nonliteral} warns about, but
1684in future warnings may be added to @samp{-Wformat-security} that are not
1685included in @samp{-Wformat-nonliteral}.)
1686
4d808927
JM
1687@item -Wformat=2
1688Enable @samp{-Wformat} plus format checks not included in
1689@samp{-Wformat}. Currently equivalent to @samp{-Wformat
c907e684 1690-Wformat-nonliteral -Wformat-security}.
4d808927 1691
e9a25f70
JL
1692@item -Wimplicit-int
1693Warn when a declaration does not specify a type.
1694
f5963e61
JL
1695@item -Wimplicit-function-declaration
1696@itemx -Werror-implicit-function-declaration
1697Give a warning (or error) whenever a function is used before being
1698declared.
e9a25f70 1699
74291a4b 1700@item -Wimplicit
e5e809f4
JL
1701Same as @samp{-Wimplicit-int} and @samp{-Wimplicit-function-}@*
1702@samp{declaration}.
861bb6c1
JL
1703
1704@item -Wmain
1705Warn if the type of @samp{main} is suspicious. @samp{main} should be a
1706function with external linkage, returning int, taking either zero
1707arguments, two, or three arguments of appropriate types.
4a870dba
JM
1708
1709@item -Wmultichar
1710Warn if a multicharacter constant (@samp{'FOOF'}) is used. Usually they
1711indicate a typo in the user's code, as they have implementation-defined
1712values, and should not be used in portable code.
3c12fcc2 1713
74291a4b
MM
1714@item -Wparentheses
1715Warn if parentheses are omitted in certain contexts, such
1716as when there is an assignment in a context where a truth value
1717is expected, or when operators are nested whose precedence people
1718often get confused about.
1719
e9a25f70
JL
1720Also warn about constructions where there may be confusion to which
1721@code{if} statement an @code{else} branch belongs. Here is an example of
1722such a case:
1723
1724@smallexample
1725@{
1726 if (a)
1727 if (b)
1728 foo ();
1729 else
1730 bar ();
1731@}
1732@end smallexample
1733
1734In C, every @code{else} branch belongs to the innermost possible @code{if}
1735statement, which in this example is @code{if (b)}. This is often not
1736what the programmer expected, as illustrated in the above example by
1737indentation the programmer chose. When there is the potential for this
1738confusion, GNU C will issue a warning when this flag is specified.
1739To eliminate the warning, add explicit braces around the innermost
1740@code{if} statement so there is no way the @code{else} could belong to
1741the enclosing @code{if}. The resulting code would look like this:
1742
1743@smallexample
1744@{
1745 if (a)
1746 @{
1747 if (b)
1748 foo ();
1749 else
1750 bar ();
1751 @}
1752@}
1753@end smallexample
1754
bb58bec5
JM
1755@item -Wsequence-point
1756Warn about code that may have undefined semantics because of violations
1757of sequence point rules in the C standard.
1758
1759The C standard defines the order in which expressions in a C program are
1760evaluated in terms of @dfn{sequence points}, which represent a partial
1761ordering between the execution of parts of the program: those executed
1762before the sequence point, and those executed after it. These occur
1763after the evaluation of a full expression (one which is not part of a
1764larger expression), after the evaluation of the first operand of a
1765@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
1766function is called (but after the evaluation of its arguments and the
1767expression denoting the called function), and in certain other places.
1768Other than as expressed by the sequence point rules, the order of
1769evaluation of subexpressions of an expression is not specified. All
1770these rules describe only a partial order rather than a total order,
1771since, for example, if two functions are called within one expression
1772with no sequence point between them, the order in which the functions
1773are called is not specified. However, the standards committee have
1774ruled that function calls do not overlap.
1775
1776It is not specified when between sequence points modifications to the
1777values of objects take effect. Programs whose behavior depends on this
1778have undefined behavior; the C standard specifies that ``Between the
1779previous and next sequence point an object shall have its stored value
1780modified at most once by the evaluation of an expression. Furthermore,
1781the prior value shall be read only to determine the value to be
1782stored.''. If a program breaks these rules, the results on any
1783particular implementation are entirely unpredictable.
1784
1785Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
1786= b[n++]} and @code{a[i++] = i;}. Some more complicated cases are not
1787diagnosed by this option, and it may give an occasional false positive
1788result, but in general it has been found fairly effective at detecting
1789this sort of problem in programs.
1790
1791The present implementation of this option only works for C programs. A
1792future implementation may also work for C++ programs.
1793
1794There is some controversy over the precise meaning of the sequence point
1795rules in subtle cases. Alternative formal definitions may be found in
1796Clive Feather's ``Annex S''
2642624b 1797@w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n925.htm}} and in
bb58bec5 1798Michael Norrish's thesis
2642624b 1799@w{@uref{http://www.cl.cam.ac.uk/users/mn200/PhD/thesis-report.ps.gz}}.
163686bd 1800Other discussions are by Raymond Mak
2642624b 1801@w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n926.htm}} and
163686bd 1802D. Hugh Redelmeier
2642624b 1803@w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n927.htm}}.
bb58bec5 1804
74291a4b 1805@item -Wreturn-type
32c4c36c
ML
1806Warn whenever a function is defined with a return-type that defaults to
1807@code{int}. Also warn about any @code{return} statement with no
1808return-value in a function whose return-type is not @code{void}.
1809
1810For C++, a function without return type always produces a diagnostic
1811message, even when @samp{-Wno-return-type} is specified. The only
1812exceptions are @samp{main} and functions defined in system headers.
74291a4b
MM
1813
1814@item -Wswitch
1815Warn whenever a @code{switch} statement has an index of enumeral type
1816and lacks a @code{case} for one or more of the named codes of that
1817enumeration. (The presence of a @code{default} label prevents this
1818warning.) @code{case} labels outside the enumeration range also
1819provoke warnings when this option is used.
1820
1821@item -Wtrigraphs
f2ecb02d
JM
1822Warn if any trigraphs are encountered that might change the meaning of
1823the program (trigraphs within comments are not warned about).
74291a4b 1824
078721e1
AC
1825@item -Wunused-function
1826Warn whenever a static function is declared but not defined or a
1827non\-inline static function is unused.
74291a4b 1828
078721e1
AC
1829@item -Wunused-label
1830Warn whenever a label is declared but not used.
1831
1832To suppress this warning use the @samp{unused} attribute
1833(@pxref{Variable Attributes}).
1834
1835@item -Wunused-parameter
1836Warn whenever a function parameter is unused aside from its declaration.
1837
1838To suppress this warning use the @samp{unused} attribute
1839(@pxref{Variable Attributes}).
956d6950 1840
078721e1
AC
1841@item -Wunused-variable
1842Warn whenever a local variable or non-constant static variable is unused
1843aside from its declaration
1844
1845To suppress this warning use the @samp{unused} attribute
74291a4b
MM
1846(@pxref{Variable Attributes}).
1847
078721e1
AC
1848@item -Wunused-value
1849Warn whenever a statement computes a result that is explicitly not used.
1850
1851To suppress this warning cast the expression to @samp{void}.
1852
1853@item -Wunused
1854All all the above @samp{-Wunused} options combined.
1855
1856In order to get a warning about an unused function parameter, you must
b192711e 1857either specify @samp{-W -Wunused} or separately specify
078721e1
AC
1858@samp{-Wunused-parameter}.
1859
74291a4b 1860@item -Wuninitialized
c5c76735
JL
1861Warn if an automatic variable is used without first being initialized or
1862if a variable may be clobbered by a @code{setjmp} call.
74291a4b
MM
1863
1864These warnings are possible only in optimizing compilation,
1865because they require data flow information that is computed only
1866when optimizing. If you don't specify @samp{-O}, you simply won't
1867get these warnings.
1868
1869These warnings occur only for variables that are candidates for
1870register allocation. Therefore, they do not occur for a variable that
1871is declared @code{volatile}, or whose address is taken, or whose size
1872is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
1873structures, unions or arrays, even when they are in registers.
1874
1875Note that there may be no warning about a variable that is used only
1876to compute a value that itself is never used, because such
1877computations may be deleted by data flow analysis before the warnings
1878are printed.
1879
0c2d1a2a 1880These warnings are made optional because GCC is not smart
74291a4b
MM
1881enough to see all the reasons why the code might be correct
1882despite appearing to have an error. Here is one example of how
1883this can happen:
1884
1885@smallexample
1886@{
1887 int x;
1888 switch (y)
1889 @{
1890 case 1: x = 1;
1891 break;
1892 case 2: x = 4;
1893 break;
1894 case 3: x = 5;
1895 @}
1896 foo (x);
1897@}
1898@end smallexample
1899
1900@noindent
1901If the value of @code{y} is always 1, 2 or 3, then @code{x} is
0c2d1a2a 1902always initialized, but GCC doesn't know this. Here is
74291a4b
MM
1903another common case:
1904
1905@smallexample
1906@{
1907 int save_y;
1908 if (change_y) save_y = y, y = new_y;
1909 @dots{}
1910 if (change_y) y = save_y;
1911@}
1912@end smallexample
1913
1914@noindent
1915This has no bug because @code{save_y} is used only if it is set.
1916
20300b05 1917@cindex @code{longjmp} warnings
b192711e 1918This option also warns when a non-volatile automatic variable might be
c5c76735
JL
1919changed by a call to @code{longjmp}. These warnings as well are possible
1920only in optimizing compilation.
20300b05
GK
1921
1922The compiler sees only the calls to @code{setjmp}. It cannot know
1923where @code{longjmp} will be called; in fact, a signal handler could
1924call it at any point in the code. As a result, you may get a warning
1925even when there is in fact no problem because @code{longjmp} cannot
1926in fact be called at the place which would cause a problem.
1927
74291a4b
MM
1928Some spurious warnings can be avoided if you declare all the functions
1929you use that never return as @code{noreturn}. @xref{Function
1930Attributes}.
1931
c5c76735
JL
1932@item -Wreorder (C++ only)
1933@cindex reordering, warning
1934@cindex warning for reordering of member initializers
1935Warn when the order of member initializers given in the code does not
1936match the order in which they must be executed. For instance:
1937
d300e551
NC
1938@item -Wunknown-pragmas
1939@cindex warning for unknown pragmas
1940@cindex unknown pragmas, warning
1941@cindex pragmas, warning of unknown
1942Warn when a #pragma directive is encountered which is not understood by
1943GCC. If this command line option is used, warnings will even be issued
1944for unknown pragmas in system header files. This is not the case if
1945the warnings were only enabled by the @samp{-Wall} command line option.
1946
74291a4b
MM
1947@item -Wall
1948All of the above @samp{-W} options combined. This enables all the
1949warnings about constructions that some users consider questionable, and
1950that are easy to avoid (or modify to prevent the warning), even in
1951conjunction with macros.
317639a8
BC
1952
1953@item -Wsystem-headers
1954@cindex warnings from system headers
1955@cindex system headers, warnings from
1956Print warning messages for constructs found in system header files.
1957Warnings from system headers are normally suppressed, on the assumption
1958that they usually do not indicate real problems and would only make the
1959compiler output harder to read. Using this command line option tells
1960GCC to emit warnings from system headers as if they occurred in user
1961code. However, note that using @samp{-Wall} in conjunction with this
1962option will @emph{not} warn about unknown pragmas in system
1963headers---for that, @samp{-Wunknown-pragmas} must also be used.
74291a4b
MM
1964@end table
1965
1966The following @samp{-W@dots{}} options are not implied by @samp{-Wall}.
1967Some of them warn about constructions that users generally do not
1968consider questionable, but which occasionally you might wish to check
1969for; others warn about constructions that are necessary or hard to avoid
1970in some cases, and there is no simple way to modify the code to suppress
1971the warning.
1972
2642624b 1973@table @gcctabopt
74291a4b
MM
1974@item -W
1975Print extra warning messages for these events:
1976
1977@itemize @bullet
74291a4b
MM
1978@item
1979A function can return either with or without a value. (Falling
1980off the end of the function body is considered returning without
1981a value.) For example, this function would evoke such a
1982warning:
1983
1984@smallexample
1985@group
1986foo (a)
1987@{
1988 if (a > 0)
1989 return a;
1990@}
1991@end group
1992@end smallexample
1993
1994@item
1995An expression-statement or the left-hand side of a comma expression
1996contains no side effects.
1997To suppress the warning, cast the unused expression to void.
1998For example, an expression such as @samp{x[i,j]} will cause a warning,
1999but @samp{x[(void)i,j]} will not.
2000
2001@item
2002An unsigned value is compared against zero with @samp{<} or @samp{<=}.
2003
2004@item
2005A comparison like @samp{x<=y<=z} appears; this is equivalent to
2006@samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
2007that of ordinary mathematical notation.
2008
2009@item
2010Storage-class specifiers like @code{static} are not the first things in
2011a declaration. According to the C Standard, this usage is obsolescent.
2012
e0c9fbb7
JM
2013@item
2014The return type of a function has a type qualifier such as @code{const}.
2015Such a type qualifier has no effect, since the value returned by a
2016function is not an lvalue. (But don't warn about the GNU extension of
2017@code{volatile void} return types. That extension will be warned about
2018if @samp{-pedantic} is specified.)
2019
74291a4b
MM
2020@item
2021If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
2022arguments.
2023
e9a25f70
JL
2024@item
2025A comparison between signed and unsigned values could produce an
2026incorrect result when the signed value is converted to unsigned.
e5e809f4 2027(But don't warn if @samp{-Wno-sign-compare} is also specified.)
e9a25f70 2028
74291a4b
MM
2029@item
2030An aggregate has a partly bracketed initializer.
2031For example, the following code would evoke such a warning,
2032because braces are missing around the initializer for @code{x.h}:
2033
2034@smallexample
2035struct s @{ int f, g; @};
2036struct t @{ struct s h; int i; @};
2037struct t x = @{ 1, 2, 3 @};
2038@end smallexample
dbde0d5d
BH
2039
2040@item
2041An aggregate has an initializer which does not initialize all members.
2042For example, the following code would cause such a warning, because
2043@code{x.h} would be implicitly initialized to zero:
2044
2045@smallexample
2046struct s @{ int f, g, h; @};
2047struct s x = @{ 3, 4 @};
2048@end smallexample
74291a4b
MM
2049@end itemize
2050
f793a95e
JL
2051@item -Wfloat-equal
2052Warn if floating point values are used in equality comparisons.
2053
488d3985
GK
2054The idea behind this is that sometimes it is convenient (for the
2055programmer) to consider floating-point values as approximations to
2056infinitely precise real numbers. If you are doing this, then you need
2057to compute (by analysing the code, or in some other way) the maximum or
2058likely maximum error that the computation introduces, and allow for it
2059when performing comparisons (and when producing output, but that's a
2060different problem). In particular, instead of testing for equality, you
2061would check to see whether the two values have ranges that overlap; and
2062this is done with the relational operators, so equality comparisons are
2063probably mistaken.
2064
fe50c0eb 2065@item -Wtraditional (C only)
74291a4b 2066Warn about certain constructs that behave differently in traditional and
c1030c7c 2067ISO C.
74291a4b
MM
2068
2069@itemize @bullet
2070@item
2071Macro arguments occurring within string constants in the macro body.
2072These would substitute the argument in traditional C, but are part of
c1030c7c 2073the constant in ISO C.
74291a4b
MM
2074
2075@item
2076A function declared external in one block and then used after the end of
2077the block.
2078
2079@item
2080A @code{switch} statement has an operand of type @code{long}.
db838bb8
KG
2081
2082@item
2083A non-@code{static} function declaration follows a @code{static} one.
2084This construct is not accepted by some traditional C compilers.
48776cde
KG
2085
2086@item
c1030c7c 2087The ISO type of an integer constant has a different width or
48776cde
KG
2088signedness from its traditional type. This warning is only issued if
2089the base of the constant is ten. I.e. hexadecimal or octal values, which
2090typically represent bit patterns, are not warned about.
bb66adca
KG
2091
2092@item
c1030c7c 2093Usage of ISO string concatenation is detected.
7f094a94
KG
2094
2095@item
2096A function macro appears without arguments.
895ea614
KG
2097
2098@item
2099The unary plus operator.
2100
2101@item
2102Initialization of automatic aggregates.
2103
2104@item
2105Identifier conflicts with labels. Traditional C lacks a separate
2106namespace for labels.
253b6b82
KG
2107
2108@item
2109Initialization of unions. If the initializer is zero, the warning is
2110omitted. This is done under the assumption that the zero initializer in
2111user code appears conditioned on e.g. @code{__STDC__} to avoid missing
2112initializer warnings and relies on default initialization to zero in the
2113traditional C case.
7da92c08
KG
2114
2115@item
2116The `U' integer constant suffix, or the `F' or `L' floating point
2117constant suffixes. (Traditonal C does support the `L' suffix on integer
2118constants.) Note, these suffixes appear in macros defined in the system
2119headers of most modern systems, e.g. the _MIN/_MAX macros in limits.h.
2120Use of these macros can lead to spurious warnings as they do not
2121necessarily reflect whether the code in question is any less portable to
2122traditional C given that suitable backup definitions are provided.
74291a4b
MM
2123@end itemize
2124
861bb6c1
JL
2125@item -Wundef
2126Warn if an undefined identifier is evaluated in an @samp{#if} directive.
2127
74291a4b
MM
2128@item -Wshadow
2129Warn whenever a local variable shadows another local variable.
2130
2131@item -Wid-clash-@var{len}
2132Warn whenever two distinct identifiers match in the first @var{len}
2133characters. This may help you prepare a program that will compile
2134with certain obsolete, brain-damaged compilers.
2135
2136@item -Wlarger-than-@var{len}
2137Warn whenever an object of larger than @var{len} bytes is defined.
2138
2139@item -Wpointer-arith
2140Warn about anything that depends on the ``size of'' a function type or
2141of @code{void}. GNU C assigns these types a size of 1, for
2142convenience in calculations with @code{void *} pointers and pointers
2143to functions.
2144
fe50c0eb 2145@item -Wbad-function-cast (C only)
74291a4b
MM
2146Warn whenever a function call is cast to a non-matching type.
2147For example, warn if @code{int malloc()} is cast to @code{anything *}.
2148
2149@item -Wcast-qual
2150Warn whenever a pointer is cast so as to remove a type qualifier from
2151the target type. For example, warn if a @code{const char *} is cast
2152to an ordinary @code{char *}.
2153
2154@item -Wcast-align
2155Warn whenever a pointer is cast such that the required alignment of the
2156target is increased. For example, warn if a @code{char *} is cast to
2157an @code{int *} on machines where integers can only be accessed at
2158two- or four-byte boundaries.
2159
2160@item -Wwrite-strings
2161Give string constants the type @code{const char[@var{length}]} so that
2162copying the address of one into a non-@code{const} @code{char *}
2163pointer will get a warning. These warnings will help you find at
2164compile time code that can try to write into a string constant, but
2165only if you have been very careful about using @code{const} in
2166declarations and prototypes. Otherwise, it will just be a nuisance;
2167this is why we did not make @samp{-Wall} request these warnings.
2168
2169@item -Wconversion
2170Warn if a prototype causes a type conversion that is different from what
2171would happen to the same argument in the absence of a prototype. This
2172includes conversions of fixed point to floating and vice versa, and
2173conversions changing the width or signedness of a fixed point argument
2174except when the same as the default promotion.
2175
2176Also, warn if a negative integer constant expression is implicitly
2177converted to an unsigned type. For example, warn about the assignment
2178@code{x = -1} if @code{x} is unsigned. But do not warn about explicit
2179casts like @code{(unsigned) -1}.
2180
e9a25f70
JL
2181@item -Wsign-compare
2182@cindex warning for comparison of signed and unsigned values
2183@cindex comparison of signed and unsigned values, warning
2184@cindex signed and unsigned values, comparison warning
2185Warn when a comparison between signed and unsigned values could produce
2186an incorrect result when the signed value is converted to unsigned.
2187This warning is also enabled by @samp{-W}; to get the other warnings
2188of @samp{-W} without this warning, use @samp{-W -Wno-sign-compare}.
2189
74291a4b
MM
2190@item -Waggregate-return
2191Warn if any functions that return structures or unions are defined or
2192called. (In languages where you can return an array, this also elicits
2193a warning.)
2194
fe50c0eb 2195@item -Wstrict-prototypes (C only)
74291a4b
MM
2196Warn if a function is declared or defined without specifying the
2197argument types. (An old-style function definition is permitted without
2198a warning if preceded by a declaration which specifies the argument
2199types.)
2200
fe50c0eb 2201@item -Wmissing-prototypes (C only)
74291a4b
MM
2202Warn if a global function is defined without a previous prototype
2203declaration. This warning is issued even if the definition itself
2204provides a prototype. The aim is to detect global functions that fail
2205to be declared in header files.
2206
2207@item -Wmissing-declarations
2208Warn if a global function is defined without a previous declaration.
2209Do so even if the definition itself provides a prototype.
2210Use this option to detect global functions that are not declared in
2211header files.
2212
0ca3fb0a
KG
2213@item -Wmissing-noreturn
2214Warn about functions which might be candidates for attribute @code{noreturn}.
2215Note these are only possible candidates, not absolute ones. Care should
2216be taken to manually verify functions actually do not ever return before
2217adding the @code{noreturn} attribute, otherwise subtle code generation
21c7361e
AJ
2218bugs could be introduced. You will not get a warning for @code{main} in
2219hosted C environments.
0ca3fb0a 2220
74ff4629
JM
2221@item -Wmissing-format-attribute
2222If @samp{-Wformat} is enabled, also warn about functions which might be
2223candidates for @code{format} attributes. Note these are only possible
2224candidates, not absolute ones. GCC will guess that @code{format}
2225attributes might be appropriate for any function that calls a function
2226like @code{vprintf} or @code{vscanf}, but this might not always be the
2227case, and some functions for which @code{format} attributes are
2228appropriate may not be detected. This option has no effect unless
2229@samp{-Wformat} is enabled (possibly by @samp{-Wall}).
2230
3c12fcc2
GM
2231@item -Wpacked
2232Warn if a structure is given the packed attribute, but the packed
2233attribute has no effect on the layout or size of the structure.
2234Such structures may be mis-aligned for little benefit. For
2235instance, in this code, the variable @code{f.x} in @code{struct bar}
2236will be misaligned even though @code{struct bar} does not itself
2237have the packed attribute:
2238
2239@smallexample
2240@group
2241struct foo @{
2242 int x;
2243 char a, b, c, d;
2244@} __attribute__((packed));
2245struct bar @{
2246 char z;
2247 struct foo f;
2248@};
2249@end group
2250@end smallexample
2251
2252@item -Wpadded
2253Warn if padding is included in a structure, either to align an element
2254of the structure or to align the whole structure. Sometimes when this
2255happens it is possible to rearrange the fields of the structure to
2256reduce the padding and so make the structure smaller.
2257
74291a4b
MM
2258@item -Wredundant-decls
2259Warn if anything is declared more than once in the same scope, even in
2260cases where multiple declaration is valid and changes nothing.
2261
fe50c0eb 2262@item -Wnested-externs (C only)
252215a7 2263Warn if an @code{extern} declaration is encountered within a function.
74291a4b 2264
312f6255
GK
2265@item -Wunreachable-code
2266Warn if the compiler detects that code will never be executed.
2267
2268This option is intended to warn when the compiler detects that at
2269least a whole line of source code will never be executed, because
2270some condition is never satisfied or because it is after a
2271procedure that never returns.
2272
2273It is possible for this option to produce a warning even though there
2274are circumstances under which part of the affected line can be executed,
2275so care should be taken when removing apparently-unreachable code.
2276
2277For instance, when a function is inlined, a warning may mean that the
2278line is unreachable in only one inlined copy of the function.
2279
2280This option is not made part of @samp{-Wall} because in a debugging
2281version of a program there is often substantial code which checks
2282correct functioning of the program and is, hopefully, unreachable
2283because the program does work. Another common use of unreachable
2284code is to provide behaviour which is selectable at compile-time.
2285
74291a4b 2286@item -Winline
c5c76735 2287Warn if a function can not be inlined and it was declared as inline.
74291a4b 2288
795add94
VM
2289@item -Wlong-long
2290Warn if @samp{long long} type is used. This is default. To inhibit
2291the warning messages, use @samp{-Wno-long-long}. Flags
2292@samp{-Wlong-long} and @samp{-Wno-long-long} are taken into account
2293only when @samp{-pedantic} flag is used.
2294
18424ae1
BL
2295@item -Wdisabled-optimization
2296Warn if a requested optimization pass is disabled. This warning does
2297not generally indicate that there is anything wrong with your code; it
2298merely indicates that GCC's optimizers were unable to handle the code
2299effectively. Often, the problem is that your code is too big or too
2300complex; GCC will refuse to optimize programs when the optimization
2301itself is likely to take inordinate amounts of time.
2302
74291a4b
MM
2303@item -Werror
2304Make all warnings into errors.
2305@end table
2306
2307@node Debugging Options
0c2d1a2a 2308@section Options for Debugging Your Program or GCC
74291a4b
MM
2309@cindex options, debugging
2310@cindex debugging information options
2311
0c2d1a2a 2312GCC has various special options that are used for debugging
74291a4b
MM
2313either your program or GCC:
2314
2642624b 2315@table @gcctabopt
74291a4b
MM
2316@item -g
2317Produce debugging information in the operating system's native format
2318(stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
2319information.
2320
2321On most systems that use stabs format, @samp{-g} enables use of extra
2322debugging information that only GDB can use; this extra information
2323makes debugging work better in GDB but will probably make other debuggers
2324crash or
2325refuse to read the program. If you want to control for certain whether
2326to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
861bb6c1 2327@samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf-1+}, or @samp{-gdwarf-1}
74291a4b
MM
2328(see below).
2329
0c2d1a2a 2330Unlike most other C compilers, GCC allows you to use @samp{-g} with
74291a4b
MM
2331@samp{-O}. The shortcuts taken by optimized code may occasionally
2332produce surprising results: some variables you declared may not exist
2333at all; flow of control may briefly move where you did not expect it;
2334some statements may not be executed because they compute constant
2335results or their values were already at hand; some statements may
2336execute in different places because they were moved out of loops.
2337
2338Nevertheless it proves possible to debug optimized output. This makes
2339it reasonable to use the optimizer for programs that might have bugs.
2340
0c2d1a2a 2341The following options are useful when GCC is generated with the
74291a4b
MM
2342capability for more than one debugging format.
2343
2344@item -ggdb
861bb6c1
JL
2345Produce debugging information for use by GDB. This means to use the
2346most expressive format available (DWARF 2, stabs, or the native format
2347if neither of those are supported), including GDB extensions if at all
2348possible.
74291a4b
MM
2349
2350@item -gstabs
2351Produce debugging information in stabs format (if that is supported),
2352without GDB extensions. This is the format used by DBX on most BSD
2353systems. On MIPS, Alpha and System V Release 4 systems this option
2354produces stabs debugging output which is not understood by DBX or SDB.
2355On System V Release 4 systems this option requires the GNU assembler.
2356
2357@item -gstabs+
2358Produce debugging information in stabs format (if that is supported),
2359using GNU extensions understood only by the GNU debugger (GDB). The
2360use of these extensions is likely to make other debuggers crash or
2361refuse to read the program.
2362
2363@item -gcoff
2364Produce debugging information in COFF format (if that is supported).
2365This is the format used by SDB on most System V systems prior to
2366System V Release 4.
2367
2368@item -gxcoff
2369Produce debugging information in XCOFF format (if that is supported).
2370This is the format used by the DBX debugger on IBM RS/6000 systems.
2371
2372@item -gxcoff+
2373Produce debugging information in XCOFF format (if that is supported),
2374using GNU extensions understood only by the GNU debugger (GDB). The
2375use of these extensions is likely to make other debuggers crash or
2376refuse to read the program, and may cause assemblers other than the GNU
2377assembler (GAS) to fail with an error.
2378
2379@item -gdwarf
861bb6c1
JL
2380Produce debugging information in DWARF version 1 format (if that is
2381supported). This is the format used by SDB on most System V Release 4
2382systems.
74291a4b
MM
2383
2384@item -gdwarf+
861bb6c1
JL
2385Produce debugging information in DWARF version 1 format (if that is
2386supported), using GNU extensions understood only by the GNU debugger
2387(GDB). The use of these extensions is likely to make other debuggers
2388crash or refuse to read the program.
2389
2390@item -gdwarf-2
2391Produce debugging information in DWARF version 2 format (if that is
2392supported). This is the format used by DBX on IRIX 6.
74291a4b
MM
2393
2394@item -g@var{level}
2395@itemx -ggdb@var{level}
2396@itemx -gstabs@var{level}
2397@itemx -gcoff@var{level}
2398@itemx -gxcoff@var{level}
2399@itemx -gdwarf@var{level}
861bb6c1 2400@itemx -gdwarf-2@var{level}
74291a4b
MM
2401Request debugging information and also use @var{level} to specify how
2402much information. The default level is 2.
2403
2404Level 1 produces minimal information, enough for making backtraces in
2405parts of the program that you don't plan to debug. This includes
2406descriptions of functions and external variables, but no information
2407about local variables and no line numbers.
2408
2409Level 3 includes extra information, such as all the macro definitions
2410present in the program. Some debuggers support macro expansion when
2411you use @samp{-g3}.
2412
2413@cindex @code{prof}
2414@item -p
2415Generate extra code to write profile information suitable for the
2416analysis program @code{prof}. You must use this option when compiling
2417the source files you want data about, and you must also use it when
2418linking.
2419
2420@cindex @code{gprof}
2421@item -pg
2422Generate extra code to write profile information suitable for the
2423analysis program @code{gprof}. You must use this option when compiling
2424the source files you want data about, and you must also use it when
2425linking.
2426
2427@cindex @code{tcov}
2428@item -a
2429Generate extra code to write profile information for basic blocks, which will
2430record the number of times each basic block is executed, the basic block start
2431address, and the function name containing the basic block. If @samp{-g} is
2432used, the line number and filename of the start of the basic block will also be
2433recorded. If not overridden by the machine description, the default action is
2434to append to the text file @file{bb.out}.
2435
2436This data could be analyzed by a program like @code{tcov}. Note,
2437however, that the format of the data is not what @code{tcov} expects.
2438Eventually GNU @code{gprof} should be extended to process this data.
2439
898f531b
JL
2440@item -Q
2441Makes the compiler print out each function name as it is compiled, and
2442print some statistics about each pass when it finishes.
2443
74291a4b
MM
2444@item -ax
2445Generate extra code to profile basic blocks. Your executable will
2446produce output that is a superset of that produced when @samp{-a} is
2447used. Additional output is the source and target address of the basic
2448blocks where a jump takes place, the number of times a jump is executed,
2449and (optionally) the complete sequence of basic blocks being executed.
2450The output is appended to file @file{bb.out}.
2451
2452You can examine different profiling aspects without recompilation. Your
956d6950 2453executable will read a list of function names from file @file{bb.in}.
74291a4b
MM
2454Profiling starts when a function on the list is entered and stops when
2455that invocation is exited. To exclude a function from profiling, prefix
2456its name with `-'. If a function name is not unique, you can
2457disambiguate it by writing it in the form
2458@samp{/path/filename.d:functionname}. Your executable will write the
2459available paths and filenames in file @file{bb.out}.
2460
2461Several function names have a special meaning:
2462@table @code
2463@item __bb_jumps__
2464Write source, target and frequency of jumps to file @file{bb.out}.
2465@item __bb_hidecall__
2466Exclude function calls from frequency count.
2467@item __bb_showret__
2468Include function returns in frequency count.
2469@item __bb_trace__
2470Write the sequence of basic blocks executed to file @file{bbtrace.gz}.
2471The file will be compressed using the program @samp{gzip}, which must
bedc7537 2472exist in your @env{PATH}. On systems without the @samp{popen}
74291a4b
MM
2473function, the file will be named @file{bbtrace} and will not be
2474compressed. @strong{Profiling for even a few seconds on these systems
2475will produce a very large file.} Note: @code{__bb_hidecall__} and
2476@code{__bb_showret__} will not affect the sequence written to
2477@file{bbtrace.gz}.
2478@end table
2479
2480Here's a short example using different profiling parameters
2481in file @file{bb.in}. Assume function @code{foo} consists of basic blocks
24821 and 2 and is called twice from block 3 of function @code{main}. After
2483the calls, block 3 transfers control to block 4 of @code{main}.
2484
2485With @code{__bb_trace__} and @code{main} contained in file @file{bb.in},
2486the following sequence of blocks is written to file @file{bbtrace.gz}:
24870 3 1 2 1 2 4. The return from block 2 to block 3 is not shown, because
2488the return is to a point inside the block and not to the top. The
2489block address 0 always indicates, that control is transferred
2490to the trace from somewhere outside the observed functions. With
2491@samp{-foo} added to @file{bb.in}, the blocks of function
2492@code{foo} are removed from the trace, so only 0 3 4 remains.
2493
2494With @code{__bb_jumps__} and @code{main} contained in file @file{bb.in},
2495jump frequencies will be written to file @file{bb.out}. The
2496frequencies are obtained by constructing a trace of blocks
2497and incrementing a counter for every neighbouring pair of blocks
2498in the trace. The trace 0 3 1 2 1 2 4 displays the following
2499frequencies:
2500
2501@example
2502Jump from block 0x0 to block 0x3 executed 1 time(s)
2503Jump from block 0x3 to block 0x1 executed 1 time(s)
2504Jump from block 0x1 to block 0x2 executed 2 time(s)
2505Jump from block 0x2 to block 0x1 executed 1 time(s)
2506Jump from block 0x2 to block 0x4 executed 1 time(s)
2507@end example
2508
2509With @code{__bb_hidecall__}, control transfer due to call instructions
2510is removed from the trace, that is the trace is cut into three parts: 0
25113 4, 0 1 2 and 0 1 2. With @code{__bb_showret__}, control transfer due
2512to return instructions is added to the trace. The trace becomes: 0 3 1
25132 3 1 2 3 4. Note, that this trace is not the same, as the sequence
2514written to @file{bbtrace.gz}. It is solely used for counting jump
2515frequencies.
2516
861bb6c1
JL
2517@item -fprofile-arcs
2518Instrument @dfn{arcs} during compilation. For each function of your
0c2d1a2a 2519program, GCC creates a program flow graph, then finds a spanning tree
861bb6c1
JL
2520for the graph. Only arcs that are not on the spanning tree have to be
2521instrumented: the compiler adds code to count the number of times that these
2522arcs are executed. When an arc is the only exit or only entrance to a
2523block, the instrumentation code can be added to the block; otherwise, a
2524new basic block must be created to hold the instrumentation code.
2525
2526Since not every arc in the program must be instrumented, programs
2527compiled with this option run faster than programs compiled with
2528@samp{-a}, which adds instrumentation code to every basic block in the
2529program. The tradeoff: since @code{gcov} does not have
2530execution counts for all branches, it must start with the execution
2531counts for the instrumented branches, and then iterate over the program
2532flow graph until the entire graph has been solved. Hence, @code{gcov}
2533runs a little more slowly than a program which uses information from
2534@samp{-a}.
2535
2536@samp{-fprofile-arcs} also makes it possible to estimate branch
2537probabilities, and to calculate basic block execution counts. In
2538general, basic block execution counts do not give enough information to
2539estimate all branch probabilities. When the compiled program exits, it
2540saves the arc execution counts to a file called
2541@file{@var{sourcename}.da}. Use the compiler option
2542@samp{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
2543Control Optimization}) when recompiling, to optimize using estimated
2544branch probabilities.
2545
2546@need 2000
2547@item -ftest-coverage
2548Create data files for the @code{gcov} code-coverage utility
0c2d1a2a 2549(@pxref{Gcov,, @code{gcov}: a GCC Test Coverage Program}).
861bb6c1
JL
2550The data file names begin with the name of your source file:
2551
2642624b 2552@table @gcctabopt
861bb6c1
JL
2553@item @var{sourcename}.bb
2554A mapping from basic blocks to line numbers, which @code{gcov} uses to
2555associate basic block execution counts with line numbers.
2556
2557@item @var{sourcename}.bbg
2558A list of all arcs in the program flow graph. This allows @code{gcov}
2559to reconstruct the program flow graph, so that it can compute all basic
2560block and arc execution counts from the information in the
2561@code{@var{sourcename}.da} file (this last file is the output from
2562@samp{-fprofile-arcs}).
2563@end table
2564
74291a4b
MM
2565@item -d@var{letters}
2566Says to make debugging dumps during compilation at times specified by
2567@var{letters}. This is used for debugging the compiler. The file names
375e2d5c 2568for most of the dumps are made by appending a pass number and a word to
923c2d86 2569the source file name (e.g. @file{foo.c.00.rtl} or @file{foo.c.01.sibling}).
375e2d5c 2570Here are the possible letters for use in @var{letters}, and their meanings:
74291a4b
MM
2571
2572@table @samp
375e2d5c
RH
2573@item A
2574Annotate the assembler output with miscellaneous debugging information.
956d6950 2575@item b
923c2d86 2576Dump after computing branch probabilities, to @file{@var{file}.11.bp}.
48d9ade5 2577@item B
8bb16620 2578Dump after block reordering, to @file{@var{file}.26.bbro}.
032713aa 2579@item c
470fc13d
KH
2580Dump after instruction combination, to the file @file{@var{file}.14.combine}.
2581@item C
2582Dump after the first if conversion, to the file @file{@var{file}.15.ce}.
032713aa 2583@item d
8bb16620 2584Dump after delayed branch scheduling, to @file{@var{file}.29.dbr}.
032713aa 2585@item D
f5963e61
JL
2586Dump all macro definitions, at the end of preprocessing, in addition to
2587normal output.
48d9ade5
RK
2588@item e
2589Dump after SSA optimizations, to @file{@var{file}.05.ssa} and
2590@file{@var{file}.06.ussa}.
470fc13d 2591@item E
8bb16620 2592Dump after the second if conversion, to @file{@var{file}.24.ce2}.
74291a4b 2593@item f
470fc13d 2594Dump after life analysis, to @file{@var{file}.13.life}.
48d9ade5
RK
2595@item F
2596Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.04.addressof}.
74291a4b 2597@item g
470fc13d 2598Dump after global register allocation, to @file{@var{file}.19.greg}.
8bb16620
BS
2599@item o
2600Dump after post-reload CSE and other optimizations, to @file{@var{file}.20.postreload}.
7506f491 2601@item G
470fc13d 2602Dump after GCSE, to @file{@var{file}.08.gcse}.
48d9ade5
RK
2603@item i
2604Dump after sibling call optimizations, to @file{@var{file}.01.sibling}.
032713aa 2605@item j
470fc13d 2606Dump after the first jump optimization, to @file{@var{file}.02.jump}.
74291a4b 2607@item J
8bb16620 2608Dump after the last jump optimization, to @file{@var{file}.27.jump2}.
74291a4b 2609@item k
470fc13d 2610Dump after conversion from registers to stack, to @file{@var{file}.29.stack}.
032713aa 2611@item l
470fc13d 2612Dump after local register allocation, to @file{@var{file}.18.lreg}.
032713aa 2613@item L
470fc13d 2614Dump after loop optimization, to @file{@var{file}.09.loop}.
032713aa
NC
2615@item M
2616Dump after performing the machine dependent reorganisation pass, to
8bb16620 2617@file{@var{file}.28.mach}.
48d9ade5 2618@item n
470fc13d 2619Dump after register renumbering, to @file{@var{file}.23.rnreg}.
032713aa 2620@item N
470fc13d 2621Dump after the register move pass, to @file{@var{file}.16.regmove}.
032713aa 2622@item r
375e2d5c 2623Dump after RTL generation, to @file{@var{file}.00.rtl}.
032713aa 2624@item R
375e2d5c 2625Dump after the second instruction scheduling pass, to
8bb16620 2626@file{@var{file}.25.sched2}.
032713aa
NC
2627@item s
2628Dump after CSE (including the jump optimization that sometimes follows
48d9ade5 2629CSE), to @file{@var{file}.03.cse}.
032713aa 2630@item S
375e2d5c 2631Dump after the first instruction scheduling pass, to
470fc13d 2632@file{@var{file}.17.sched}.
032713aa
NC
2633@item t
2634Dump after the second CSE pass (including the jump optimization that
470fc13d 2635sometimes follows CSE), to @file{@var{file}.10.cse2}.
48d9ade5 2636@item w
8bb16620 2637Dump after the second flow pass, to @file{@var{file}.21.flow2}.
470fc13d
KH
2638@item X
2639Dump after dead code elimination, to @file{@var{file}.06.dce}.
48d9ade5 2640@item z
470fc13d 2641Dump after the peephole pass, to @file{@var{file}.22.peephole2}.
74291a4b
MM
2642@item a
2643Produce all the dumps listed above.
2644@item m
2645Print statistics on memory usage, at the end of the run, to
2646standard error.
2647@item p
2648Annotate the assembler output with a comment indicating which
f20b5577
MM
2649pattern and alternative was used. The length of each instruction is
2650also printed.
2856c3e3
SC
2651@item P
2652Dump the RTL in the assembler output as a comment before each instruction.
2653Also turns on @samp{-dp} annotation.
375e2d5c
RH
2654@item v
2655For each of the other indicated dump files (except for
2656@file{@var{file}.00.rtl}), dump a representation of the control flow graph
b192711e 2657suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
62a1403d
AS
2658@item x
2659Just generate RTL for a function instead of compiling it. Usually used
2660with @samp{r}.
032713aa
NC
2661@item y
2662Dump debugging information during parsing, to standard error.
74291a4b
MM
2663@end table
2664
b707b450
R
2665@item -fdump-unnumbered
2666When doing debugging dumps (see -d option above), suppress instruction
2667numbers and line number note output. This makes it more feasible to
b192711e 2668use diff on debugging dumps for compiler invocations with different
b707b450
R
2669options, in particular with and without -g.
2670
f2ecb02d 2671@item -fdump-translation-unit-@var{file} (C and C++ only)
f71f87f9
MM
2672Dump a representation of the tree structure for the entire translation
2673unit to @var{file}.
2674
74291a4b
MM
2675@item -fpretend-float
2676When running a cross-compiler, pretend that the target machine uses the
2677same floating point format as the host machine. This causes incorrect
2678output of the actual floating constants, but the actual instruction
0c2d1a2a 2679sequence will probably be the same as GCC would make when running on
74291a4b
MM
2680the target machine.
2681
2682@item -save-temps
2683Store the usual ``temporary'' intermediate files permanently; place them
2684in the current directory and name them based on the source file. Thus,
2685compiling @file{foo.c} with @samp{-c -save-temps} would produce files
f2ecb02d
JM
2686@file{foo.i} and @file{foo.s}, as well as @file{foo.o}. This creates a
2687preprocessed @file{foo.i} output file even though the compiler now
2688normally uses an integrated preprocessor.
74291a4b 2689
03c41c05
ZW
2690@item -time
2691Report the CPU time taken by each subprocess in the compilation
f2ecb02d
JM
2692sequence. For C source files, this is the compiler proper and assembler
2693(plus the linker if linking is done). The output looks like this:
03c41c05
ZW
2694
2695@smallexample
03c41c05
ZW
2696# cc1 0.12 0.01
2697# as 0.00 0.01
2698@end smallexample
2699
2700The first number on each line is the ``user time,'' that is time spent
2701executing the program itself. The second number is ``system time,''
2702time spent executing operating system routines on behalf of the program.
2703Both numbers are in seconds.
2704
74291a4b
MM
2705@item -print-file-name=@var{library}
2706Print the full absolute name of the library file @var{library} that
2707would be used when linking---and don't do anything else. With this
0c2d1a2a 2708option, GCC does not compile or link anything; it just prints the
74291a4b
MM
2709file name.
2710
2711@item -print-prog-name=@var{program}
2712Like @samp{-print-file-name}, but searches for a program such as @samp{cpp}.
2713
2714@item -print-libgcc-file-name
2715Same as @samp{-print-file-name=libgcc.a}.
2716
2717This is useful when you use @samp{-nostdlib} or @samp{-nodefaultlibs}
2718but you do want to link with @file{libgcc.a}. You can do
2719
2720@example
2721gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
2722@end example
2723
2724@item -print-search-dirs
2725Print the name of the configured installation directory and a list of
2726program and library directories gcc will search---and don't do anything else.
2727
2728This is useful when gcc prints the error message
3c0b7970
JM
2729@samp{installation problem, cannot exec cpp0: No such file or directory}.
2730To resolve this you either need to put @file{cpp0} and the other compiler
74291a4b 2731components where gcc expects to find them, or you can set the environment
bedc7537 2732variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
74291a4b
MM
2733Don't forget the trailing '/'.
2734@xref{Environment Variables}.
2735@end table
2736
2737@node Optimize Options
2738@section Options That Control Optimization
2739@cindex optimize options
2740@cindex options, optimization
2741
2742These options control various sorts of optimizations:
2743
2642624b 2744@table @gcctabopt
74291a4b
MM
2745@item -O
2746@itemx -O1
2747Optimize. Optimizing compilation takes somewhat more time, and a lot
2748more memory for a large function.
2749
2750Without @samp{-O}, the compiler's goal is to reduce the cost of
2751compilation and to make debugging produce the expected results.
2752Statements are independent: if you stop the program with a breakpoint
2753between statements, you can then assign a new value to any variable or
2754change the program counter to any other statement in the function and
2755get exactly the results you would expect from the source code.
2756
2757Without @samp{-O}, the compiler only allocates variables declared
2758@code{register} in registers. The resulting compiled code is a little
2759worse than produced by PCC without @samp{-O}.
2760
2761With @samp{-O}, the compiler tries to reduce code size and execution
2762time.
2763
2764When you specify @samp{-O}, the compiler turns on @samp{-fthread-jumps}
2765and @samp{-fdefer-pop} on all machines. The compiler turns on
2766@samp{-fdelayed-branch} on machines that have delay slots, and
2767@samp{-fomit-frame-pointer} on machines that can support debugging even
2768without a frame pointer. On some machines the compiler also turns
2769on other flags.@refill
2770
2771@item -O2
0c2d1a2a 2772Optimize even more. GCC performs nearly all supported optimizations
74291a4b
MM
2773that do not involve a space-speed tradeoff. The compiler does not
2774perform loop unrolling or function inlining when you specify @samp{-O2}.
2775As compared to @samp{-O}, this option increases both compilation time
2776and the performance of the generated code.
2777
2b2a8f1f
RH
2778@samp{-O2} turns on all optional optimizations except for loop unrolling,
2779function inlining, and register renaming. It also turns on the
2780@samp{-fforce-mem} option on all machines and frame pointer elimination
2781on machines where doing so does not interfere with debugging.
74291a4b
MM
2782
2783@item -O3
2784Optimize yet more. @samp{-O3} turns on all optimizations specified by
2b2a8f1f
RH
2785@samp{-O2} and also turns on the @samp{-finline-functions} and
2786@samp{-frename-registers} options.
74291a4b
MM
2787
2788@item -O0
2789Do not optimize.
2790
c6aded7c
AG
2791@item -Os
2792Optimize for size. @samp{-Os} enables all @samp{-O2} optimizations that
2793do not typically increase code size. It also performs further
2794optimizations designed to reduce code size.
2795
74291a4b
MM
2796If you use multiple @samp{-O} options, with or without level numbers,
2797the last such option is the one that is effective.
2798@end table
2799
2800Options of the form @samp{-f@var{flag}} specify machine-independent
2801flags. Most flags have both positive and negative forms; the negative
2802form of @samp{-ffoo} would be @samp{-fno-foo}. In the table below,
2803only one of the forms is listed---the one which is not the default.
2804You can figure out the other form by either removing @samp{no-} or
2805adding it.
2806
2642624b 2807@table @gcctabopt
74291a4b
MM
2808@item -ffloat-store
2809Do not store floating point variables in registers, and inhibit other
2810options that might change whether a floating point value is taken from a
2811register or memory.
2812
2813@cindex floating point precision
2814This option prevents undesirable excess precision on machines such as
2815the 68000 where the floating registers (of the 68881) keep more
2816precision than a @code{double} is supposed to have. Similarly for the
2817x86 architecture. For most programs, the excess precision does only
2818good, but a few programs rely on the precise definition of IEEE floating
6fd74494
CB
2819point. Use @samp{-ffloat-store} for such programs, after modifying
2820them to store all pertinent intermediate computations into variables.
74291a4b
MM
2821
2822@item -fno-default-inline
2823Do not make member functions inline by default merely because they are
2824defined inside the class scope (C++ only). Otherwise, when you specify
2825@w{@samp{-O}}, member functions defined inside class scope are compiled
2826inline by default; i.e., you don't need to add @samp{inline} in front of
2827the member function name.
2828
2829@item -fno-defer-pop
2830Always pop the arguments to each function call as soon as that function
2831returns. For machines which must pop arguments after a function call,
2832the compiler normally lets arguments accumulate on the stack for several
2833function calls and pops them all at once.
2834
2835@item -fforce-mem
2836Force memory operands to be copied into registers before doing
2837arithmetic on them. This produces better code by making all memory
2838references potential common subexpressions. When they are not common
2839subexpressions, instruction combination should eliminate the separate
2840register-load. The @samp{-O2} option turns on this option.
2841
2842@item -fforce-addr
2843Force memory address constants to be copied into registers before
2844doing arithmetic on them. This may produce better code just as
2845@samp{-fforce-mem} may.
2846
2847@item -fomit-frame-pointer
2848Don't keep the frame pointer in a register for functions that
2849don't need one. This avoids the instructions to save, set up and
2850restore frame pointers; it also makes an extra register available
2851in many functions. @strong{It also makes debugging impossible on
2852some machines.}
2853
2854@ifset INTERNALS
2855On some machines, such as the Vax, this flag has no effect, because
2856the standard calling sequence automatically handles the frame pointer
2857and nothing is saved by pretending it doesn't exist. The
2858machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2859whether a target machine supports this flag. @xref{Registers}.@refill
2860@end ifset
2861@ifclear INTERNALS
2862On some machines, such as the Vax, this flag has no effect, because
2863the standard calling sequence automatically handles the frame pointer
2864and nothing is saved by pretending it doesn't exist. The
2865machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2866whether a target machine supports this flag. @xref{Registers,,Register
2867Usage, gcc.info, Using and Porting GCC}.@refill
2868@end ifclear
2869
1aaef9c1
JH
2870@item -foptimize-sibling-calls
2871Optimize sibling and tail recursive calls.
2872
91ce572a
CC
2873@item -ftrapv
2874This option generates traps for signed overflow on addition, subtraction,
2875multiplication operations.
2876
74291a4b
MM
2877@item -fno-inline
2878Don't pay attention to the @code{inline} keyword. Normally this option
2879is used to keep the compiler from expanding any functions inline.
2880Note that if you are not optimizing, no functions can be expanded inline.
2881
2882@item -finline-functions
2883Integrate all simple functions into their callers. The compiler
2884heuristically decides which functions are simple enough to be worth
2885integrating in this way.
2886
2887If all calls to a given function are integrated, and the function is
2888declared @code{static}, then the function is normally not output as
2889assembler code in its own right.
2890
efa3896a 2891@item -finline-limit=@var{n}
f9e814f1
TP
2892By default, gcc limits the size of functions that can be inlined. This flag
2893allows the control of this limit for functions that are explicitly marked as
2894inline (ie marked with the inline keyword or defined within the class
2895definition in c++). @var{n} is the size of functions that can be inlined in
2896number of pseudo instructions (not counting parameter handling). The default
2897value of n is 10000. Increasing this value can result in more inlined code at
2898the cost of compilation time and memory consumption. Decreasing usually makes
2899the compilation faster and less code will be inlined (which presumably
2900means slower programs). This option is particularly useful for programs that
2901use inlining heavily such as those based on recursive templates with c++.
2902
2903@emph{Note:} pseudo instruction represents, in this particular context, an
2904abstract measurement of function's size. In no way, it represents a count
2905of assembly instructions and as such its exact meaning might change from one
2906release to an another.
2907
74291a4b
MM
2908@item -fkeep-inline-functions
2909Even if all calls to a given function are integrated, and the function
2910is declared @code{static}, nevertheless output a separate run-time
2911callable version of the function. This switch does not affect
2912@code{extern inline} functions.
2913
2914@item -fkeep-static-consts
2915Emit variables declared @code{static const} when optimization isn't turned
2916on, even if the variables aren't referenced.
2917
0c2d1a2a 2918GCC enables this option by default. If you want to force the compiler to
74291a4b
MM
2919check if the variable was referenced, regardless of whether or not
2920optimization is turned on, use the @samp{-fno-keep-static-consts} option.
2921
2922@item -fno-function-cse
2923Do not put function addresses in registers; make each instruction that
2924calls a constant function contain the function's address explicitly.
2925
2926This option results in less efficient code, but some strange hacks
2927that alter the assembler output may be confused by the optimizations
2928performed when this option is not used.
2929
2930@item -ffast-math
c1030c7c 2931This option allows GCC to violate some ISO or IEEE rules and/or
74291a4b
MM
2932specifications in the interest of optimizing code for speed. For
2933example, it allows the compiler to assume arguments to the @code{sqrt}
2934function are non-negative numbers and that no floating-point values
2935are NaNs.
2936
2937This option should never be turned on by any @samp{-O} option since
2938it can result in incorrect output for programs which depend on
c1030c7c 2939an exact implementation of IEEE or ISO rules/specifications for
74291a4b 2940math functions.
9605da8a
BL
2941
2942@item -fno-math-errno
2943Do not set ERRNO after calling math functions that are executed
2944with a single instruction, e.g., sqrt. A program that relies on
2945IEEE exceptions for math error handling may want to use this flag
2946for speed while maintaining IEEE arithmetic compatibility.
2947
2948The default is @samp{-fmath-errno}. The @samp{-ffast-math} option
2949sets @samp{-fno-math-errno}.
74291a4b
MM
2950@end table
2951
2952@c following causes underfulls.. they don't look great, but we deal.
2953@c --mew 26jan93
2954The following options control specific optimizations. The @samp{-O2}
2955option turns on all of these optimizations except @samp{-funroll-loops}
2956and @samp{-funroll-all-loops}. On most machines, the @samp{-O} option
2957turns on the @samp{-fthread-jumps} and @samp{-fdelayed-branch} options,
2958but specific machines may handle it differently.
2959
2960You can use the following flags in the rare cases when ``fine-tuning''
2961of optimizations to be performed is desired.
2962
2642624b 2963@table @gcctabopt
74291a4b
MM
2964@item -fstrength-reduce
2965Perform the optimizations of loop strength reduction and
2966elimination of iteration variables.
2967
2968@item -fthread-jumps
2969Perform optimizations where we check to see if a jump branches to a
2970location where another comparison subsumed by the first is found. If
2971so, the first branch is redirected to either the destination of the
2972second branch or a point immediately following it, depending on whether
2973the condition is known to be true or false.
2974
2975@item -fcse-follow-jumps
2976In common subexpression elimination, scan through jump instructions
2977when the target of the jump is not reached by any other path. For
2978example, when CSE encounters an @code{if} statement with an
2979@code{else} clause, CSE will follow the jump when the condition
2980tested is false.
2981
2982@item -fcse-skip-blocks
2983This is similar to @samp{-fcse-follow-jumps}, but causes CSE to
2984follow jumps which conditionally skip over blocks. When CSE
2985encounters a simple @code{if} statement with no else clause,
2986@samp{-fcse-skip-blocks} causes CSE to follow the jump around the
2987body of the @code{if}.
2988
2989@item -frerun-cse-after-loop
2990Re-run common subexpression elimination after loop optimizations has been
2991performed.
2992
6d6d0fa0
JL
2993@item -frerun-loop-opt
2994Run the loop optimizer twice.
2995
7506f491
DE
2996@item -fgcse
2997Perform a global common subexpression elimination pass.
2998This pass also performs global constant and copy propagation.
2999
b6d24183
JL
3000@item -fdelete-null-pointer-checks
3001Use global dataflow analysis to identify and eliminate useless null
3002pointer checks. Programs which rely on NULL pointer dereferences @emph{not}
3003halting the program may not work properly with this option. Use
3004-fno-delete-null-pointer-checks to disable this optimizing for programs
3005which depend on that behavior.
3006
74291a4b
MM
3007@item -fexpensive-optimizations
3008Perform a number of minor optimizations that are relatively expensive.
3009
639726ba 3010@item -foptimize-register-move
59d40964 3011@itemx -fregmove
9ec36da5
JL
3012Attempt to reassign register numbers in move instructions and as
3013operands of other simple instructions in order to maximize the amount of
56159047 3014register tying. This is especially helpful on machines with two-operand
0c2d1a2a 3015instructions. GCC enables this optimization by default with @samp{-O2}
9ec36da5
JL
3016or higher.
3017
bedc7537 3018Note @option{-fregmove} and @option{-foptimize-register-move} are the same
9ec36da5
JL
3019optimization.
3020
74291a4b
MM
3021@item -fdelayed-branch
3022If supported for the target machine, attempt to reorder instructions
3023to exploit instruction slots available after delayed branch
3024instructions.
3025
3026@item -fschedule-insns
3027If supported for the target machine, attempt to reorder instructions to
3028eliminate execution stalls due to required data being unavailable. This
3029helps machines that have slow floating point or memory load instructions
3030by allowing other instructions to be issued until the result of the load
3031or floating point instruction is required.
3032
3033@item -fschedule-insns2
3034Similar to @samp{-fschedule-insns}, but requests an additional pass of
3035instruction scheduling after register allocation has been done. This is
3036especially useful on machines with a relatively small number of
3037registers and where memory load instructions take more than one cycle.
3038
3039@item -ffunction-sections
59d40964 3040@itemx -fdata-sections
7d0756fb
CM
3041Place each function or data item into its own section in the output
3042file if the target supports arbitrary sections. The name of the
3043function or the name of the data item determines the section's name
3044in the output file.
74291a4b 3045
7d0756fb 3046Use these options on systems where the linker can perform optimizations
74291a4b
MM
3047to improve locality of reference in the instruction space. HPPA
3048processors running HP-UX and Sparc processors running Solaris 2 have
3049linkers with such optimizations. Other systems using the ELF object format
3050as well as AIX may have these optimizations in the future.
3051
7d0756fb
CM
3052Only use these options when there are significant benefits from doing
3053so. When you specify these options, the assembler and linker will
74291a4b
MM
3054create larger object and executable files and will also be slower.
3055You will not be able to use @code{gprof} on all systems if you
3056specify this option and you may have problems with debugging if
3057you specify both this option and @samp{-g}.
3058
3059@item -fcaller-saves
3060Enable values to be allocated in registers that will be clobbered by
3061function calls, by emitting extra instructions to save and restore the
3062registers around such calls. Such allocation is done only when it
3063seems to result in better code than would otherwise be produced.
3064
81610a0d
HPN
3065This option is always enabled by default on certain machines, usually
3066those which have no call-preserved registers to use instead.
3067
3068For all machines, optimization level 2 and higher enables this flag by
3069default.
74291a4b
MM
3070
3071@item -funroll-loops
3072Perform the optimization of loop unrolling. This is only done for loops
3073whose number of iterations can be determined at compile time or run time.
1bd31d56 3074@samp{-funroll-loops} implies both @samp{-fstrength-reduce} and
74291a4b
MM
3075@samp{-frerun-cse-after-loop}.
3076
3077@item -funroll-all-loops
3078Perform the optimization of loop unrolling. This is done for all loops
3079and usually makes programs run more slowly. @samp{-funroll-all-loops}
3080implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
3081
e5eb27e5
JL
3082@item -fmove-all-movables
3083Forces all invariant computations in loops to be moved
3084outside the loop.
3085
3086@item -freduce-all-givs
3087Forces all general-induction variables in loops to be
3088strength-reduced.
3089
3090@emph{Note:} When compiling programs written in Fortran,
1bd31d56 3091@samp{-fmove-all-movables} and @samp{-freduce-all-givs} are enabled
e5eb27e5
JL
3092by default when you use the optimizer.
3093
3094These options may generate better or worse code; results are highly
3095dependent on the structure of loops within the source code.
3096
3097These two options are intended to be removed someday, once
3098they have helped determine the efficacy of various
3099approaches to improving loop optimizations.
3100
2642624b 3101Please let us (@w{@email{gcc@@gcc.gnu.org}} and @w{@email{fortran@@gnu.org}})
e5eb27e5
JL
3102know how use of these options affects
3103the performance of your production code.
3104We're very interested in code that runs @emph{slower}
3105when these options are @emph{enabled}.
3106
74291a4b
MM
3107@item -fno-peephole
3108Disable any machine-specific peephole optimizations.
861bb6c1
JL
3109
3110@item -fbranch-probabilities
3111After running a program compiled with @samp{-fprofile-arcs}
3112(@pxref{Debugging Options,, Options for Debugging Your Program or
bedc7537 3113@command{gcc}}), you can compile it a second time using
861bb6c1
JL
3114@samp{-fbranch-probabilities}, to improve optimizations based on
3115guessing the path a branch might take.
3116
3117@ifset INTERNALS
e5e809f4 3118With @samp{-fbranch-probabilities}, GCC puts a @samp{REG_EXEC_COUNT}
861bb6c1
JL
3119note on the first instruction of each basic block, and a
3120@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
3121These can be used to improve optimization. Currently, they are only
3122used in one place: in @file{reorg.c}, instead of guessing which path a
3123branch is mostly to take, the @samp{REG_BR_PROB} values are used to
3124exactly determine which path is taken more often.
3125@end ifset
8c660648 3126
454d0cc7
AH
3127@item -fno-guess-branch-probability
3128Sometimes gcc will opt to guess branch probabilities when none are
3129available from either profile directed feedback (@samp{-fprofile-arcs})
2bab2366 3130or @samp{__builtin_expect}. In a hard real-time system, people don't
454d0cc7
AH
3131want different runs of the compiler to produce code that has different
3132behavior; minimizing non-determinism is of paramount import. This
3133switch allows users to reduce non-determinism, possibly at the expense
3134of inferior optimization.
3135
41472af8
MM
3136@item -fstrict-aliasing
3137Allows the compiler to assume the strictest aliasing rules applicable to
3138the language being compiled. For C (and C++), this activates
3139optimizations based on the type of expressions. In particular, an
3140object of one type is assumed never to reside at the same address as an
3141object of a different type, unless the types are almost the same. For
3142example, an @code{unsigned int} can alias an @code{int}, but not a
3143@code{void*} or a @code{double}. A character type may alias any other
3144type.
3145
3146Pay special attention to code like this:
3147@example
3148union a_union @{
3149 int i;
3150 double d;
3151@};
3152
3153int f() @{
3154 a_union t;
3155 t.d = 3.0;
3156 return t.i;
3157@}
3158@end example
3159The practice of reading from a different union member than the one most
3160recently written to (called ``type-punning'') is common. Even with
3161@samp{-fstrict-aliasing}, type-punning is allowed, provided the memory
3162is accessed through the union type. So, the code above will work as
3163expected. However, this code might not:
3164@example
3165int f() @{
3166 a_union t;
3167 int* ip;
3168 t.d = 3.0;
3169 ip = &t.i;
3170 return *ip;
3171@}
3172@end example
3173
41472af8
MM
3174@ifset INTERNALS
3175Every language that wishes to perform language-specific alias analysis
3176should define a function that computes, given an @code{tree}
3177node, an alias set for the node. Nodes in different alias sets are not
3178allowed to alias. For an example, see the C front-end function
3179@code{c_get_alias_set}.
3180@end ifset
3181
efa3896a
GK
3182@item -falign-functions
3183@itemx -falign-functions=@var{n}
3184Align the start of functions to the next power-of-two greater than
3185@var{n}, skipping up to @var{n} bytes. For instance,
3186@samp{-falign-functions=32} aligns functions to the next 32-byte
3187boundary, but @samp{-falign-functions=24} would align to the next
318832-byte boundary only if this can be done by skipping 23 bytes or less.
3189
3190@samp{-fno-align-functions} and @samp{-falign-functions=1} are
3191equivalent and mean that functions will not be aligned.
3192
3193Some assemblers only support this flag when @var{n} is a power of two;
3194in that case, it is rounded up.
3195
3196If @var{n} is not specified, use a machine-dependent default.
3197
3198@item -falign-labels
3199@itemx -falign-labels=@var{n}
3200Align all branch targets to a power-of-two boundary, skipping up to
3201@var{n} bytes like @samp{-falign-functions}. This option can easily
3202make code slower, because it must insert dummy operations for when the
3203branch target is reached in the usual flow of the code.
3204
3205If @samp{-falign-loops} or @samp{-falign-jumps} are applicable and
3206are greater than this value, then their values are used instead.
3207
3208If @var{n} is not specified, use a machine-dependent default which is
3209very likely to be @samp{1}, meaning no alignment.
3210
3211@item -falign-loops
3212@itemx -falign-loops=@var{n}
3213Align loops to a power-of-two boundary, skipping up to @var{n} bytes
3214like @samp{-falign-functions}. The hope is that the loop will be
3215executed many times, which will make up for any execution of the dummy
3216operations.
3217
3218If @var{n} is not specified, use a machine-dependent default.
3219
3220@item -falign-jumps
3221@itemx -falign-jumps=@var{n}
3222Align branch targets to a power-of-two boundary, for branch targets
3223where the targets can only be reached by jumping, skipping up to @var{n}
3224bytes like @samp{-falign-functions}. In this case, no dummy operations
3225need be executed.
3226
3227If @var{n} is not specified, use a machine-dependent default.
3228
4bae0b47
AS
3229@item -fssa
3230Perform optimizations in static single assignment form. Each function's
3231flow graph is translated into SSA form, optimizations are performed, and
b53978a3
JO
3232the flow graph is translated back from SSA form. User's should not
3233specify this option, since it is not yet ready for production use.
3234
3235@item -fdce
3236Perform dead-code elimination in SSA form. Requires @samp{-fssa}. Like
3237@samp{-fssa}, this is an experimental feature.
4bae0b47 3238
46d3a873
CC
3239@item -fsingle-precision-constant
3240Treat floating point constant as single precision constant instead of
3241implicitly converting it to double precision constant.
3242
2b2a8f1f
RH
3243@item -frename-registers
3244Attempt to avoid false dependancies in scheduled code by making use
3245of registers left over after register allocation. This optimization
3246will most benefit processors with lots of registers. It can, however,
3247make debugging impossible, since variables will no longer stay in
3248a ``home register''.
74291a4b
MM
3249@end table
3250
3251@node Preprocessor Options
3252@section Options Controlling the Preprocessor
3253@cindex preprocessor options
3254@cindex options, preprocessor
3255
3256These options control the C preprocessor, which is run on each C source
3257file before actual compilation.
3258
3259If you use the @samp{-E} option, nothing is done except preprocessing.
3260Some of these options make sense only together with @samp{-E} because
3261they cause the preprocessor output to be unsuitable for actual
3262compilation.
3263
2642624b 3264@table @gcctabopt
74291a4b
MM
3265@item -include @var{file}
3266Process @var{file} as input before processing the regular input file.
3267In effect, the contents of @var{file} are compiled first. Any @samp{-D}
3268and @samp{-U} options on the command line are always processed before
3269@samp{-include @var{file}}, regardless of the order in which they are
3270written. All the @samp{-include} and @samp{-imacros} options are
3271processed in the order in which they are written.
3272
3273@item -imacros @var{file}
3274Process @var{file} as input, discarding the resulting output, before
3275processing the regular input file. Because the output generated from
3276@var{file} is discarded, the only effect of @samp{-imacros @var{file}}
3277is to make the macros defined in @var{file} available for use in the
e582248c
NB
3278main input. All the @samp{-include} and @samp{-imacros} options are
3279processed in the order in which they are written.
74291a4b
MM
3280
3281@item -idirafter @var{dir}
3282@cindex second include path
3283Add the directory @var{dir} to the second include path. The directories
3284on the second include path are searched when a header file is not found
3285in any of the directories in the main include path (the one that
3286@samp{-I} adds to).
3287
3288@item -iprefix @var{prefix}
3289Specify @var{prefix} as the prefix for subsequent @samp{-iwithprefix}
3290options.
3291
3292@item -iwithprefix @var{dir}
3293Add a directory to the second include path. The directory's name is
3294made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was
3295specified previously with @samp{-iprefix}. If you have not specified a
3296prefix yet, the directory containing the installed passes of the
3297compiler is used as the default.
3298
3299@item -iwithprefixbefore @var{dir}
3300Add a directory to the main include path. The directory's name is made
3301by concatenating @var{prefix} and @var{dir}, as in the case of
3302@samp{-iwithprefix}.
3303
3304@item -isystem @var{dir}
3305Add a directory to the beginning of the second include path, marking it
3306as a system directory, so that it gets the same special treatment as
3307is applied to the standard system directories.
3308
3309@item -nostdinc
3310Do not search the standard system directories for header files. Only
3311the directories you have specified with @samp{-I} options (and the
3312current directory, if appropriate) are searched. @xref{Directory
3313Options}, for information on @samp{-I}.
3314
3315By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
3316search path to only those directories you specify explicitly.
3317
e582248c
NB
3318@item -remap
3319@findex -remap
3320When searching for a header file in a directory, remap file names if a
3321file named @file{header.gcc} exists in that directory. This can be used
3322to work around limitations of file systems with file name restrictions.
3323The @file{header.gcc} file should contain a series of lines with two
3324tokens on each line: the first token is the name to map, and the second
3325token is the actual name to use.
3326
74291a4b
MM
3327@item -undef
3328Do not predefine any nonstandard macros. (Including architecture flags).
3329
3330@item -E
3331Run only the C preprocessor. Preprocess all the C source files
3332specified and output the results to standard output or to the
3333specified output file.
3334
3335@item -C
3336Tell the preprocessor not to discard comments. Used with the
3337@samp{-E} option.
3338
3339@item -P
3340Tell the preprocessor not to generate @samp{#line} directives.
3341Used with the @samp{-E} option.
3342
3343@cindex make
3344@cindex dependencies, make
3345@item -M
e582248c
NB
3346@findex -M
3347Instead of outputting the result of preprocessing, output a rule
3348suitable for @code{make} describing the dependencies of the main source
3349file. The preprocessor outputs one @code{make} rule containing the
3350object file name for that source file, a colon, and the names of all the
3351included files. If there are many included files then the rule is split
3352into several lines using @samp{\}-newline.
74291a4b
MM
3353
3354@samp{-M} implies @samp{-E}.
3355
e582248c
NB
3356@item -MM
3357@findex -MM
3358Like @samp{-M}, but mention only the files included with @samp{#include
3359"@var{file}"}. System header files included with @samp{#include
3360<@var{file}>} are omitted.
3361
7da723ef
NB
3362@item -MD
3363@findex -MD
3364Like @samp{-M} but the dependency information is written to a file
3365rather than stdout. @code{gcc} will use the same file name and
3366directory as the object file, but with the suffix ".d" instead.
3367
3368This is in addition to compiling the main file as specified ---
3369@samp{-MD} does not inhibit ordinary compilation the way @samp{-M} does,
3370unless you also specify @samp{-MG}.
3371
3372With Mach, you can use the utility @code{md} to merge multiple
3373dependency files into a single dependency file suitable for using with
3374the @samp{make} command.
3375
d396403a 3376@item -MMD
7da723ef
NB
3377@findex -MMD
3378Like @samp{-MD} except mention only user header files, not system
3379-header files.
3380
e582248c
NB
3381@item -MF @var{file}
3382@findex -MF
3383When used with @samp{-M} or @samp{-MM}, specifies a file to write the
3384dependencies to. This allows the preprocessor to write the preprocessed
3385file to stdout normally. If no @samp{-MF} switch is given, CPP sends
3386the rules to stdout and suppresses normal preprocessed output.
3387
74291a4b 3388Another way to specify output of a @code{make} rule is by setting
bedc7537 3389the environment variable @env{DEPENDENCIES_OUTPUT} (@pxref{Environment
74291a4b
MM
3390Variables}).
3391
74291a4b 3392@item -MG
e582248c
NB
3393@findex -MG
3394When used with @samp{-M} or @samp{-MM}, @samp{-MG} says to treat missing
3395header files as generated files and assume they live in the same
3396directory as the source file. It suppresses preprocessed output, as a
3397missing header file is ordinarily an error.
3398
3399This feature is used in automatic updating of makefiles.
3400
3401@item -MP
3402@findex -MP
3403This option instructs CPP to add a phony target for each dependency
3404other than the main file, causing each to depend on nothing. These
3405dummy rules work around errors @code{make} gives if you remove header
3406files without updating the @code{Makefile} to match.
3407
3408This is typical output:-
3409
3410@smallexample
3411/tmp/test.o: /tmp/test.c /tmp/test.h
3412
3413/tmp/test.h:
3414@end smallexample
3415
3416@item -MQ @var{target}
3417@item -MT @var{target}
3418@findex -MQ
3419@findex -MT
3420By default CPP uses the main file name, including any path, and appends
3421the object suffix, normally ``.o'', to it to obtain the name of the
3422target for dependency generation. With @samp{-MT} you can specify a
3423target yourself, overriding the default one.
3424
3425If you want multiple targets, you can specify them as a single argument
3426to @samp{-MT}, or use multiple @samp{-MT} options.
3427
3428The targets you specify are output in the order they appear on the
3429command line. @samp{-MQ} is identical to @samp{-MT}, except that the
3430target name is quoted for Make, but with @samp{-MT} it isn't. For
3431example, -MT '$(objpfx)foo.o' gives
3432
3433@smallexample
3434$(objpfx)foo.o: /tmp/foo.c
3435@end smallexample
3436
3437but -MQ '$(objpfx)foo.o' gives
3438
3439@smallexample
3440$$(objpfx)foo.o: /tmp/foo.c
3441@end smallexample
3442
3443The default target is automatically quoted, as if it were given with
3444@samp{-MQ}.
74291a4b
MM
3445
3446@item -H
3447Print the name of each header file used, in addition to other normal
3448activities.
3449
3450@item -A@var{question}(@var{answer})
3451Assert the answer @var{answer} for @var{question}, in case it is tested
3452with a preprocessing conditional such as @samp{#if
3453#@var{question}(@var{answer})}. @samp{-A-} disables the standard
3454assertions that normally describe the target machine.
3455
3456@item -D@var{macro}
3457Define macro @var{macro} with the string @samp{1} as its definition.
3458
3459@item -D@var{macro}=@var{defn}
3460Define macro @var{macro} as @var{defn}. All instances of @samp{-D} on
3461the command line are processed before any @samp{-U} options.
3462
e582248c
NB
3463Any @samp{-D} and @samp{-U} options on the command line are processed in
3464order, and always before @samp{-imacros @var{file}}, regardless of the
3465order in which they are written.
3466
74291a4b
MM
3467@item -U@var{macro}
3468Undefine macro @var{macro}. @samp{-U} options are evaluated after all
3469@samp{-D} options, but before any @samp{-include} and @samp{-imacros}
3470options.
3471
e582248c
NB
3472Any @samp{-D} and @samp{-U} options on the command line are processed in
3473order, and always before @samp{-imacros @var{file}}, regardless of the
3474order in which they are written.
3475
74291a4b
MM
3476@item -dM
3477Tell the preprocessor to output only a list of the macro definitions
3478that are in effect at the end of preprocessing. Used with the @samp{-E}
3479option.
3480
3481@item -dD
3482Tell the preprocessing to pass all macro definitions into the output, in
3483their proper sequence in the rest of the output.
3484
3485@item -dN
3486Like @samp{-dD} except that the macro arguments and contents are omitted.
3487Only @samp{#define @var{name}} is included in the output.
3488
e582248c
NB
3489@item -dI
3490@findex -dI
3491Output @samp{#include} directives in addition to the result of
3492preprocessing.
3493
74291a4b 3494@item -trigraphs
e582248c
NB
3495@findex -trigraphs
3496Process ISO standard trigraph sequences. These are three-character
3497sequences, all starting with @samp{??}, that are defined by ISO C to
3498stand for single characters. For example, @samp{??/} stands for
3499@samp{\}, so @samp{'??/n'} is a character constant for a newline. By
3500default, GCC ignores trigraphs, but in standard-conforming modes it
3501converts them. See the @samp{-std} and @samp{-ansi} options.
3502
3503The nine trigraph sequences are
3504@table @samp
3505@item ??(
3506-> @samp{[}
3507
3508@item ??)
3509-> @samp{]}
3510
3511@item ??<
3512-> @samp{@{}
3513
3514@item ??>
3515-> @samp{@}}
3516
3517@item ??=
3518-> @samp{#}
3519
3520@item ??/
3521-> @samp{\}
3522
3523@item ??'
3524-> @samp{^}
3525
3526@item ??!
3527-> @samp{|}
3528
3529@item ??-
3530-> @samp{~}
3531
3532@end table
3533
3534Trigraph support is not popular, so many compilers do not implement it
3535properly. Portable code should not rely on trigraphs being either
3536converted or ignored.
74291a4b 3537
bedc7537
NC
3538@item -Wp,@var{option}
3539Pass @var{option} as an option to the preprocessor. If @var{option}
74291a4b
MM
3540contains commas, it is split into multiple options at the commas.
3541@end table
3542
3543@node Assembler Options
3544@section Passing Options to the Assembler
3545
3546@c prevent bad page break with this line
3547You can pass options to the assembler.
3548
2642624b 3549@table @gcctabopt
bedc7537 3550@item -Wa,@var{option}
74291a4b
MM
3551Pass @var{option} as an option to the assembler. If @var{option}
3552contains commas, it is split into multiple options at the commas.
3553@end table
3554
3555@node Link Options
3556@section Options for Linking
3557@cindex link options
3558@cindex options, linking
3559
3560These options come into play when the compiler links object files into
3561an executable output file. They are meaningless if the compiler is
3562not doing a link step.
3563
2642624b 3564@table @gcctabopt
74291a4b
MM
3565@cindex file names
3566@item @var{object-file-name}
3567A file name that does not end in a special recognized suffix is
3568considered to name an object file or library. (Object files are
3569distinguished from libraries by the linker according to the file
3570contents.) If linking is done, these object files are used as input
3571to the linker.
3572
3573@item -c
3574@itemx -S
3575@itemx -E
3576If any of these options is used, then the linker is not run, and
3577object file names should not be used as arguments. @xref{Overall
3578Options}.
3579
3580@cindex Libraries
3581@item -l@var{library}
3582Search the library named @var{library} when linking.
3583
3584It makes a difference where in the command you write this option; the
3585linker searches processes libraries and object files in the order they
3586are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
3587after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers
3588to functions in @samp{z}, those functions may not be loaded.
3589
3590The linker searches a standard list of directories for the library,
3591which is actually a file named @file{lib@var{library}.a}. The linker
3592then uses this file as if it had been specified precisely by name.
3593
3594The directories searched include several standard system directories
3595plus any that you specify with @samp{-L}.
3596
3597Normally the files found this way are library files---archive files
3598whose members are object files. The linker handles an archive file by
3599scanning through it for members which define symbols that have so far
3600been referenced but not defined. But if the file that is found is an
3601ordinary object file, it is linked in the usual fashion. The only
3602difference between using an @samp{-l} option and specifying a file name
3603is that @samp{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
3604and searches several directories.
3605
3606@item -lobjc
3607You need this special case of the @samp{-l} option in order to
3608link an Objective C program.
3609
3610@item -nostartfiles
3611Do not use the standard system startup files when linking.
bedc7537
NC
3612The standard system libraries are used normally, unless @option{-nostdlib}
3613or @option{-nodefaultlibs} is used.
74291a4b
MM
3614
3615@item -nodefaultlibs
3616Do not use the standard system libraries when linking.
3617Only the libraries you specify will be passed to the linker.
bedc7537 3618The standard startup files are used normally, unless @option{-nostartfiles}
4754172c 3619is used. The compiler may generate calls to memcmp, memset, and memcpy
c1030c7c 3620for System V (and ISO C) environments or to bcopy and bzero for
4754172c
CM
3621BSD environments. These entries are usually resolved by entries in
3622libc. These entry points should be supplied through some other
3623mechanism when this option is specified.
74291a4b
MM
3624
3625@item -nostdlib
3626Do not use the standard system startup files or libraries when linking.
3627No startup files and only the libraries you specify will be passed to
4754172c 3628the linker. The compiler may generate calls to memcmp, memset, and memcpy
c1030c7c 3629for System V (and ISO C) environments or to bcopy and bzero for
4754172c
CM
3630BSD environments. These entries are usually resolved by entries in
3631libc. These entry points should be supplied through some other
3632mechanism when this option is specified.
74291a4b
MM
3633
3634@cindex @code{-lgcc}, use with @code{-nostdlib}
3635@cindex @code{-nostdlib} and unresolved references
3636@cindex unresolved references and @code{-nostdlib}
3637@cindex @code{-lgcc}, use with @code{-nodefaultlibs}
3638@cindex @code{-nodefaultlibs} and unresolved references
3639@cindex unresolved references and @code{-nodefaultlibs}
3640One of the standard libraries bypassed by @samp{-nostdlib} and
3641@samp{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
0c2d1a2a 3642that GCC uses to overcome shortcomings of particular machines, or special
74291a4b
MM
3643needs for some languages.
3644@ifset INTERNALS
0c2d1a2a 3645(@xref{Interface,,Interfacing to GCC Output}, for more discussion of
74291a4b
MM
3646@file{libgcc.a}.)
3647@end ifset
3648@ifclear INTERNALS
0c2d1a2a 3649(@xref{Interface,,Interfacing to GCC Output,gcc.info,Porting GCC},
74291a4b
MM
3650for more discussion of @file{libgcc.a}.)
3651@end ifclear
3652In most cases, you need @file{libgcc.a} even when you want to avoid
3653other standard libraries. In other words, when you specify @samp{-nostdlib}
3654or @samp{-nodefaultlibs} you should usually specify @samp{-lgcc} as well.
0c2d1a2a 3655This ensures that you have no unresolved references to internal GCC
74291a4b 3656library subroutines. (For example, @samp{__main}, used to ensure C++
bedc7537 3657constructors will be called; @pxref{Collect2,,@command{collect2}}.)
74291a4b
MM
3658
3659@item -s
3660Remove all symbol table and relocation information from the executable.
3661
3662@item -static
3663On systems that support dynamic linking, this prevents linking with the shared
3664libraries. On other systems, this option has no effect.
3665
3666@item -shared
3667Produce a shared object which can then be linked with other objects to
1d3b0e2c
ME
3668form an executable. Not all systems support this option. For predictable
3669results, you must also specify the same set of options that were used to
3670generate code (@samp{-fpic}, @samp{-fPIC}, or model suboptions)
2642624b 3671when you specify this option.@footnote{On some systems, @samp{gcc -shared}
1d3b0e2c 3672needs to build supplementary stub code for constructors to work. On
2642624b 3673multi-libbed systems, @samp{gcc -shared} must select the correct support
1d3b0e2c
ME
3674libraries to link against. Failing to supply the correct flags may lead
3675to subtle defects. Supplying them in cases where they are not necessary
3676is innocuous.}
74291a4b 3677
9db0819e
RH
3678@item -shared-libgcc
3679@itemx -static-libgcc
3680On systems that provide @file{libgcc} as a shared library, these options
3681force the use of either the shared or static version respectively.
3682If no shared version of @file{libgcc} was built when the compiler was
3683configured, these options have no effect.
3684
3685There are several situations in which an application should use the
3686shared @file{libgcc} instead of the static version. The most common
3687of these is when the application wishes to throw and catch exceptions
3688across different shared libraries. In that case, each of the libraries
3689as well as the application itself should use the shared @file{libgcc}.
3690
3691At present the GCC driver makes no attempt to recognize the situations
3692in which the shared @file{libgcc} should be used, and defaults to using
3693the static @file{libgcc} always. This will likely change in the future,
3694at which time @samp{-static-libgcc} becomes useful as a means for
3695overriding GCC's choice.
3696
74291a4b
MM
3697@item -symbolic
3698Bind references to global symbols when building a shared object. Warn
3699about any unresolved references (unless overridden by the link editor
3700option @samp{-Xlinker -z -Xlinker defs}). Only a few systems support
3701this option.
3702
3703@item -Xlinker @var{option}
3704Pass @var{option} as an option to the linker. You can use this to
0c2d1a2a 3705supply system-specific linker options which GCC does not know how to
74291a4b
MM
3706recognize.
3707
3708If you want to pass an option that takes an argument, you must use
3709@samp{-Xlinker} twice, once for the option and once for the argument.
3710For example, to pass @samp{-assert definitions}, you must write
3711@samp{-Xlinker -assert -Xlinker definitions}. It does not work to write
3712@samp{-Xlinker "-assert definitions"}, because this passes the entire
3713string as a single argument, which is not what the linker expects.
3714
bedc7537 3715@item -Wl,@var{option}
74291a4b
MM
3716Pass @var{option} as an option to the linker. If @var{option} contains
3717commas, it is split into multiple options at the commas.
3718
3719@item -u @var{symbol}
3720Pretend the symbol @var{symbol} is undefined, to force linking of
3721library modules to define it. You can use @samp{-u} multiple times with
3722different symbols to force loading of additional library modules.
3723@end table
3724
3725@node Directory Options
3726@section Options for Directory Search
3727@cindex directory options
3728@cindex options, directory search
3729@cindex search path
3730
3731These options specify directories to search for header files, for
3732libraries and for parts of the compiler:
3733
2642624b 3734@table @gcctabopt
74291a4b 3735@item -I@var{dir}
861bb6c1
JL
3736Add the directory @var{dir} to the head of the list of directories to be
3737searched for header files. This can be used to override a system header
3738file, substituting your own version, since these directories are
74291a4b
MM
3739searched before the system header file directories. If you use more
3740than one @samp{-I} option, the directories are scanned in left-to-right
3741order; the standard system directories come after.
3742
3743@item -I-
3744Any directories you specify with @samp{-I} options before the @samp{-I-}
3745option are searched only for the case of @samp{#include "@var{file}"};
3746they are not searched for @samp{#include <@var{file}>}.
3747
3748If additional directories are specified with @samp{-I} options after
3749the @samp{-I-}, these directories are searched for all @samp{#include}
3750directives. (Ordinarily @emph{all} @samp{-I} directories are used
3751this way.)
3752
3753In addition, the @samp{-I-} option inhibits the use of the current
3754directory (where the current input file came from) as the first search
3755directory for @samp{#include "@var{file}"}. There is no way to
3756override this effect of @samp{-I-}. With @samp{-I.} you can specify
3757searching the directory which was current when the compiler was
3758invoked. That is not exactly the same as what the preprocessor does
3759by default, but it is often satisfactory.
3760
3761@samp{-I-} does not inhibit the use of the standard system directories
3762for header files. Thus, @samp{-I-} and @samp{-nostdinc} are
3763independent.
3764
3765@item -L@var{dir}
3766Add directory @var{dir} to the list of directories to be searched
3767for @samp{-l}.
3768
3769@item -B@var{prefix}
3770This option specifies where to find the executables, libraries,
3771include files, and data files of the compiler itself.
3772
3773The compiler driver program runs one or more of the subprograms
3774@file{cpp}, @file{cc1}, @file{as} and @file{ld}. It tries
3775@var{prefix} as a prefix for each program it tries to run, both with and
3776without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
3777
3778For each subprogram to be run, the compiler driver first tries the
3779@samp{-B} prefix, if any. If that name is not found, or if @samp{-B}
3780was not specified, the driver tries two standard prefixes, which are
3781@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}. If neither of
3782those results in a file name that is found, the unmodified program
3783name is searched for using the directories specified in your
bedc7537 3784@env{PATH} environment variable.
74291a4b
MM
3785
3786@samp{-B} prefixes that effectively specify directory names also apply
3787to libraries in the linker, because the compiler translates these
3788options into @samp{-L} options for the linker. They also apply to
3789includes files in the preprocessor, because the compiler translates these
3790options into @samp{-isystem} options for the preprocessor. In this case,
3791the compiler appends @samp{include} to the prefix.
3792
3793The run-time support file @file{libgcc.a} can also be searched for using
3794the @samp{-B} prefix, if needed. If it is not found there, the two
3795standard prefixes above are tried, and that is all. The file is left
3796out of the link if it is not found by those means.
3797
3798Another way to specify a prefix much like the @samp{-B} prefix is to use
bedc7537 3799the environment variable @env{GCC_EXEC_PREFIX}. @xref{Environment
74291a4b 3800Variables}.
861bb6c1
JL
3801
3802@item -specs=@var{file}
3803Process @var{file} after the compiler reads in the standard @file{specs}
3804file, in order to override the defaults that the @file{gcc} driver
3805program uses when determining what switches to pass to @file{cc1},
3806@file{cc1plus}, @file{as}, @file{ld}, etc. More than one
3807@samp{-specs=}@var{file} can be specified on the command line, and they
3808are processed in order, from left to right.
74291a4b
MM
3809@end table
3810
ee457005
JM
3811@c man end
3812
a743d340
NC
3813@node Spec Files
3814@section Specifying subprocesses and the switches to pass to them
3815@cindex Spec Files
bedc7537 3816@command{gcc} is a driver program. It performs its job by invoking a
a743d340
NC
3817sequence of other programs to do the work of compiling, assembling and
3818linking. GCC interprets its command-line parameters and uses these to
3819deduce which programs it should invoke, and which command-line options
3820it ought to place on their command lines. This behaviour is controlled
3821by @dfn{spec strings}. In most cases there is one spec string for each
3822program that GCC can invoke, but a few programs have multiple spec
3823strings to control their behaviour. The spec strings built into GCC can
3824be overridden by using the @samp{-specs=} command-line switch to specify
3825a spec file.
3826
3827@dfn{Spec files} are plaintext files that are used to construct spec
3828strings. They consist of a sequence of directives separated by blank
3829lines. The type of directive is determined by the first non-whitespace
3830character on the line and it can be one of the following:
3831
3832@table @code
3833@item %@var{command}
3834Issues a @var{command} to the spec file processor. The commands that can
3835appear here are:
3836
3837@table @code
3838@item %include <@var{file}>
3839@cindex %include
3840Search for @var{file} and insert its text at the current point in the
3841specs file.
3842
3843@item %include_noerr <@var{file}>
3844@cindex %include_noerr
3845Just like @samp{%include}, but do not generate an error message if the include
3846file cannot be found.
3847
3848@item %rename @var{old_name} @var{new_name}
3849@cindex %rename
3850Rename the spec string @var{old_name} to @var{new_name}.
3851
3852@end table
3853
3854@item *[@var{spec_name}]:
3855This tells the compiler to create, override or delete the named spec
3856string. All lines after this directive up to the next directive or
3857blank line are considered to be the text for the spec string. If this
3858results in an empty string then the spec will be deleted. (Or, if the
3859spec did not exist, then nothing will happened.) Otherwise, if the spec
3860does not currently exist a new spec will be created. If the spec does
3861exist then its contents will be overridden by the text of this
3862directive, unless the first character of that text is the @samp{+}
3863character, in which case the text will be appended to the spec.
3864
3865@item [@var{suffix}]:
3866Creates a new @samp{[@var{suffix}] spec} pair. All lines after this directive
3867and up to the next directive or blank line are considered to make up the
3868spec string for the indicated suffix. When the compiler encounters an
3869input file with the named suffix, it will processes the spec string in
3870order to work out how to compile that file. For example:
3871
3872@smallexample
3873.ZZ:
3874z-compile -input %i
3875@end smallexample
3876
3877This says that any input file whose name ends in @samp{.ZZ} should be
3878passed to the program @samp{z-compile}, which should be invoked with the
3879command-line switch @samp{-input} and with the result of performing the
3880@samp{%i} substitution. (See below.)
3881
3882As an alternative to providing a spec string, the text that follows a
3883suffix directive can be one of the following:
3884
3885@table @code
3886@item @@@var{language}
3887This says that the suffix is an alias for a known @var{language}. This is
bedc7537 3888similar to using the @option{-x} command-line switch to GCC to specify a
a743d340
NC
3889language explicitly. For example:
3890
3891@smallexample
3892.ZZ:
3893@@c++
3894@end smallexample
3895
3896Says that .ZZ files are, in fact, C++ source files.
3897
3898@item #@var{name}
3899This causes an error messages saying:
3900
3901@smallexample
3902@var{name} compiler not installed on this system.
3903@end smallexample
3904@end table
3905
3906GCC already has an extensive list of suffixes built into it.
3907This directive will add an entry to the end of the list of suffixes, but
3908since the list is searched from the end backwards, it is effectively
3909possible to override earlier entries using this technique.
3910
3911@end table
3912
3913GCC has the following spec strings built into it. Spec files can
3914override these strings or create their own. Note that individual
3915targets can also add their own spec strings to this list.
3916
3917@smallexample
3918asm Options to pass to the assembler
3919asm_final Options to pass to the assembler post-processor
3920cpp Options to pass to the C preprocessor
3921cc1 Options to pass to the C compiler
3922cc1plus Options to pass to the C++ compiler
3923endfile Object files to include at the end of the link
3924link Options to pass to the linker
3925lib Libraries to include on the command line to the linker
3926libgcc Decides which GCC support library to pass to the linker
3927linker Sets the name of the linker
3928predefines Defines to be passed to the C preprocessor
3929signed_char Defines to pass to CPP to say whether @code{char} is signed by default
3930startfile Object files to include at the start of the link
3931@end smallexample
3932
3933Here is a small example of a spec file:
3934
3935@smallexample
3936%rename lib old_lib
3937
3938*lib:
3939--start-group -lgcc -lc -leval1 --end-group %(old_lib)
3940@end smallexample
3941
3942This example renames the spec called @samp{lib} to @samp{old_lib} and
3943then overrides the previous definition of @samp{lib} with a new one.
3944The new definition adds in some extra command-line options before
3945including the text of the old definition.
3946
3947@dfn{Spec strings} are a list of command-line options to be passed to their
3948corresponding program. In addition, the spec strings can contain
3949@samp{%}-prefixed sequences to substitute variable text or to
3950conditionally insert text into the command line. Using these constructs
3951it is possible to generate quite complex command lines.
3952
3953Here is a table of all defined @samp{%}-sequences for spec
3954strings. Note that spaces are not generated automatically around the
3955results of expanding these sequences. Therefore you can concatenate them
3956together or combine them with constant text in a single argument.
3957
3958@table @code
3959@item %%
3960Substitute one @samp{%} into the program name or argument.
3961
3962@item %i
3963Substitute the name of the input file being processed.
3964
3965@item %b
3966Substitute the basename of the input file being processed.
3967This is the substring up to (and not including) the last period
3968and not including the directory.
3969
3970@item %d
3971Marks the argument containing or following the @samp{%d} as a
3972temporary file name, so that that file will be deleted if GCC exits
3973successfully. Unlike @samp{%g}, this contributes no text to the
3974argument.
3975
3976@item %g@var{suffix}
3977Substitute a file name that has suffix @var{suffix} and is chosen
3978once per compilation, and mark the argument in the same way as
3979@samp{%d}. To reduce exposure to denial-of-service attacks, the file
3980name is now chosen in a way that is hard to predict even when previously
3981chosen file names are known. For example, @samp{%g.s ... %g.o ... %g.s}
3982might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}. @var{suffix} matches
3983the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
3984treated exactly as if @samp{%O} had been preprocessed. Previously, @samp{%g}
3985was simply substituted with a file name chosen once per compilation,
3986without regard to any appended suffix (which was therefore treated
3987just like ordinary text), making such attacks more likely to succeed.
3988
3989@item %u@var{suffix}
3990Like @samp{%g}, but generates a new temporary file name even if
3991@samp{%u@var{suffix}} was already seen.
3992
3993@item %U@var{suffix}
3994Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
3995new one if there is no such last file name. In the absence of any
3996@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
3997the same suffix @emph{space}, so @samp{%g.s ... %U.s ... %g.s ... %U.s}
3998would involve the generation of two distinct file names, one
3999for each @samp{%g.s} and another for each @samp{%U.s}. Previously, @samp{%U} was
4000simply substituted with a file name chosen for the previous @samp{%u},
4001without regard to any appended suffix.
4002
4003@item %w
4004Marks the argument containing or following the @samp{%w} as the
4005designated output file of this compilation. This puts the argument
4006into the sequence of arguments that @samp{%o} will substitute later.
4007
4008@item %o
4009Substitutes the names of all the output files, with spaces
4010automatically placed around them. You should write spaces
4011around the @samp{%o} as well or the results are undefined.
4012@samp{%o} is for use in the specs for running the linker.
4013Input files whose names have no recognized suffix are not compiled
4014at all, but they are included among the output files, so they will
4015be linked.
4016
4017@item %O
4018Substitutes the suffix for object files. Note that this is
4019handled specially when it immediately follows @samp{%g, %u, or %U},
4020because of the need for those to form complete file names. The
4021handling is such that @samp{%O} is treated exactly as if it had already
4022been substituted, except that @samp{%g, %u, and %U} do not currently
4023support additional @var{suffix} characters following @samp{%O} as they would
4024following, for example, @samp{.o}.
4025
4026@item %p
4027Substitutes the standard macro predefinitions for the
4028current target machine. Use this when running @code{cpp}.
4029
4030@item %P
4031Like @samp{%p}, but puts @samp{__} before and after the name of each
4032predefined macro, except for macros that start with @samp{__} or with
c1030c7c 4033@samp{_@var{L}}, where @var{L} is an uppercase letter. This is for ISO
a743d340
NC
4034C.
4035
4036@item %I
4037Substitute a @samp{-iprefix} option made from GCC_EXEC_PREFIX.
4038
4039@item %s
4040Current argument is the name of a library or startup file of some sort.
4041Search for that file in a standard list of directories and substitute
4042the full name found.
4043
4044@item %e@var{str}
4045Print @var{str} as an error message. @var{str} is terminated by a newline.
4046Use this when inconsistent options are detected.
4047
4048@item %|
4049Output @samp{-} if the input for the current command is coming from a pipe.
4050
4051@item %(@var{name})
4052Substitute the contents of spec string @var{name} at this point.
4053
4054@item %[@var{name}]
4055Like @samp{%(...)} but put @samp{__} around @samp{-D} arguments.
4056
4057@item %x@{@var{option}@}
4058Accumulate an option for @samp{%X}.
4059
4060@item %X
4061Output the accumulated linker options specified by @samp{-Wl} or a @samp{%x}
4062spec string.
4063
4064@item %Y
4065Output the accumulated assembler options specified by @samp{-Wa}.
4066
4067@item %Z
4068Output the accumulated preprocessor options specified by @samp{-Wp}.
4069
4070@item %v1
4071Substitute the major version number of GCC.
4072(For version 2.9.5, this is 2.)
4073
4074@item %v2
4075Substitute the minor version number of GCC.
4076(For version 2.9.5, this is 9.)
4077
4078@item %a
4079Process the @code{asm} spec. This is used to compute the
4080switches to be passed to the assembler.
4081
4082@item %A
4083Process the @code{asm_final} spec. This is a spec string for
4084passing switches to an assembler post-processor, if such a program is
4085needed.
4086
4087@item %l
4088Process the @code{link} spec. This is the spec for computing the
4089command line passed to the linker. Typically it will make use of the
4090@samp{%L %G %S %D and %E} sequences.
4091
4092@item %D
4093Dump out a @samp{-L} option for each directory that GCC believes might
4094contain startup files. If the target supports multilibs then the
4095current multilib directory will be prepended to each of these paths.
4096
4097@item %L
4098Process the @code{lib} spec. This is a spec string for deciding which
4099libraries should be included on the command line to the linker.
4100
4101@item %G
4102Process the @code{libgcc} spec. This is a spec string for deciding
4103which GCC support library should be included on the command line to the linker.
4104
4105@item %S
4106Process the @code{startfile} spec. This is a spec for deciding which
4107object files should be the first ones passed to the linker. Typically
4108this might be a file named @file{crt0.o}.
4109
4110@item %E
4111Process the @code{endfile} spec. This is a spec string that specifies
4112the last object files that will be passed to the linker.
4113
4114@item %C
4115Process the @code{cpp} spec. This is used to construct the arguments
4116to be passed to the C preprocessor.
4117
4118@item %c
4119Process the @code{signed_char} spec. This is intended to be used
4120to tell cpp whether a char is signed. It typically has the definition:
4121@smallexample
4122%@{funsigned-char:-D__CHAR_UNSIGNED__@}
4123@end smallexample
4124
4125@item %1
4126Process the @code{cc1} spec. This is used to construct the options to be
4127passed to the actual C compiler (@samp{cc1}).
4128
4129@item %2
4130Process the @code{cc1plus} spec. This is used to construct the options to be
4131passed to the actual C++ compiler (@samp{cc1plus}).
4132
4133@item %*
4134Substitute the variable part of a matched option. See below.
4135Note that each comma in the substituted string is replaced by
4136a single space.
4137
4138@item %@{@code{S}@}
4139Substitutes the @code{-S} switch, if that switch was given to GCC.
4140If that switch was not specified, this substitutes nothing. Note that
4141the leading dash is omitted when specifying this option, and it is
4142automatically inserted if the substitution is performed. Thus the spec
4143string @samp{%@{foo@}} would match the command-line option @samp{-foo}
4144and would output the command line option @samp{-foo}.
4145
4146@item %W@{@code{S}@}
4147Like %@{@code{S}@} but mark last argument supplied within as a file to be
4148deleted on failure.
4149
4150@item %@{@code{S}*@}
4151Substitutes all the switches specified to GCC whose names start
4152with @code{-S}, but which also take an argument. This is used for
4153switches like @samp{-o, -D, -I}, etc. GCC considers @samp{-o foo} as being
4154one switch whose names starts with @samp{o}. %@{o*@} would substitute this
4155text, including the space. Thus two arguments would be generated.
4156
4157@item %@{^@code{S}*@}
4158Like %@{@code{S}*@}, but don't put a blank between a switch and its
4159argument. Thus %@{^o*@} would only generate one argument, not two.
4160
d630442f 4161@item %@{<@code{S}@}
50c57e7b 4162Remove all occurrences of @code{-S} from the command line. Note - this
d630442f 4163command is position dependent. @samp{%} commands in the spec string
50c57e7b 4164before this option will see @code{-S}, @samp{%} commands in the spec
d630442f
NC
4165string after this option will not.
4166
a743d340
NC
4167@item %@{@code{S}*:@code{X}@}
4168Substitutes @code{X} if one or more switches whose names start with
4169@code{-S} are specified to GCC. Note that the tail part of the
4170@code{-S} option (i.e. the part matched by the @samp{*}) will be substituted
4171for each occurrence of @samp{%*} within @code{X}.
4172
4173@item %@{@code{S}:@code{X}@}
4174Substitutes @code{X}, but only if the @samp{-S} switch was given to GCC.
4175
4176@item %@{!@code{S}:@code{X}@}
4177Substitutes @code{X}, but only if the @samp{-S} switch was @emph{not} given to GCC.
4178
4179@item %@{|@code{S}:@code{X}@}
4180Like %@{@code{S}:@code{X}@}, but if no @code{S} switch, substitute @samp{-}.
4181
4182@item %@{|!@code{S}:@code{X}@}
4183Like %@{!@code{S}:@code{X}@}, but if there is an @code{S} switch, substitute @samp{-}.
4184
4185@item %@{.@code{S}:@code{X}@}
4186Substitutes @code{X}, but only if processing a file with suffix @code{S}.
4187
4188@item %@{!.@code{S}:@code{X}@}
4189Substitutes @code{X}, but only if @emph{not} processing a file with suffix @code{S}.
4190
4191@item %@{@code{S}|@code{P}:@code{X}@}
4192Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC. This may be
4193combined with @samp{!} and @samp{.} sequences as well, although they
4194have a stronger binding than the @samp{|}. For example a spec string
4195like this:
4196
4197@smallexample
4198%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
4199@end smallexample
4200
4201will output the following command-line options from the following input
4202command-line options:
4203
4204@smallexample
4205fred.c -foo -baz
4206jim.d -bar -boggle
4207-d fred.c -foo -baz -boggle
4208-d jim.d -bar -baz -boggle
4209@end smallexample
4210
4211@end table
4212
4213The conditional text @code{X} in a %@{@code{S}:@code{X}@} or
4214%@{!@code{S}:@code{X}@} construct may contain other nested @samp{%} constructs
4215or spaces, or even newlines. They are processed as usual, as described
4216above.
4217
4218The @samp{-O, -f, -m, and -W} switches are handled specifically in these
4219constructs. If another value of @samp{-O} or the negated form of a @samp{-f, -m, or
4220-W} switch is found later in the command line, the earlier switch
4221value is ignored, except with @{@code{S}*@} where @code{S} is just one
4222letter, which passes all matching options.
4223
4224The character @samp{|} at the beginning of the predicate text is used to indicate
4225that a command should be piped to the following command, but only if @samp{-pipe}
4226is specified.
4227
4228It is built into GCC which switches take arguments and which do not.
4229(You might think it would be useful to generalize this to allow each
4230compiler's spec to say which switches take arguments. But this cannot
4231be done in a consistent fashion. GCC cannot even decide which input
4232files have been specified without knowing which switches take arguments,
4233and it must know which input files to compile in order to tell which
4234compilers to run).
4235
4236GCC also knows implicitly that arguments starting in @samp{-l} are to be
4237treated as compiler output files, and passed to the linker in their
4238proper position among the other output files.
4239
ee457005
JM
4240@c man begin OPTIONS
4241
74291a4b
MM
4242@node Target Options
4243@section Specifying Target Machine and Compiler Version
4244@cindex target options
4245@cindex cross compiling
4246@cindex specifying machine version
4247@cindex specifying compiler version and target machine
4248@cindex compiler version, specifying
4249@cindex target machine, specifying
4250
0c2d1a2a 4251By default, GCC compiles code for the same type of machine that you
74291a4b
MM
4252are using. However, it can also be installed as a cross-compiler, to
4253compile for some other type of machine. In fact, several different
0c2d1a2a 4254configurations of GCC, for different target machines, can be
74291a4b
MM
4255installed side by side. Then you specify which one to use with the
4256@samp{-b} option.
4257
0c2d1a2a 4258In addition, older and newer versions of GCC can be installed side
74291a4b
MM
4259by side. One of them (probably the newest) will be the default, but
4260you may sometimes wish to use another.
4261
2642624b 4262@table @gcctabopt
74291a4b
MM
4263@item -b @var{machine}
4264The argument @var{machine} specifies the target machine for compilation.
0c2d1a2a 4265This is useful when you have installed GCC as a cross-compiler.
74291a4b
MM
4266
4267The value to use for @var{machine} is the same as was specified as the
0c2d1a2a 4268machine type when configuring GCC as a cross-compiler. For
74291a4b
MM
4269example, if a cross-compiler was configured with @samp{configure
4270i386v}, meaning to compile for an 80386 running System V, then you
4271would specify @samp{-b i386v} to run that cross compiler.
4272
4273When you do not specify @samp{-b}, it normally means to compile for
4274the same type of machine that you are using.
4275
4276@item -V @var{version}
0c2d1a2a 4277The argument @var{version} specifies which version of GCC to run.
74291a4b 4278This is useful when multiple versions are installed. For example,
0c2d1a2a 4279@var{version} might be @samp{2.0}, meaning to run GCC version 2.0.
74291a4b
MM
4280
4281The default version, when you do not specify @samp{-V}, is the last
0c2d1a2a 4282version of GCC that you installed.
74291a4b
MM
4283@end table
4284
4285The @samp{-b} and @samp{-V} options actually work by controlling part of
4286the file name used for the executable files and libraries used for
0c2d1a2a 4287compilation. A given version of GCC, for a given target machine, is
74291a4b
MM
4288normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill
4289
4290Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
4291changing the names of these directories or adding alternate names (or
4292symbolic links). If in directory @file{/usr/local/lib/gcc-lib/} the
4293file @file{80386} is a link to the file @file{i386v}, then @samp{-b
429480386} becomes an alias for @samp{-b i386v}.
4295
4296In one respect, the @samp{-b} or @samp{-V} do not completely change
bedc7537 4297to a different compiler: the top-level driver program @command{gcc}
74291a4b
MM
4298that you originally invoked continues to run and invoke the other
4299executables (preprocessor, compiler per se, assembler and linker)
4300that do the real work. However, since no real work is done in the
4301driver program, it usually does not matter that the driver program
8c7b74b9
JM
4302in use is not the one for the specified target. It is common for the
4303interface to the other executables to change incompatibly between
4304compiler versions, so unless the version specified is very close to that
4305of the driver (for example, @samp{-V 3.0} with a driver program from GCC
4306version 3.0.1), use of @samp{-V} may not work; for example, using
4307@samp{-V 2.95.2} will not work with a driver program from GCC 3.0.
74291a4b
MM
4308
4309The only way that the driver program depends on the target machine is
4310in the parsing and handling of special machine-specific options.
4311However, this is controlled by a file which is found, along with the
4312other executables, in the directory for the specified version and
4313target machine. As a result, a single installed driver program adapts
8c7b74b9
JM
4314to any specified target machine, and sufficiently similar compiler
4315versions.
74291a4b
MM
4316
4317The driver program executable does control one significant thing,
4318however: the default version and target machine. Therefore, you can
4319install different instances of the driver program, compiled for
4320different targets or versions, under different names.
4321
bedc7537
NC
4322For example, if the driver for version 2.0 is installed as @command{ogcc}
4323and that for version 2.1 is installed as @command{gcc}, then the command
4324@command{gcc} will use version 2.1 by default, while @command{ogcc} will use
74291a4b
MM
43252.0 by default. However, you can choose either version with either
4326command with the @samp{-V} option.
4327
4328@node Submodel Options
4329@section Hardware Models and Configurations
4330@cindex submodel options
4331@cindex specifying hardware config
4332@cindex hardware models and configurations, specifying
4333@cindex machine dependent options
4334
4335Earlier we discussed the standard option @samp{-b} which chooses among
4336different installed compilers for completely different target
4337machines, such as Vax vs. 68000 vs. 80386.
4338
4339In addition, each of these target machine types can have its own
4340special options, starting with @samp{-m}, to choose among various
4341hardware models or configurations---for example, 68010 vs 68020,
4342floating coprocessor or none. A single installed version of the
4343compiler can compile for any model or configuration, according to the
4344options specified.
4345
4346Some configurations of the compiler also support additional special
4347options, usually for compatibility with other compilers on the same
4348platform.
4349
4350@ifset INTERNALS
4351These options are defined by the macro @code{TARGET_SWITCHES} in the
4352machine description. The default for the options is also defined by
4353that macro, which enables you to change the defaults.
4354@end ifset
4355
4356@menu
4357* M680x0 Options::
2856c3e3 4358* M68hc1x Options::
74291a4b
MM
4359* VAX Options::
4360* SPARC Options::
4361* Convex Options::
4362* AMD29K Options::
4363* ARM Options::
157a620e 4364* Thumb Options::
ecff22ab 4365* MN10200 Options::
6d6d0fa0 4366* MN10300 Options::
861bb6c1 4367* M32R/D Options::
74291a4b
MM
4368* M88K Options::
4369* RS/6000 and PowerPC Options::
4370* RT Options::
4371* MIPS Options::
4372* i386 Options::
4373* HPPA Options::
4374* Intel 960 Options::
4375* DEC Alpha Options::
4376* Clipper Options::
4377* H8/300 Options::
4378* SH Options::
4379* System V Options::
282a61e6 4380* TMS320C3x/C4x Options::
f84271d9 4381* V850 Options::
56b2d7a7 4382* ARC Options::
83575957 4383* NS32K Options::
052a4b28
DC
4384* AVR Options::
4385* MCore Options::
df6194d4 4386* IA-64 Options::
e8ad90e5 4387* D30V Options::
74291a4b
MM
4388@end menu
4389
4390@node M680x0 Options
4391@subsection M680x0 Options
4392@cindex M680x0 options
4393
4394These are the @samp{-m} options defined for the 68000 series. The default
4395values for these options depends on which style of 68000 was selected when
4396the compiler was configured; the defaults for the most common choices are
4397given below.
4398
2642624b 4399@table @gcctabopt
74291a4b
MM
4400@item -m68000
4401@itemx -mc68000
4402Generate output for a 68000. This is the default
4403when the compiler is configured for 68000-based systems.
4404
74cf1c6d
RK
4405Use this option for microcontrollers with a 68000 or EC000 core,
4406including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
4407
74291a4b
MM
4408@item -m68020
4409@itemx -mc68020
4410Generate output for a 68020. This is the default
4411when the compiler is configured for 68020-based systems.
4412
4413@item -m68881
4414Generate output containing 68881 instructions for floating point.
4415This is the default for most 68020 systems unless @samp{-nfp} was
4416specified when the compiler was configured.
4417
4418@item -m68030
4419Generate output for a 68030. This is the default when the compiler is
4420configured for 68030-based systems.
4421
4422@item -m68040
4423Generate output for a 68040. This is the default when the compiler is
4424configured for 68040-based systems.
4425
4426This option inhibits the use of 68881/68882 instructions that have to be
74cf1c6d
RK
4427emulated by software on the 68040. Use this option if your 68040 does not
4428have code to emulate those instructions.
74291a4b
MM
4429
4430@item -m68060
4431Generate output for a 68060. This is the default when the compiler is
4432configured for 68060-based systems.
4433
4434This option inhibits the use of 68020 and 68881/68882 instructions that
74cf1c6d
RK
4435have to be emulated by software on the 68060. Use this option if your 68060
4436does not have code to emulate those instructions.
4437
4438@item -mcpu32
4439Generate output for a CPU32. This is the default
4440when the compiler is configured for CPU32-based systems.
4441
4442Use this option for microcontrollers with a
4443CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
444468336, 68340, 68341, 68349 and 68360.
74291a4b
MM
4445
4446@item -m5200
4447Generate output for a 520X "coldfire" family cpu. This is the default
4448when the compiler is configured for 520X-based systems.
4449
74cf1c6d
RK
4450Use this option for microcontroller with a 5200 core, including
4451the MCF5202, MCF5203, MCF5204 and MCF5202.
4452
74291a4b
MM
4453
4454@item -m68020-40
4455Generate output for a 68040, without using any of the new instructions.
4456This results in code which can run relatively efficiently on either a
445768020/68881 or a 68030 or a 68040. The generated code does use the
445868881 instructions that are emulated on the 68040.
4459
861bb6c1
JL
4460@item -m68020-60
4461Generate output for a 68060, without using any of the new instructions.
4462This results in code which can run relatively efficiently on either a
446368020/68881 or a 68030 or a 68040. The generated code does use the
446468881 instructions that are emulated on the 68060.
4465
74291a4b
MM
4466@item -mfpa
4467Generate output containing Sun FPA instructions for floating point.
4468
4469@item -msoft-float
4470Generate output containing library calls for floating point.
4471@strong{Warning:} the requisite libraries are not available for all m68k
4472targets. Normally the facilities of the machine's usual C compiler are
4473used, but this can't be done directly in cross-compilation. You must
4474make your own arrangements to provide suitable library functions for
4475cross-compilation. The embedded targets @samp{m68k-*-aout} and
4476@samp{m68k-*-coff} do provide software floating point support.
4477
4478@item -mshort
4479Consider type @code{int} to be 16 bits wide, like @code{short int}.
4480
4481@item -mnobitfield
74cf1c6d
RK
4482Do not use the bit-field instructions. The @samp{-m68000}, @samp{-mcpu32}
4483and @samp{-m5200} options imply @w{@samp{-mnobitfield}}.
74291a4b
MM
4484
4485@item -mbitfield
4486Do use the bit-field instructions. The @samp{-m68020} option implies
4487@samp{-mbitfield}. This is the default if you use a configuration
4488designed for a 68020.
4489
4490@item -mrtd
4491Use a different function-calling convention, in which functions
4492that take a fixed number of arguments return with the @code{rtd}
4493instruction, which pops their arguments while returning. This
4494saves one instruction in the caller since there is no need to pop
4495the arguments there.
4496
4497This calling convention is incompatible with the one normally
4498used on Unix, so you cannot use it if you need to call libraries
4499compiled with the Unix compiler.
4500
4501Also, you must provide function prototypes for all functions that
4502take variable numbers of arguments (including @code{printf});
4503otherwise incorrect code will be generated for calls to those
4504functions.
4505
4506In addition, seriously incorrect code will result if you call a
4507function with too many arguments. (Normally, extra arguments are
4508harmlessly ignored.)
4509
4510The @code{rtd} instruction is supported by the 68010, 68020, 68030,
74cf1c6d 451168040, 68060 and CPU32 processors, but not by the 68000 or 5200.
861bb6c1
JL
4512
4513@item -malign-int
4514@itemx -mno-align-int
0c2d1a2a 4515Control whether GCC aligns @code{int}, @code{long}, @code{long long},
861bb6c1
JL
4516@code{float}, @code{double}, and @code{long double} variables on a 32-bit
4517boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-mno-align-int}).
4518Aligning variables on 32-bit boundaries produces code that runs somewhat
4519faster on processors with 32-bit busses at the expense of more memory.
4520
0c2d1a2a 4521@strong{Warning:} if you use the @samp{-malign-int} switch, GCC will
861bb6c1
JL
4522align structures containing the above types differently than
4523most published application binary interface specifications for the m68k.
4524
fb868474
DL
4525@item -mpcrel
4526Use the pc-relative addressing mode of the 68000 directly, instead of
4527using a global offset table. At present, this option implies -fpic,
4528allowing at most a 16-bit offset for pc-relative addressing. -fPIC is
4529not presently supported with -mpcrel, though this could be supported for
453068020 and higher processors.
4531
b71733d5
GM
4532@item -mno-strict-align
4533@itemx -mstrict-align
4534@kindex -mstrict-align
4535Do not (do) assume that unaligned memory references will be handled by
4536the system.
4537
74291a4b
MM
4538@end table
4539
2856c3e3
SC
4540@node M68hc1x Options
4541@subsection M68hc1x Options
4542@cindex M68hc1x options
4543
4544These are the @samp{-m} options defined for the 68hc11 and 68hc12
4545microcontrollers. The default values for these options depends on
4546which style of microcontroller was selected when the compiler was configured;
4547the defaults for the most common choices are given below.
4548
2642624b 4549@table @gcctabopt
2856c3e3
SC
4550@item -m6811
4551@itemx -m68hc11
4552Generate output for a 68HC11. This is the default
4553when the compiler is configured for 68HC11-based systems.
4554
4555@item -m6812
4556@itemx -m68hc12
4557Generate output for a 68HC12. This is the default
4558when the compiler is configured for 68HC12-based systems.
4559
4560@item -mauto-incdec
4561Enable the use of 68HC12 pre and post auto-increment and auto-decrement
4562addressing modes.
4563
4564@item -mshort
4565Consider type @code{int} to be 16 bits wide, like @code{short int}.
4566
4567@item -msoft-reg-count=@var{count}
4568Specify the number of pseudo-soft registers which are used for the
4569code generation. The maximum number is 32. Using more pseudo-soft
4570register may or may not result in better code depending on the program.
4571The default is 4 for 68HC11 and 2 for 68HC12.
4572
4573@end table
4574
74291a4b
MM
4575@node VAX Options
4576@subsection VAX Options
4577@cindex VAX options
4578
4579These @samp{-m} options are defined for the Vax:
4580
2642624b 4581@table @gcctabopt
74291a4b
MM
4582@item -munix
4583Do not output certain jump instructions (@code{aobleq} and so on)
4584that the Unix assembler for the Vax cannot handle across long
4585ranges.
4586
4587@item -mgnu
4588Do output those jump instructions, on the assumption that you
4589will assemble with the GNU assembler.
4590
4591@item -mg
4592Output code for g-format floating point numbers instead of d-format.
4593@end table
4594
4595@node SPARC Options
4596@subsection SPARC Options
4597@cindex SPARC options
4598
4599These @samp{-m} switches are supported on the SPARC:
4600
2642624b 4601@table @gcctabopt
74291a4b
MM
4602@item -mno-app-regs
4603@itemx -mapp-regs
4604Specify @samp{-mapp-regs} to generate output using the global registers
46052 through 4, which the SPARC SVR4 ABI reserves for applications. This
4606is the default.
4607
4608To be fully SVR4 ABI compliant at the cost of some performance loss,
4609specify @samp{-mno-app-regs}. You should compile libraries and system
4610software with this option.
4611
4612@item -mfpu
4613@itemx -mhard-float
4614Generate output containing floating point instructions. This is the
4615default.
4616
4617@item -mno-fpu
4618@itemx -msoft-float
4619Generate output containing library calls for floating point.
4620@strong{Warning:} the requisite libraries are not available for all SPARC
4621targets. Normally the facilities of the machine's usual C compiler are
4622used, but this cannot be done directly in cross-compilation. You must make
4623your own arrangements to provide suitable library functions for
4624cross-compilation. The embedded targets @samp{sparc-*-aout} and
4625@samp{sparclite-*-*} do provide software floating point support.
4626
4627@samp{-msoft-float} changes the calling convention in the output file;
4628therefore, it is only useful if you compile @emph{all} of a program with
4629this option. In particular, you need to compile @file{libgcc.a}, the
0c2d1a2a 4630library that comes with GCC, with @samp{-msoft-float} in order for
74291a4b
MM
4631this to work.
4632
4633@item -mhard-quad-float
4634Generate output containing quad-word (long double) floating point
4635instructions.
4636
4637@item -msoft-quad-float
4638Generate output containing library calls for quad-word (long double)
4639floating point instructions. The functions called are those specified
4640in the SPARC ABI. This is the default.
4641
4642As of this writing, there are no sparc implementations that have hardware
4643support for the quad-word floating point instructions. They all invoke
4644a trap handler for one of these instructions, and then the trap handler
4645emulates the effect of the instruction. Because of the trap handler overhead,
4646this is much slower than calling the ABI library routines. Thus the
4647@samp{-msoft-quad-float} option is the default.
4648
4649@item -mno-epilogue
4650@itemx -mepilogue
4651With @samp{-mepilogue} (the default), the compiler always emits code for
4652function exit at the end of each function. Any function exit in
4653the middle of the function (such as a return statement in C) will
4654generate a jump to the exit code at the end of the function.
4655
4656With @samp{-mno-epilogue}, the compiler tries to emit exit code inline
4657at every function exit.
4658
4659@item -mno-flat
4660@itemx -mflat
4661With @samp{-mflat}, the compiler does not generate save/restore instructions
4662and will use a "flat" or single register window calling convention.
4663This model uses %i7 as the frame pointer and is compatible with the normal
4664register window model. Code from either may be intermixed.
4665The local registers and the input registers (0-5) are still treated as
4666"call saved" registers and will be saved on the stack as necessary.
4667
4668With @samp{-mno-flat} (the default), the compiler emits save/restore
4669instructions (except for leaf functions) and is the normal mode of operation.
4670
4671@item -mno-unaligned-doubles
4672@itemx -munaligned-doubles
4673Assume that doubles have 8 byte alignment. This is the default.
4674
0c2d1a2a 4675With @samp{-munaligned-doubles}, GCC assumes that doubles have 8 byte
74291a4b
MM
4676alignment only if they are contained in another type, or if they have an
4677absolute address. Otherwise, it assumes they have 4 byte alignment.
4678Specifying this option avoids some rare compatibility problems with code
4679generated by other compilers. It is not the default because it results
4680in a performance loss, especially for floating point code.
4681
c219ddf7
BK
4682@item -mno-faster-structs
4683@itemx -mfaster-structs
4684With @samp{-mfaster-structs}, the compiler assumes that structures
4685should have 8 byte alignment. This enables the use of pairs of
4686@code{ldd} and @code{std} instructions for copies in structure
4687assignment, in place of twice as many @code{ld} and @code{st} pairs.
4688However, the use of this changed alignment directly violates the Sparc
4689ABI. Thus, it's intended only for use on targets where the developer
4690acknowledges that their resulting code will not be directly in line with
4691the rules of the ABI.
4692
74291a4b
MM
4693@item -mv8
4694@itemx -msparclite
4695These two options select variations on the SPARC architecture.
4696
4697By default (unless specifically configured for the Fujitsu SPARClite),
4698GCC generates code for the v7 variant of the SPARC architecture.
4699
4700@samp{-mv8} will give you SPARC v8 code. The only difference from v7
4701code is that the compiler emits the integer multiply and integer
4702divide instructions which exist in SPARC v8 but not in SPARC v7.
4703
4704@samp{-msparclite} will give you SPARClite code. This adds the integer
4705multiply, integer divide step and scan (@code{ffs}) instructions which
4706exist in SPARClite but not in SPARC v7.
4707
0c2d1a2a 4708These options are deprecated and will be deleted in a future GCC release.
74291a4b
MM
4709They have been replaced with @samp{-mcpu=xxx}.
4710
4711@item -mcypress
4712@itemx -msupersparc
4713These two options select the processor for which the code is optimised.
4714
4715With @samp{-mcypress} (the default), the compiler optimizes code for the
4716Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series.
4717This is also appropriate for the older SparcStation 1, 2, IPX etc.
4718
4719With @samp{-msupersparc} the compiler optimizes code for the SuperSparc cpu, as
4720used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
4721of the full SPARC v8 instruction set.
4722
0c2d1a2a 4723These options are deprecated and will be deleted in a future GCC release.
74291a4b
MM
4724They have been replaced with @samp{-mcpu=xxx}.
4725
4726@item -mcpu=@var{cpu_type}
c0498f43
DE
4727Set the instruction set, register set, and instruction scheduling parameters
4728for machine type @var{cpu_type}. Supported values for @var{cpu_type} are
4729@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
ad6843d7
RH
4730@samp{hypersparc}, @samp{sparclite86x}, @samp{f930}, @samp{f934},
4731@samp{sparclet}, @samp{tsc701}, @samp{v9}, and @samp{ultrasparc}.
c0498f43
DE
4732
4733Default instruction scheduling parameters are used for values that select
4734an architecture and not an implementation. These are @samp{v7}, @samp{v8},
4735@samp{sparclite}, @samp{sparclet}, @samp{v9}.
4736
4737Here is a list of each supported architecture and their supported
4738implementations.
4739
4740@smallexample
4741 v7: cypress
ad6843d7
RH
4742 v8: supersparc, hypersparc
4743 sparclite: f930, f934, sparclite86x
c0498f43
DE
4744 sparclet: tsc701
4745 v9: ultrasparc
4746@end smallexample
74291a4b
MM
4747
4748@item -mtune=@var{cpu_type}
4749Set the instruction scheduling parameters for machine type
c0498f43
DE
4750@var{cpu_type}, but do not set the instruction set or register set that the
4751option @samp{-mcpu=}@var{cpu_type} would.
4752
4753The same values for @samp{-mcpu=}@var{cpu_type} are used for
e5e809f4 4754@samp{-mtune=}@*@var{cpu_type}, though the only useful values are those that
c0498f43 4755select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
ad6843d7
RH
4756@samp{hypersparc}, @samp{f930}, @samp{f934}, @samp{sparclite86x},
4757@samp{tsc701}, @samp{ultrasparc}.
74291a4b
MM
4758
4759@end table
4760
4761These @samp{-m} switches are supported in addition to the above
4762on the SPARCLET processor.
4763
2642624b 4764@table @gcctabopt
74291a4b
MM
4765@item -mlittle-endian
4766Generate code for a processor running in little-endian mode.
4767
4768@item -mlive-g0
4769Treat register @code{%g0} as a normal register.
4770GCC will continue to clobber it as necessary but will not assume
4771it always reads as 0.
4772
4773@item -mbroken-saverestore
4774Generate code that does not use non-trivial forms of the @code{save} and
4775@code{restore} instructions. Early versions of the SPARCLET processor do
4776not correctly handle @code{save} and @code{restore} instructions used with
4777arguments. They correctly handle them used without arguments. A @code{save}
4778instruction used without arguments increments the current window pointer
4779but does not allocate a new stack frame. It is assumed that the window
4780overflow trap handler will properly handle this case as will interrupt
4781handlers.
4782@end table
4783
4784These @samp{-m} switches are supported in addition to the above
4785on SPARC V9 processors in 64 bit environments.
4786
2642624b 4787@table @gcctabopt
74291a4b
MM
4788@item -mlittle-endian
4789Generate code for a processor running in little-endian mode.
4790
ded17aad
DE
4791@item -m32
4792@itemx -m64
4793Generate code for a 32 bit or 64 bit environment.
4794The 32 bit environment sets int, long and pointer to 32 bits.
4795The 64 bit environment sets int to 32 bits and long and pointer
4796to 64 bits.
4797
4798@item -mcmodel=medlow
4799Generate code for the Medium/Low code model: the program must be linked
4800in the low 32 bits of the address space. Pointers are 64 bits.
4801Programs can be statically or dynamically linked.
4802
4803@item -mcmodel=medmid
4804Generate code for the Medium/Middle code model: the program must be linked
4805in the low 44 bits of the address space, the text segment must be less than
48062G bytes, and data segment must be within 2G of the text segment.
4807Pointers are 64 bits.
4808
4809@item -mcmodel=medany
4810Generate code for the Medium/Anywhere code model: the program may be linked
4811anywhere in the address space, the text segment must be less than
48122G bytes, and data segment must be within 2G of the text segment.
4813Pointers are 64 bits.
4814
4815@item -mcmodel=embmedany
4816Generate code for the Medium/Anywhere code model for embedded systems:
4817assume a 32 bit text and a 32 bit data segment, both starting anywhere
4818(determined at link time). Register %g4 points to the base of the
4819data segment. Pointers still 64 bits.
4820Programs are statically linked, PIC is not supported.
74291a4b
MM
4821
4822@item -mstack-bias
4823@itemx -mno-stack-bias
0c2d1a2a 4824With @samp{-mstack-bias}, GCC assumes that the stack pointer, and
74291a4b
MM
4825frame pointer if present, are offset by -2047 which must be added back
4826when making stack frame references.
4827Otherwise, assume no such offset is present.
4828@end table
4829
4830@node Convex Options
4831@subsection Convex Options
4832@cindex Convex options
4833
4834These @samp{-m} options are defined for Convex:
4835
2642624b 4836@table @gcctabopt
74291a4b
MM
4837@item -mc1
4838Generate output for C1. The code will run on any Convex machine.
4839The preprocessor symbol @code{__convex__c1__} is defined.
4840
4841@item -mc2
4842Generate output for C2. Uses instructions not available on C1.
4843Scheduling and other optimizations are chosen for max performance on C2.
4844The preprocessor symbol @code{__convex_c2__} is defined.
4845
4846@item -mc32
4847Generate output for C32xx. Uses instructions not available on C1.
4848Scheduling and other optimizations are chosen for max performance on C32.
4849The preprocessor symbol @code{__convex_c32__} is defined.
4850
4851@item -mc34
4852Generate output for C34xx. Uses instructions not available on C1.
4853Scheduling and other optimizations are chosen for max performance on C34.
4854The preprocessor symbol @code{__convex_c34__} is defined.
4855
4856@item -mc38
4857Generate output for C38xx. Uses instructions not available on C1.
4858Scheduling and other optimizations are chosen for max performance on C38.
4859The preprocessor symbol @code{__convex_c38__} is defined.
4860
4861@item -margcount
4862Generate code which puts an argument count in the word preceding each
4863argument list. This is compatible with regular CC, and a few programs
4864may need the argument count word. GDB and other source-level debuggers
4865do not need it; this info is in the symbol table.
4866
4867@item -mnoargcount
4868Omit the argument count word. This is the default.
4869
4870@item -mvolatile-cache
4871Allow volatile references to be cached. This is the default.
4872
4873@item -mvolatile-nocache
4874Volatile references bypass the data cache, going all the way to memory.
4875This is only needed for multi-processor code that does not use standard
4876synchronization instructions. Making non-volatile references to volatile
4877locations will not necessarily work.
4878
4879@item -mlong32
4880Type long is 32 bits, the same as type int. This is the default.
4881
4882@item -mlong64
4883Type long is 64 bits, the same as type long long. This option is useless,
4884because no library support exists for it.
4885@end table
4886
4887@node AMD29K Options
4888@subsection AMD29K Options
4889@cindex AMD29K options
4890
4891These @samp{-m} options are defined for the AMD Am29000:
4892
2642624b 4893@table @gcctabopt
74291a4b
MM
4894@item -mdw
4895@kindex -mdw
4896@cindex DW bit (29k)
4897Generate code that assumes the @code{DW} bit is set, i.e., that byte and
4898halfword operations are directly supported by the hardware. This is the
4899default.
4900
4901@item -mndw
4902@kindex -mndw
4903Generate code that assumes the @code{DW} bit is not set.
4904
4905@item -mbw
4906@kindex -mbw
4907@cindex byte writes (29k)
4908Generate code that assumes the system supports byte and halfword write
4909operations. This is the default.
4910
4911@item -mnbw
4912@kindex -mnbw
4913Generate code that assumes the systems does not support byte and
4914halfword write operations. @samp{-mnbw} implies @samp{-mndw}.
4915
4916@item -msmall
4917@kindex -msmall
4918@cindex memory model (29k)
4919Use a small memory model that assumes that all function addresses are
4920either within a single 256 KB segment or at an absolute address of less
4921than 256k. This allows the @code{call} instruction to be used instead
4922of a @code{const}, @code{consth}, @code{calli} sequence.
4923
4924@item -mnormal
4925@kindex -mnormal
4926Use the normal memory model: Generate @code{call} instructions only when
4927calling functions in the same file and @code{calli} instructions
4928otherwise. This works if each file occupies less than 256 KB but allows
4929the entire executable to be larger than 256 KB. This is the default.
4930
4931@item -mlarge
4932Always use @code{calli} instructions. Specify this option if you expect
4933a single file to compile into more than 256 KB of code.
4934
4935@item -m29050
4936@kindex -m29050
4937@cindex processor selection (29k)
4938Generate code for the Am29050.
4939
4940@item -m29000
4941@kindex -m29000
4942Generate code for the Am29000. This is the default.
4943
4944@item -mkernel-registers
4945@kindex -mkernel-registers
4946@cindex kernel and user registers (29k)
4947Generate references to registers @code{gr64-gr95} instead of to
4948registers @code{gr96-gr127}. This option can be used when compiling
4949kernel code that wants a set of global registers disjoint from that used
4950by user-mode code.
4951
4952Note that when this option is used, register names in @samp{-f} flags
4953must use the normal, user-mode, names.
4954
4955@item -muser-registers
4956@kindex -muser-registers
4957Use the normal set of global registers, @code{gr96-gr127}. This is the
4958default.
4959
4960@item -mstack-check
4961@itemx -mno-stack-check
4962@kindex -mstack-check
4963@cindex stack checks (29k)
4964Insert (or do not insert) a call to @code{__msp_check} after each stack
4965adjustment. This is often used for kernel code.
4966
4967@item -mstorem-bug
4968@itemx -mno-storem-bug
4969@kindex -mstorem-bug
4970@cindex storem bug (29k)
4971@samp{-mstorem-bug} handles 29k processors which cannot handle the
4972separation of a mtsrim insn and a storem instruction (most 29000 chips
4973to date, but not the 29050).
4974
4975@item -mno-reuse-arg-regs
4976@itemx -mreuse-arg-regs
4977@kindex -mreuse-arg-regs
4978@samp{-mno-reuse-arg-regs} tells the compiler to only use incoming argument
4979registers for copying out arguments. This helps detect calling a function
4980with fewer arguments than it was declared with.
4981
861bb6c1
JL
4982@item -mno-impure-text
4983@itemx -mimpure-text
4984@kindex -mimpure-text
4985@samp{-mimpure-text}, used in addition to @samp{-shared}, tells the compiler to
4986not pass @samp{-assert pure-text} to the linker when linking a shared object.
4987
74291a4b
MM
4988@item -msoft-float
4989@kindex -msoft-float
4990Generate output containing library calls for floating point.
0c2d1a2a 4991@strong{Warning:} the requisite libraries are not part of GCC.
74291a4b
MM
4992Normally the facilities of the machine's usual C compiler are used, but
4993this can't be done directly in cross-compilation. You must make your
4994own arrangements to provide suitable library functions for
4995cross-compilation.
4e8d7ddc
JW
4996
4997@item -mno-multm
4998@kindex -mno-multm
4999Do not generate multm or multmu instructions. This is useful for some embedded
5000systems which do not have trap handlers for these instructions.
74291a4b
MM
5001@end table
5002
5003@node ARM Options
5004@subsection ARM Options
5005@cindex ARM options
5006
5007These @samp{-m} options are defined for Advanced RISC Machines (ARM)
5008architectures:
5009
2642624b 5010@table @gcctabopt
74291a4b
MM
5011@item -mapcs-frame
5012@kindex -mapcs-frame
5013Generate a stack frame that is compliant with the ARM Procedure Call
5014Standard for all functions, even if this is not strictly necessary for
157a620e
NC
5015correct execution of the code. Specifying @samp{-fomit-frame-pointer}
5016with this option will cause the stack frames not to be generated for
5017leaf functions. The default is @samp{-mno-apcs-frame}.
5018
5019@item -mapcs
5020@kindex -mapcs
5021This is a synonym for @samp{-mapcs-frame}.
74291a4b
MM
5022
5023@item -mapcs-26
5024@kindex -mapcs-26
5025Generate code for a processor running with a 26-bit program counter,
5026and conforming to the function calling standards for the APCS 26-bit
5027option. This option replaces the @samp{-m2} and @samp{-m3} options
5028of previous releases of the compiler.
5029
5030@item -mapcs-32
5031@kindex -mapcs-32
5032Generate code for a processor running with a 32-bit program counter,
5033and conforming to the function calling standards for the APCS 32-bit
5034option. This option replaces the @samp{-m6} option of previous releases
5035of the compiler.
5036
157a620e
NC
5037@item -mapcs-stack-check
5038@kindex -mapcs-stack-check
5039@kindex -mno-apcs-stack-check
5040Generate code to check the amount of stack space available upon entry to
5041every function (that actually uses some stack space). If there is
5042insufficient space available then either the function
5043@samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
5044called, depending upon the amount of stack space required. The run time
5045system is required to provide these functions. The default is
5046@samp{-mno-apcs-stack-check}, since this produces smaller code.
5047
5048@item -mapcs-float
5049@kindex -mapcs-float
5050@kindex -mno-apcs-float
5051Pass floating point arguments using the float point registers. This is
ed0e6530 5052one of the variants of the APCS. This option is recommended if the
157a620e
NC
5053target hardware has a floating point unit or if a lot of floating point
5054arithmetic is going to be performed by the code. The default is
5055@samp{-mno-apcs-float}, since integer only code is slightly increased in
5056size if @samp{-mapcs-float} is used.
5057
5058@item -mapcs-reentrant
5059@kindex -mapcs-reentrant
5060@kindex -mno-apcs-reentrant
5061Generate reentrant, position independent code. This is the equivalent
5062to specifying the @samp{-fpic} option. The default is
5063@samp{-mno-apcs-reentrant}.
5064
5065@item -mthumb-interwork
5066@kindex -mthumb-interwork
5067@kindex -mno-thumb-interwork
5068Generate code which supports calling between the ARM and THUMB
5069instruction sets. Without this option the two instruction sets cannot
5070be reliably used inside one program. The default is
5071@samp{-mno-thumb-interwork}, since slightly larger code is generated
5072when @samp{-mthumb-interwork} is specified.
5073
5074@item -mno-sched-prolog
5075@kindex -mno-sched-prolog
5076@kindex -msched-prolog
5077Prevent the reordering of instructions in the function prolog, or the
5078merging of those instruction with the instructions in the function's
ed0e6530
PB
5079body. This means that all functions will start with a recognizable set
5080of instructions (or in fact one of a choice from a small set of
157a620e
NC
5081different function prologues), and this information can be used to
5082locate the start if functions inside an executable piece of code. The
5083default is @samp{-msched-prolog}.
5084
74291a4b
MM
5085@item -mhard-float
5086Generate output containing floating point instructions. This is the
5087default.
5088
5089@item -msoft-float
5090Generate output containing library calls for floating point.
5091@strong{Warning:} the requisite libraries are not available for all ARM
5092targets. Normally the facilities of the machine's usual C compiler are
5093used, but this cannot be done directly in cross-compilation. You must make
5094your own arrangements to provide suitable library functions for
5095cross-compilation.
5096
5097@samp{-msoft-float} changes the calling convention in the output file;
5098therefore, it is only useful if you compile @emph{all} of a program with
5099this option. In particular, you need to compile @file{libgcc.a}, the
0c2d1a2a 5100library that comes with GCC, with @samp{-msoft-float} in order for
74291a4b
MM
5101this to work.
5102
5103@item -mlittle-endian
5104Generate code for a processor running in little-endian mode. This is
5105the default for all standard configurations.
5106
5107@item -mbig-endian
5108Generate code for a processor running in big-endian mode; the default is
5109to compile code for a little-endian processor.
5110
5111@item -mwords-little-endian
5112This option only applies when generating code for big-endian processors.
5113Generate code for a little-endian word order but a big-endian byte
5114order. That is, a byte order of the form @samp{32107654}. Note: this
5115option should only be used if you require compatibility with code for
5116big-endian ARM processors generated by versions of the compiler prior to
51172.8.
5118
5f1e6755
NC
5119@item -malignment-traps
5120@kindex -malignment-traps
5121Generate code that will not trap if the MMU has alignment traps enabled.
5122On ARM architectures prior to ARMv4, there were no instructions to
5123access half-word objects stored in memory. However, when reading from
5124memory a feature of the ARM architecture allows a word load to be used,
5125even if the address is unaligned, and the processor core will rotate the
5126data as it is being loaded. This option tells the compiler that such
5127misaligned accesses will cause a MMU trap and that it should instead
5128synthesise the access as a series of byte accesses. The compiler can
5129still use word accesses to load half-word data if it knows that the
5130address is aligned to a word boundary.
5131
5132This option is ignored when compiling for ARM architecture 4 or later,
5133since these processors have instructions to directly access half-word
5134objects in memory.
5135
5136@item -mno-alignment-traps
5137@kindex -mno-alignment-traps
5138Generate code that assumes that the MMU will not trap unaligned
5139accesses. This produces better code when the target instruction set
5140does not have half-word memory operations (implementations prior to
5141ARMv4).
5142
5143Note that you cannot use this option to access unaligned word objects,
5144since the processor will only fetch one 32-bit aligned object from
5145memory.
5146
5147The default setting for most targets is -mno-alignment-traps, since
5148this produces better code when there are no half-word memory
5149instructions available.
5150
74291a4b
MM
5151@item -mshort-load-bytes
5152@kindex -mshort-load-bytes
9e8fc4b8 5153This is a deprecated alias for @samp{-malignment-traps}.
74291a4b
MM
5154
5155@item -mno-short-load-bytes
5156@kindex -mno-short-load-bytes
9e8fc4b8 5157This is a deprecated alias for @samp{-mno-alignment-traps}.
74291a4b 5158
157a620e
NC
5159@item -mshort-load-words
5160@kindex -mshort-load-words
9e8fc4b8 5161This is a deprecated alias for @samp{-mno-alignment-traps}.
157a620e
NC
5162
5163@item -mno-short-load-words
5164@kindex -mno-short-load-words
9e8fc4b8 5165This is a deprecated alias for @samp{-malignment-traps}.
157a620e 5166
74291a4b
MM
5167@item -mbsd
5168@kindex -mbsd
5169This option only applies to RISC iX. Emulate the native BSD-mode
5170compiler. This is the default if @samp{-ansi} is not specified.
5171
5172@item -mxopen
5173@kindex -mxopen
5174This option only applies to RISC iX. Emulate the native X/Open-mode
5175compiler.
5176
5177@item -mno-symrename
5178@kindex -mno-symrename
5179This option only applies to RISC iX. Do not run the assembler
5180post-processor, @samp{symrename}, after code has been assembled.
5181Normally it is necessary to modify some of the standard symbols in
5182preparation for linking with the RISC iX C library; this option
5183suppresses this pass. The post-processor is never run when the
5184compiler is built for cross-compilation.
157a620e
NC
5185
5186@item -mcpu=<name>
5187@kindex -mcpu=
5188This specifies the name of the target ARM processor. GCC uses this name
5189to determine what kind of instructions it can use when generating
ed0e6530 5190assembly code. Permissible names are: arm2, arm250, arm3, arm6, arm60,
157a620e
NC
5191arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi,
5192arm70, arm700, arm700i, arm710, arm710c, arm7100, arm7500, arm7500fe,
f5a1b0d2 5193arm7tdmi, arm8, strongarm, strongarm110, strongarm1100, arm8, arm810,
62b10bbc
NC
5194arm9, arm920, arm920t, arm9tdmi.
5195
5196@itemx -mtune=<name>
5197@kindex -mtune=
5198This option is very similar to the @samp{-mcpu=} option, except that
5199instead of specifying the actual target processor type, and hence
5200restricting which instructions can be used, it specifies that GCC should
5201tune the performance of the code as if the target were of the type
5202specified in this option, but still choosing the instructions that it
5203will generate based on the cpu specified by a @samp{-mcpu=} option.
5204For some arm implementations better performance can be obtained by using
5205this option.
157a620e
NC
5206
5207@item -march=<name>
5208@kindex -march=
5209This specifies the name of the target ARM architecture. GCC uses this
5210name to determine what kind of instructions it can use when generating
5211assembly code. This option can be used in conjunction with or instead
ed0e6530 5212of the @samp{-mcpu=} option. Permissible names are: armv2, armv2a,
62b10bbc 5213armv3, armv3m, armv4, armv4t, armv5.
157a620e
NC
5214
5215@item -mfpe=<number>
59d40964 5216@itemx -mfp=<number>
157a620e 5217@kindex -mfpe=
f5a1b0d2 5218@kindex -mfp=
b192711e 5219This specifies the version of the floating point emulation available on
ed0e6530 5220the target. Permissible values are 2 and 3. @samp{-mfp=} is a synonym
f5a1b0d2 5221for @samp{-mfpe=} to support older versions of GCC.
157a620e
NC
5222
5223@item -mstructure-size-boundary=<n>
5224@kindex -mstructure-size-boundary
5225The size of all structures and unions will be rounded up to a multiple
ed0e6530 5226of the number of bits set by this option. Permissible values are 8 and
157a620e
NC
522732. The default value varies for different toolchains. For the COFF
5228targeted toolchain the default value is 8. Specifying the larger number
ed0e6530 5229can produce faster, more efficient code, but can also increase the size
157a620e
NC
5230of the program. The two values are potentially incompatible. Code
5231compiled with one value cannot necessarily expect to work with code or
5232libraries compiled with the other value, if they exchange information
5233using structures or unions. Programmers are encouraged to use the 32
5234value as future versions of the toolchain may default to this value.
5235
f5a1b0d2
NC
5236@item -mabort-on-noreturn
5237@kindex -mabort-on-noreturn
5238@kindex -mnoabort-on-noreturn
5239Generate a call to the function abort at the end of a noreturn function.
5240It will be executed if the function tries to return.
5241
c27ba912
DM
5242@item -mlong-calls
5243@itemx -mno-long-calls
5244Tells the compiler to perform function calls by first loading the
5245address of the function into a register and then performing a subroutine
5246call on this register. This switch is needed if the target function
5247will lie outside of the 64 megabyte addressing range of the offset based
5248version of subroutine call instruction.
5249
5250Even if this switch is enabled, not all function calls will be turned
5251into long calls. The heuristic is that static functions, functions
5252which have the @samp{short-call} attribute, functions that are inside
5253the scope of a @samp{#pragma no_long_calls} directive and functions whose
5254definitions have already been compiled within the current compilation
5255unit, will not be turned into long calls. The exception to this rule is
b192711e 5256that weak function definitions, functions with the @samp{long-call}
c27ba912
DM
5257attribute or the @samp{section} attribute, and functions that are within
5258the scope of a @samp{#pragma long_calls} directive, will always be
5259turned into long calls.
5260
5261This feature is not enabled by default. Specifying
5262@samp{--no-long-calls} will restore the default behaviour, as will
5263placing the function calls within the scope of a @samp{#pragma
5264long_calls_off} directive. Note these switches have no effect on how
5265the compiler generates code to handle function calls via function
5266pointers.
5267
62b10bbc
NC
5268@item -mnop-fun-dllimport
5269@kindex -mnop-fun-dllimport
5270Disable the support for the @emph{dllimport} attribute.
5271
ed0e6530
PB
5272@item -msingle-pic-base
5273@kindex -msingle-pic-base
5274Treat the register used for PIC addressing as read-only, rather than
5275loading it in the prologue for each function. The run-time system is
5276responsible for initialising this register with an appropriate value
5277before execution begins.
5278
5279@item -mpic-register=<reg>
5280@kindex -mpic-register=
5281Specify the register to be used for PIC addressing. The default is R10
5282unless stack-checking is enabled, when R9 is used.
5283
74291a4b
MM
5284@end table
5285
157a620e
NC
5286@node Thumb Options
5287@subsection Thumb Options
5288@cindex Thumb Options
5289
2642624b 5290@table @gcctabopt
157a620e
NC
5291
5292@item -mthumb-interwork
5293@kindex -mthumb-interwork
5294@kindex -mno-thumb-interwork
5295Generate code which supports calling between the THUMB and ARM
5296instruction sets. Without this option the two instruction sets cannot
5297be reliably used inside one program. The default is
5298@samp{-mno-thumb-interwork}, since slightly smaller code is generated
5299with this option.
5300
5301@item -mtpcs-frame
5302@kindex -mtpcs-frame
5303@kindex -mno-tpcs-frame
5304Generate a stack frame that is compliant with the Thumb Procedure Call
5305Standard for all non-leaf functions. (A leaf function is one that does
5306not call any other functions). The default is @samp{-mno-apcs-frame}.
5307
5308@item -mtpcs-leaf-frame
5309@kindex -mtpcs-leaf-frame
5310@kindex -mno-tpcs-leaf-frame
5311Generate a stack frame that is compliant with the Thumb Procedure Call
5312Standard for all leaf functions. (A leaf function is one that does
5313not call any other functions). The default is @samp{-mno-apcs-leaf-frame}.
5314
5315@item -mlittle-endian
5316@kindex -mlittle-endian
5317Generate code for a processor running in little-endian mode. This is
5318the default for all standard configurations.
5319
5320@item -mbig-endian
5321@kindex -mbig-endian
5322Generate code for a processor running in big-endian mode.
5323
5324@item -mstructure-size-boundary=<n>
5325@kindex -mstructure-size-boundary
5326The size of all structures and unions will be rounded up to a multiple
4bdc1ac7 5327of the number of bits set by this option. Permissible values are 8 and
157a620e
NC
532832. The default value varies for different toolchains. For the COFF
5329targeted toolchain the default value is 8. Specifying the larger number
5330can produced faster, more efficient code, but can also increase the size
5331of the program. The two values are potentially incompatible. Code
5332compiled with one value cannot necessarily expect to work with code or
5333libraries compiled with the other value, if they exchange information
5334using structures or unions. Programmers are encouraged to use the 32
5335value as future versions of the toolchain may default to this value.
5336
62b10bbc
NC
5337@item -mnop-fun-dllimport
5338@kindex -mnop-fun-dllimport
5339Disable the support for the @emph{dllimport} attribute.
5340
5341@item -mcallee-super-interworking
5342@kindex -mcallee-super-interworking
5343Gives all externally visible functions in the file being compiled an ARM
5344instruction set header which switches to Thumb mode before executing the
5345rest of the function. This allows these functions to be called from
5346non-interworking code.
5347
5348@item -mcaller-super-interworking
5349@kindex -mcaller-super-interworking
5350Allows calls via function pointers (including virtual functions) to
5351execute correctly regardless of whether the target code has been
5352compiled for interworking or not. There is a small overhead in the cost
4bdc1ac7
PB
5353of executing a function pointer if this option is enabled.
5354
5355@item -msingle-pic-base
5356@kindex -msingle-pic-base
5357Treat the register used for PIC addressing as read-only, rather than
5358loading it in the prologue for each function. The run-time system is
5359responsible for initialising this register with an appropriate value
5360before execution begins.
5361
5362@item -mpic-register=<reg>
5363@kindex -mpic-register=
5364Specify the register to be used for PIC addressing. The default is R10.
62b10bbc 5365
157a620e
NC
5366@end table
5367
ecff22ab
JL
5368@node MN10200 Options
5369@subsection MN10200 Options
5370@cindex MN10200 options
5371These @samp{-m} options are defined for Matsushita MN10200 architectures:
2642624b 5372@table @gcctabopt
ecff22ab
JL
5373
5374@item -mrelax
5375Indicate to the linker that it should perform a relaxation optimization pass
5376to shorten branches, calls and absolute memory addresses. This option only
5377has an effect when used on the command line for the final link step.
5378
5379This option makes symbolic debugging impossible.
5380@end table
157a620e 5381
6d6d0fa0
JL
5382@node MN10300 Options
5383@subsection MN10300 Options
5384@cindex MN10300 options
5385These @samp{-m} options are defined for Matsushita MN10300 architectures:
5386
2642624b 5387@table @gcctabopt
6d6d0fa0
JL
5388@item -mmult-bug
5389Generate code to avoid bugs in the multiply instructions for the MN10300
5390processors. This is the default.
5391
5392@item -mno-mult-bug
5393Do not generate code to avoid bugs in the multiply instructions for the
5394MN10300 processors.
ecff22ab 5395
705ac34f
JL
5396@item -mam33
5397Generate code which uses features specific to the AM33 processor.
5398
5399@item -mno-am33
5400Do not generate code which uses features specific to the AM33 processor. This
5401is the default.
5402
ecff22ab
JL
5403@item -mrelax
5404Indicate to the linker that it should perform a relaxation optimization pass
5405to shorten branches, calls and absolute memory addresses. This option only
5406has an effect when used on the command line for the final link step.
5407
5408This option makes symbolic debugging impossible.
6d6d0fa0
JL
5409@end table
5410
ecff22ab 5411
861bb6c1
JL
5412@node M32R/D Options
5413@subsection M32R/D Options
5414@cindex M32R/D options
5415
5416These @samp{-m} options are defined for Mitsubishi M32R/D architectures:
5417
2642624b 5418@table @gcctabopt
861bb6c1
JL
5419@item -mcode-model=small
5420Assume all objects live in the lower 16MB of memory (so that their addresses
5421can be loaded with the @code{ld24} instruction), and assume all subroutines
5422are reachable with the @code{bl} instruction.
5423This is the default.
5424
5425The addressability of a particular object can be set with the
5426@code{model} attribute.
5427
5428@item -mcode-model=medium
5429Assume objects may be anywhere in the 32 bit address space (the compiler
5430will generate @code{seth/add3} instructions to load their addresses), and
5431assume all subroutines are reachable with the @code{bl} instruction.
5432
5433@item -mcode-model=large
5434Assume objects may be anywhere in the 32 bit address space (the compiler
5435will generate @code{seth/add3} instructions to load their addresses), and
5436assume subroutines may not be reachable with the @code{bl} instruction
5437(the compiler will generate the much slower @code{seth/add3/jl}
5438instruction sequence).
5439
5440@item -msdata=none
5441Disable use of the small data area. Variables will be put into
5442one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
5443@code{section} attribute has been specified).
5444This is the default.
5445
5446The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
5447Objects may be explicitly put in the small data area with the
5448@code{section} attribute using one of these sections.
5449
5450@item -msdata=sdata
5451Put small global and static data in the small data area, but do not
5452generate special code to reference them.
5453
5454@item -msdata=use
5455Put small global and static data in the small data area, and generate
5456special instructions to reference them.
5457
5458@item -G @var{num}
5459@cindex smaller data references
5460Put global and static objects less than or equal to @var{num} bytes
5461into the small data or bss sections instead of the normal data or bss
5462sections. The default value of @var{num} is 8.
5463The @samp{-msdata} option must be set to one of @samp{sdata} or @samp{use}
5464for this option to have any effect.
5465
5466All modules should be compiled with the same @samp{-G @var{num}} value.
5467Compiling with different values of @var{num} may or may not work; if it
5468doesn't the linker will give an error message - incorrect code will not be
5469generated.
5470
5471@end table
5472
74291a4b
MM
5473@node M88K Options
5474@subsection M88K Options
5475@cindex M88k options
5476
5477These @samp{-m} options are defined for Motorola 88k architectures:
5478
2642624b 5479@table @gcctabopt
74291a4b
MM
5480@item -m88000
5481@kindex -m88000
5482Generate code that works well on both the m88100 and the
5483m88110.
5484
5485@item -m88100
5486@kindex -m88100
5487Generate code that works best for the m88100, but that also
5488runs on the m88110.
5489
5490@item -m88110
5491@kindex -m88110
5492Generate code that works best for the m88110, and may not run
5493on the m88100.
5494
5495@item -mbig-pic
5496@kindex -mbig-pic
5497Obsolete option to be removed from the next revision.
5498Use @samp{-fPIC}.
5499
5500@item -midentify-revision
5501@kindex -midentify-revision
5502@kindex ident
5503@cindex identifying source, compiler (88k)
5504Include an @code{ident} directive in the assembler output recording the
5505source file name, compiler name and version, timestamp, and compilation
5506flags used.
5507
5508@item -mno-underscores
5509@kindex -mno-underscores
5510@cindex underscores, avoiding (88k)
5511In assembler output, emit symbol names without adding an underscore
5512character at the beginning of each name. The default is to use an
5513underscore as prefix on each name.
5514
5515@item -mocs-debug-info
5516@itemx -mno-ocs-debug-info
5517@kindex -mocs-debug-info
5518@kindex -mno-ocs-debug-info
5519@cindex OCS (88k)
5520@cindex debugging, 88k OCS
5521Include (or omit) additional debugging information (about registers used
5522in each stack frame) as specified in the 88open Object Compatibility
5523Standard, ``OCS''. This extra information allows debugging of code that
5524has had the frame pointer eliminated. The default for DG/UX, SVr4, and
5525Delta 88 SVr3.2 is to include this information; other 88k configurations
5526omit this information by default.
5527
5528@item -mocs-frame-position
5529@kindex -mocs-frame-position
5530@cindex register positions in frame (88k)
5531When emitting COFF debugging information for automatic variables and
5532parameters stored on the stack, use the offset from the canonical frame
5533address, which is the stack pointer (register 31) on entry to the
5534function. The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
5535@samp{-mocs-frame-position}; other 88k configurations have the default
5536@samp{-mno-ocs-frame-position}.
5537
5538@item -mno-ocs-frame-position
5539@kindex -mno-ocs-frame-position
5540@cindex register positions in frame (88k)
5541When emitting COFF debugging information for automatic variables and
5542parameters stored on the stack, use the offset from the frame pointer
5543register (register 30). When this option is in effect, the frame
5544pointer is not eliminated when debugging information is selected by the
5545-g switch.
5546
5547@item -moptimize-arg-area
5548@itemx -mno-optimize-arg-area
5549@kindex -moptimize-arg-area
5550@kindex -mno-optimize-arg-area
5551@cindex arguments in frame (88k)
5552Control how function arguments are stored in stack frames.
5553@samp{-moptimize-arg-area} saves space by optimizing them, but this
5554conflicts with the 88open specifications. The opposite alternative,
5555@samp{-mno-optimize-arg-area}, agrees with 88open standards. By default
0c2d1a2a 5556GCC does not optimize the argument area.
74291a4b
MM
5557
5558@item -mshort-data-@var{num}
5559@kindex -mshort-data-@var{num}
5560@cindex smaller data references (88k)
5561@cindex r0-relative references (88k)
5562Generate smaller data references by making them relative to @code{r0},
5563which allows loading a value using a single instruction (rather than the
5564usual two). You control which data references are affected by
5565specifying @var{num} with this option. For example, if you specify
5566@samp{-mshort-data-512}, then the data references affected are those
5567involving displacements of less than 512 bytes.
5568@samp{-mshort-data-@var{num}} is not effective for @var{num} greater
5569than 64k.
5570
5571@item -mserialize-volatile
5572@kindex -mserialize-volatile
5573@itemx -mno-serialize-volatile
5574@kindex -mno-serialize-volatile
5575@cindex sequential consistency on 88k
5576Do, or don't, generate code to guarantee sequential consistency
5577of volatile memory references. By default, consistency is
5578guaranteed.
5579
5580The order of memory references made by the MC88110 processor does
5581not always match the order of the instructions requesting those
5582references. In particular, a load instruction may execute before
5583a preceding store instruction. Such reordering violates
5584sequential consistency of volatile memory references, when there
5585are multiple processors. When consistency must be guaranteed,
5586GNU C generates special instructions, as needed, to force
5587execution in the proper order.
5588
5589The MC88100 processor does not reorder memory references and so
5590always provides sequential consistency. However, by default, GNU
5591C generates the special instructions to guarantee consistency
5592even when you use @samp{-m88100}, so that the code may be run on an
5593MC88110 processor. If you intend to run your code only on the
5594MC88100 processor, you may use @samp{-mno-serialize-volatile}.
5595
5596The extra code generated to guarantee consistency may affect the
5597performance of your application. If you know that you can safely
5598forgo this guarantee, you may use @samp{-mno-serialize-volatile}.
5599
5600@item -msvr4
5601@itemx -msvr3
5602@kindex -msvr4
5603@kindex -msvr3
5604@cindex assembler syntax, 88k
5605@cindex SVr4
5606Turn on (@samp{-msvr4}) or off (@samp{-msvr3}) compiler extensions
5607related to System V release 4 (SVr4). This controls the following:
5608
5609@enumerate
5610@item
5611Which variant of the assembler syntax to emit.
5612@item
5613@samp{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
5614that is used on System V release 4.
5615@item
0c2d1a2a 5616@samp{-msvr4} makes GCC issue additional declaration directives used in
74291a4b
MM
5617SVr4.
5618@end enumerate
5619
5620@samp{-msvr4} is the default for the m88k-motorola-sysv4 and
5621m88k-dg-dgux m88k configurations. @samp{-msvr3} is the default for all
5622other m88k configurations.
5623
5624@item -mversion-03.00
5625@kindex -mversion-03.00
5626This option is obsolete, and is ignored.
5627@c ??? which asm syntax better for GAS? option there too?
5628
5629@item -mno-check-zero-division
5630@itemx -mcheck-zero-division
5631@kindex -mno-check-zero-division
5632@kindex -mcheck-zero-division
5633@cindex zero division on 88k
5634Do, or don't, generate code to guarantee that integer division by
5635zero will be detected. By default, detection is guaranteed.
5636
5637Some models of the MC88100 processor fail to trap upon integer
5638division by zero under certain conditions. By default, when
5639compiling code that might be run on such a processor, GNU C
5640generates code that explicitly checks for zero-valued divisors
5641and traps with exception number 503 when one is detected. Use of
5642mno-check-zero-division suppresses such checking for code
5643generated to run on an MC88100 processor.
5644
5645GNU C assumes that the MC88110 processor correctly detects all
5646instances of integer division by zero. When @samp{-m88110} is
5647specified, both @samp{-mcheck-zero-division} and
5648@samp{-mno-check-zero-division} are ignored, and no explicit checks for
5649zero-valued divisors are generated.
5650
5651@item -muse-div-instruction
5652@kindex -muse-div-instruction
5653@cindex divide instruction, 88k
5654Use the div instruction for signed integer division on the
5655MC88100 processor. By default, the div instruction is not used.
5656
5657On the MC88100 processor the signed integer division instruction
5658div) traps to the operating system on a negative operand. The
5659operating system transparently completes the operation, but at a
5660large cost in execution time. By default, when compiling code
5661that might be run on an MC88100 processor, GNU C emulates signed
5662integer division using the unsigned integer division instruction
5663divu), thereby avoiding the large penalty of a trap to the
5664operating system. Such emulation has its own, smaller, execution
5665cost in both time and space. To the extent that your code's
5666important signed integer division operations are performed on two
5667nonnegative operands, it may be desirable to use the div
5668instruction directly.
5669
5670On the MC88110 processor the div instruction (also known as the
5671divs instruction) processes negative operands without trapping to
5672the operating system. When @samp{-m88110} is specified,
5673@samp{-muse-div-instruction} is ignored, and the div instruction is used
5674for signed integer division.
5675
5676Note that the result of dividing INT_MIN by -1 is undefined. In
5677particular, the behavior of such a division with and without
5678@samp{-muse-div-instruction} may differ.
5679
5680@item -mtrap-large-shift
5681@itemx -mhandle-large-shift
5682@kindex -mtrap-large-shift
5683@kindex -mhandle-large-shift
5684@cindex bit shift overflow (88k)
5685@cindex large bit shifts (88k)
5686Include code to detect bit-shifts of more than 31 bits; respectively,
0c2d1a2a 5687trap such shifts or emit code to handle them properly. By default GCC
74291a4b
MM
5688makes no special provision for large bit shifts.
5689
5690@item -mwarn-passed-structs
5691@kindex -mwarn-passed-structs
5692@cindex structure passing (88k)
5693Warn when a function passes a struct as an argument or result.
5694Structure-passing conventions have changed during the evolution of the C
5695language, and are often the source of portability problems. By default,
0c2d1a2a 5696GCC issues no such warning.
74291a4b
MM
5697@end table
5698
5699@node RS/6000 and PowerPC Options
5700@subsection IBM RS/6000 and PowerPC Options
5701@cindex RS/6000 and PowerPC Options
5702@cindex IBM RS/6000 and PowerPC Options
5703
5704These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
2642624b 5705@table @gcctabopt
74291a4b
MM
5706@item -mpower
5707@itemx -mno-power
5708@itemx -mpower2
5709@itemx -mno-power2
5710@itemx -mpowerpc
5711@itemx -mno-powerpc
5712@itemx -mpowerpc-gpopt
5713@itemx -mno-powerpc-gpopt
5714@itemx -mpowerpc-gfxopt
5715@itemx -mno-powerpc-gfxopt
7fe90e7b
DE
5716@itemx -mpowerpc64
5717@itemx -mno-powerpc64
74291a4b
MM
5718@kindex -mpower
5719@kindex -mpower2
5720@kindex -mpowerpc
5721@kindex -mpowerpc-gpopt
5722@kindex -mpowerpc-gfxopt
7fe90e7b 5723@kindex -mpowerpc64
0c2d1a2a 5724GCC supports two related instruction set architectures for the
74291a4b
MM
5725RS/6000 and PowerPC. The @dfn{POWER} instruction set are those
5726instructions supported by the @samp{rios} chip set used in the original
5727RS/6000 systems and the @dfn{PowerPC} instruction set is the
5728architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
861bb6c1 5729the IBM 4xx microprocessors.
74291a4b
MM
5730
5731Neither architecture is a subset of the other. However there is a
5732large common subset of instructions supported by both. An MQ
5733register is included in processors supporting the POWER architecture.
5734
5735You use these options to specify which instructions are available on the
5736processor you are using. The default value of these options is
0c2d1a2a 5737determined when configuring GCC. Specifying the
74291a4b
MM
5738@samp{-mcpu=@var{cpu_type}} overrides the specification of these
5739options. We recommend you use the @samp{-mcpu=@var{cpu_type}} option
5740rather than the options listed above.
5741
0c2d1a2a 5742The @samp{-mpower} option allows GCC to generate instructions that
74291a4b 5743are found only in the POWER architecture and to use the MQ register.
0c2d1a2a 5744Specifying @samp{-mpower2} implies @samp{-power} and also allows GCC
74291a4b
MM
5745to generate instructions that are present in the POWER2 architecture but
5746not the original POWER architecture.
5747
0c2d1a2a 5748The @samp{-mpowerpc} option allows GCC to generate instructions that
74291a4b
MM
5749are found only in the 32-bit subset of the PowerPC architecture.
5750Specifying @samp{-mpowerpc-gpopt} implies @samp{-mpowerpc} and also allows
0c2d1a2a 5751GCC to use the optional PowerPC architecture instructions in the
74291a4b 5752General Purpose group, including floating-point square root. Specifying
0c2d1a2a 5753@samp{-mpowerpc-gfxopt} implies @samp{-mpowerpc} and also allows GCC to
74291a4b
MM
5754use the optional PowerPC architecture instructions in the Graphics
5755group, including floating-point select.
5756
0c2d1a2a 5757The @samp{-mpowerpc64} option allows GCC to generate the additional
7fe90e7b 575864-bit instructions that are found in the full PowerPC64 architecture
0c2d1a2a 5759and to treat GPRs as 64-bit, doubleword quantities. GCC defaults to
7fe90e7b
DE
5760@samp{-mno-powerpc64}.
5761
0c2d1a2a 5762If you specify both @samp{-mno-power} and @samp{-mno-powerpc}, GCC
74291a4b
MM
5763will use only the instructions in the common subset of both
5764architectures plus some special AIX common-mode calls, and will not use
5765the MQ register. Specifying both @samp{-mpower} and @samp{-mpowerpc}
0c2d1a2a 5766permits GCC to use any instruction from either architecture and to
74291a4b
MM
5767allow use of the MQ register; specify this for the Motorola MPC601.
5768
5769@item -mnew-mnemonics
5770@itemx -mold-mnemonics
5771@kindex -mnew-mnemonics
5772@kindex -mold-mnemonics
5773Select which mnemonics to use in the generated assembler code.
5774@samp{-mnew-mnemonics} requests output that uses the assembler mnemonics
5775defined for the PowerPC architecture, while @samp{-mold-mnemonics}
5776requests the assembler mnemonics defined for the POWER architecture.
5777Instructions defined in only one architecture have only one mnemonic;
0c2d1a2a 5778GCC uses that mnemonic irrespective of which of these options is
74291a4b
MM
5779specified.
5780
0c2d1a2a 5781GCC defaults to the mnemonics appropriate for the architecture in
7fe90e7b
DE
5782use. Specifying @samp{-mcpu=@var{cpu_type}} sometimes overrides the
5783value of these option. Unless you are building a cross-compiler, you
5784should normally not specify either @samp{-mnew-mnemonics} or
74291a4b
MM
5785@samp{-mold-mnemonics}, but should instead accept the default.
5786
5787@item -mcpu=@var{cpu_type}
7fe90e7b 5788@kindex -mcpu
74291a4b
MM
5789Set architecture type, register usage, choice of mnemonics, and
5790instruction scheduling parameters for machine type @var{cpu_type}.
5f59ecb7
DE
5791Supported values for @var{cpu_type} are @samp{rios}, @samp{rios1},
5792@samp{rsc}, @samp{rios2}, @samp{rs64a}, @samp{601}, @samp{602},
5793@samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620},
5794@samp{630}, @samp{740}, @samp{750}, @samp{power}, @samp{power2},
5795@samp{powerpc}, @samp{403}, @samp{505}, @samp{801}, @samp{821},
5796@samp{823}, and @samp{860} and @samp{common}. @samp{-mcpu=power},
5797@samp{-mcpu=power2}, @samp{-mcpu=powerpc}, and @samp{-mcpu=powerpc64}
5798specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not MPC601),
5799and 64-bit PowerPC architecture machine types, with an appropriate,
bef84347 5800generic processor model assumed for scheduling purposes.@refill
74291a4b 5801
74291a4b
MM
5802Specifying any of the following options:
5803@samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
5804@samp{-mcpu=power}, or @samp{-mcpu=power2}
5805enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option;
5806@samp{-mcpu=601} enables both the @samp{-mpower} and @samp{-mpowerpc} options.
5f59ecb7
DE
5807All of @samp{-mcpu=rs64a}, @samp{-mcpu=602}, @samp{-mcpu=603},
5808@samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=620}, @samp{-mcpu=630},
5809@samp{-mcpu=740}, and @samp{-mcpu=750}
74291a4b
MM
5810enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
5811Exactly similarly, all of @samp{-mcpu=403},
5812@samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc}
5813enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
5814@samp{-mcpu=common} disables both the
5815@samp{-mpower} and @samp{-mpowerpc} options.@refill
74291a4b
MM
5816
5817AIX versions 4 or greater selects @samp{-mcpu=common} by default, so
5f59ecb7 5818that code will operate on all members of the RS/6000 POWER and PowerPC
0c2d1a2a 5819families. In that case, GCC will use only the instructions in the
74291a4b 5820common subset of both architectures plus some special AIX common-mode
0c2d1a2a 5821calls, and will not use the MQ register. GCC assumes a generic
74291a4b
MM
5822processor model for scheduling purposes.
5823
5824Specifying any of the options @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
5825@samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} also
5826disables the @samp{new-mnemonics} option. Specifying @samp{-mcpu=601},
5827@samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e}, @samp{-mcpu=604},
5f59ecb7
DE
5828@samp{-mcpu=620}, @samp{-mcpu=630}, @samp{-mcpu=403}, @samp{-mcpu=505},
5829@samp{-mcpu=821}, @samp{-mcpu=860} or @samp{-mcpu=powerpc} also enables
5830the @samp{new-mnemonics} option.@refill
74291a4b
MM
5831
5832Specifying @samp{-mcpu=403}, @samp{-mcpu=821}, or @samp{-mcpu=860} also
5833enables the @samp{-msoft-float} option.
5834
5835@item -mtune=@var{cpu_type}
5836Set the instruction scheduling parameters for machine type
5837@var{cpu_type}, but do not set the architecture type, register usage,
5838choice of mnemonics like @samp{-mcpu=}@var{cpu_type} would. The same
5839values for @var{cpu_type} are used for @samp{-mtune=}@var{cpu_type} as
5840for @samp{-mcpu=}@var{cpu_type}. The @samp{-mtune=}@var{cpu_type}
5841option overrides the @samp{-mcpu=}@var{cpu_type} option in terms of
5842instruction scheduling parameters.
5843
5844@item -mfull-toc
5845@itemx -mno-fp-in-toc
5846@itemx -mno-sum-in-toc
5847@itemx -mminimal-toc
7fe90e7b 5848@kindex -mminimal-toc
74291a4b
MM
5849Modify generation of the TOC (Table Of Contents), which is created for
5850every executable file. The @samp{-mfull-toc} option is selected by
0c2d1a2a
JB
5851default. In that case, GCC will allocate at least one TOC entry for
5852each unique non-automatic variable reference in your program. GCC
74291a4b
MM
5853will also place floating-point constants in the TOC. However, only
585416,384 entries are available in the TOC.
5855
5856If you receive a linker error message that saying you have overflowed
5857the available TOC space, you can reduce the amount of TOC space used
5858with the @samp{-mno-fp-in-toc} and @samp{-mno-sum-in-toc} options.
0c2d1a2a
JB
5859@samp{-mno-fp-in-toc} prevents GCC from putting floating-point
5860constants in the TOC and @samp{-mno-sum-in-toc} forces GCC to
74291a4b
MM
5861generate code to calculate the sum of an address and a constant at
5862run-time instead of putting that sum into the TOC. You may specify one
0c2d1a2a 5863or both of these options. Each causes GCC to produce very slightly
74291a4b
MM
5864slower and larger code at the expense of conserving TOC space.
5865
5866If you still run out of space in the TOC even when you specify both of
5867these options, specify @samp{-mminimal-toc} instead. This option causes
0c2d1a2a
JB
5868GCC to make only one TOC entry for every file. When you specify this
5869option, GCC will produce code that is slower and larger but which
74291a4b
MM
5870uses extremely little TOC space. You may wish to use this option
5871only on files that contain less frequently executed code. @refill
5872
fa06229f
GK
5873@item -maix64
5874@itemx -maix32
5875@kindex -maix64
5876@kindex -maix32
5877Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
7fe90e7b 5878@code{long} type, and the infrastructure needed to support them.
fa06229f
GK
5879Specifying @samp{-maix64} implies @samp{-mpowerpc64} and
5880@samp{-mpowerpc}, while @samp{-maix32} disables the 64-bit ABI and
5881implies @samp{-mno-powerpc64}. GCC defaults to @samp{-maix32}.
7fe90e7b 5882
74291a4b
MM
5883@item -mxl-call
5884@itemx -mno-xl-call
7fe90e7b 5885@kindex -mxl-call
74291a4b
MM
5886On AIX, pass floating-point arguments to prototyped functions beyond the
5887register save area (RSA) on the stack in addition to argument FPRs. The
5888AIX calling convention was extended but not initially documented to
5889handle an obscure K&R C case of calling a function that takes the
5890address of its arguments with fewer arguments than declared. AIX XL
7fe90e7b
DE
5891compilers access floating point arguments which do not fit in the
5892RSA from the stack when a subroutine is compiled without
74291a4b
MM
5893optimization. Because always storing floating-point arguments on the
5894stack is inefficient and rarely needed, this option is not enabled by
5895default and only is necessary when calling subroutines compiled by AIX
5896XL compilers without optimization.
5897
861bb6c1 5898@item -mthreads
7fe90e7b 5899@kindex -mthreads
861bb6c1
JL
5900Support @dfn{AIX Threads}. Link an application written to use
5901@dfn{pthreads} with special libraries and startup code to enable the
5902application to run.
5903
5904@item -mpe
7fe90e7b 5905@kindex -mpe
861bb6c1
JL
5906Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE). Link an
5907application written to use message passing with special startup code to
5908enable the application to run. The system must have PE installed in the
5909standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
5910must be overridden with the @samp{-specs=} option to specify the
5911appropriate directory location. The Parallel Environment does not
5912support threads, so the @samp{-mpe} option and the @samp{-mthreads}
5913option are incompatible.
5914
74291a4b
MM
5915@item -msoft-float
5916@itemx -mhard-float
7fe90e7b 5917@kindex -msoft-float
74291a4b
MM
5918Generate code that does not use (uses) the floating-point register set.
5919Software floating point emulation is provided if you use the
0c2d1a2a 5920@samp{-msoft-float} option, and pass the option to GCC when linking.
74291a4b
MM
5921
5922@item -mmultiple
5923@itemx -mno-multiple
5924Generate code that uses (does not use) the load multiple word
5925instructions and the store multiple word instructions. These
5926instructions are generated by default on POWER systems, and not
5927generated on PowerPC systems. Do not use @samp{-mmultiple} on little
5928endian PowerPC systems, since those instructions do not work when the
bef84347
VM
5929processor is in little endian mode. The exceptions are PPC740 and
5930PPC750 which permit the instructions usage in little endian mode.
74291a4b
MM
5931
5932@item -mstring
5933@itemx -mno-string
7fe90e7b 5934@kindex -mstring
bef84347
VM
5935Generate code that uses (does not use) the load string instructions
5936and the store string word instructions to save multiple registers and
5937do small block moves. These instructions are generated by default on
5938POWER systems, and not generated on PowerPC systems. Do not use
5939@samp{-mstring} on little endian PowerPC systems, since those
5940instructions do not work when the processor is in little endian mode.
5941The exceptions are PPC740 and PPC750 which permit the instructions
5942usage in little endian mode.
74291a4b 5943
861bb6c1
JL
5944@item -mupdate
5945@itemx -mno-update
7fe90e7b 5946@kindex -mupdate
861bb6c1
JL
5947Generate code that uses (does not use) the load or store instructions
5948that update the base register to the address of the calculated memory
5949location. These instructions are generated by default. If you use
5950@samp{-mno-update}, there is a small window between the time that the
5951stack pointer is updated and the address of the previous frame is
5952stored, which means code that walks the stack frame across interrupts or
5953signals may get corrupted data.
5954
5955@item -mfused-madd
5956@itemx -mno-fused-madd
7fe90e7b 5957@kindex -mfused-madd
861bb6c1
JL
5958Generate code that uses (does not use) the floating point multiply and
5959accumulate instructions. These instructions are generated by default if
5960hardware floating is used.
5961
74291a4b
MM
5962@item -mno-bit-align
5963@itemx -mbit-align
7fe90e7b 5964@kindex -mbit-align
74291a4b
MM
5965On System V.4 and embedded PowerPC systems do not (do) force structures
5966and unions that contain bit fields to be aligned to the base type of the
5967bit field.
5968
5969For example, by default a structure containing nothing but 8
5970@code{unsigned} bitfields of length 1 would be aligned to a 4 byte
5971boundary and have a size of 4 bytes. By using @samp{-mno-bit-align},
5972the structure would be aligned to a 1 byte boundary and be one byte in
5973size.
5974
5975@item -mno-strict-align
5976@itemx -mstrict-align
7fe90e7b 5977@kindex -mstrict-align
74291a4b
MM
5978On System V.4 and embedded PowerPC systems do not (do) assume that
5979unaligned memory references will be handled by the system.
5980
5981@item -mrelocatable
5982@itemx -mno-relocatable
7fe90e7b 5983@kindex -mrelocatable
74291a4b
MM
5984On embedded PowerPC systems generate code that allows (does not allow)
5985the program to be relocated to a different address at runtime. If you
5986use @samp{-mrelocatable} on any module, all objects linked together must
5987be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}.
5988
5989@item -mrelocatable-lib
5990@itemx -mno-relocatable-lib
5991On embedded PowerPC systems generate code that allows (does not allow)
5992the program to be relocated to a different address at runtime. Modules
956d6950 5993compiled with @samp{-mrelocatable-lib} can be linked with either modules
74291a4b
MM
5994compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or
5995with modules compiled with the @samp{-mrelocatable} options.
5996
5997@item -mno-toc
5998@itemx -mtoc
5999On System V.4 and embedded PowerPC systems do not (do) assume that
6000register 2 contains a pointer to a global area pointing to the addresses
6001used in the program.
6002
74291a4b
MM
6003@item -mlittle
6004@itemx -mlittle-endian
6005On System V.4 and embedded PowerPC systems compile code for the
6006processor in little endian mode. The @samp{-mlittle-endian} option is
6007the same as @samp{-mlittle}.
6008
6009@item -mbig
6010@itemx -mbig-endian
6011On System V.4 and embedded PowerPC systems compile code for the
6012processor in big endian mode. The @samp{-mbig-endian} option is
6013the same as @samp{-mbig}.
6014
6015@item -mcall-sysv
6016On System V.4 and embedded PowerPC systems compile code using calling
6017conventions that adheres to the March 1995 draft of the System V
6018Application Binary Interface, PowerPC processor supplement. This is the
6019default unless you configured GCC using @samp{powerpc-*-eabiaix}.
6020
6021@item -mcall-sysv-eabi
6022Specify both @samp{-mcall-sysv} and @samp{-meabi} options.
6023
6024@item -mcall-sysv-noeabi
6025Specify both @samp{-mcall-sysv} and @samp{-mno-eabi} options.
6026
6027@item -mcall-aix
6028On System V.4 and embedded PowerPC systems compile code using calling
6029conventions that are similar to those used on AIX. This is the
6030default if you configured GCC using @samp{powerpc-*-eabiaix}.
6031
6032@item -mcall-solaris
6033On System V.4 and embedded PowerPC systems compile code for the Solaris
6034operating system.
6035
6036@item -mcall-linux
861bb6c1
JL
6037On System V.4 and embedded PowerPC systems compile code for the
6038Linux-based GNU system.
74291a4b
MM
6039
6040@item -mprototype
e9a25f70 6041@itemx -mno-prototype
74291a4b
MM
6042On System V.4 and embedded PowerPC systems assume that all calls to
6043variable argument functions are properly prototyped. Otherwise, the
6044compiler must insert an instruction before every non prototyped call to
6045set or clear bit 6 of the condition code register (@var{CR}) to
6046indicate whether floating point values were passed in the floating point
6047registers in case the function takes a variable arguments. With
6048@samp{-mprototype}, only calls to prototyped variable argument functions
6049will set or clear the bit.
6050
6051@item -msim
6052On embedded PowerPC systems, assume that the startup module is called
6053@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
6054@file{libc.a}. This is the default for @samp{powerpc-*-eabisim}.
6055configurations.
6056
6057@item -mmvme
6058On embedded PowerPC systems, assume that the startup module is called
e9a25f70
JL
6059@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
6060@file{libc.a}.
6061
6062@item -mads
6063On embedded PowerPC systems, assume that the startup module is called
6064@file{crt0.o} and the standard C libraries are @file{libads.a} and
6065@file{libc.a}.
6066
6067@item -myellowknife
6068On embedded PowerPC systems, assume that the startup module is called
6069@file{crt0.o} and the standard C libraries are @file{libyk.a} and
74291a4b
MM
6070@file{libc.a}.
6071
bff46771
GK
6072@item -mvxworks
6073On System V.4 and embedded PowerPC systems, specify that you are
6074compiling for a VxWorks system.
6075
74291a4b
MM
6076@item -memb
6077On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
6078header to indicate that @samp{eabi} extended relocations are used.
6079
6080@item -meabi
6081@itemx -mno-eabi
6082On System V.4 and embedded PowerPC systems do (do not) adhere to the
6083Embedded Applications Binary Interface (eabi) which is a set of
bedc7537 6084modifications to the System V.4 specifications. Selecting @option{-meabi}
74291a4b
MM
6085means that the stack is aligned to an 8 byte boundary, a function
6086@code{__eabi} is called to from @code{main} to set up the eabi
6087environment, and the @samp{-msdata} option can use both @code{r2} and
6088@code{r13} to point to two separate small data areas. Selecting
bedc7537 6089@option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
74291a4b
MM
6090do not call an initialization function from @code{main}, and the
6091@samp{-msdata} option will only use @code{r13} to point to a single
6092small data area. The @samp{-meabi} option is on by default if you
6093configured GCC using one of the @samp{powerpc*-*-eabi*} options.
6094
6095@item -msdata=eabi
6096On System V.4 and embedded PowerPC systems, put small initialized
6097@code{const} global and static data in the @samp{.sdata2} section, which
6098is pointed to by register @code{r2}. Put small initialized
6099non-@code{const} global and static data in the @samp{.sdata} section,
6100which is pointed to by register @code{r13}. Put small uninitialized
6101global and static data in the @samp{.sbss} section, which is adjacent to
6102the @samp{.sdata} section. The @samp{-msdata=eabi} option is
6103incompatible with the @samp{-mrelocatable} option. The
6104@samp{-msdata=eabi} option also sets the @samp{-memb} option.
6105
6106@item -msdata=sysv
6107On System V.4 and embedded PowerPC systems, put small global and static
6108data in the @samp{.sdata} section, which is pointed to by register
6109@code{r13}. Put small uninitialized global and static data in the
6110@samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
6111The @samp{-msdata=sysv} option is incompatible with the
6112@samp{-mrelocatable} option.
6113
6114@item -msdata=default
6115@itemx -msdata
6116On System V.4 and embedded PowerPC systems, if @samp{-meabi} is used,
6117compile code the same as @samp{-msdata=eabi}, otherwise compile code the
6118same as @samp{-msdata=sysv}.
6119
6120@item -msdata-data
6121On System V.4 and embedded PowerPC systems, put small global and static
6122data in the @samp{.sdata} section. Put small uninitialized global and
6123static data in the @samp{.sbss} section. Do not use register @code{r13}
6124to address small data however. This is the default behavior unless
6125other @samp{-msdata} options are used.
6126
6127@item -msdata=none
6128@itemx -mno-sdata
6129On embedded PowerPC systems, put all initialized global and static data
6130in the @samp{.data} section, and all uninitialized data in the
6131@samp{.bss} section.
6132
6133@item -G @var{num}
6134@cindex smaller data references (PowerPC)
6135@cindex .sdata/.sdata2 references (PowerPC)
956d6950 6136On embedded PowerPC systems, put global and static items less than or
74291a4b
MM
6137equal to @var{num} bytes into the small data or bss sections instead of
6138the normal data or bss section. By default, @var{num} is 8. The
6139@samp{-G @var{num}} switch is also passed to the linker.
6140All modules should be compiled with the same @samp{-G @var{num}} value.
6141
6142@item -mregnames
6143@itemx -mno-regnames
6144On System V.4 and embedded PowerPC systems do (do not) emit register
6145names in the assembly language output using symbolic forms.
f5a1b0d2 6146
74291a4b 6147@end table
f5a1b0d2 6148
74291a4b
MM
6149@node RT Options
6150@subsection IBM RT Options
6151@cindex RT options
6152@cindex IBM RT options
6153
6154These @samp{-m} options are defined for the IBM RT PC:
6155
2642624b 6156@table @gcctabopt
74291a4b
MM
6157@item -min-line-mul
6158Use an in-line code sequence for integer multiplies. This is the
6159default.
6160
6161@item -mcall-lib-mul
6162Call @code{lmul$$} for integer multiples.
6163
6164@item -mfull-fp-blocks
6165Generate full-size floating point data blocks, including the minimum
6166amount of scratch space recommended by IBM. This is the default.
6167
6168@item -mminimum-fp-blocks
6169Do not include extra scratch space in floating point data blocks. This
6170results in smaller code, but slower execution, since scratch space must
6171be allocated dynamically.
6172
6173@cindex @file{varargs.h} and RT PC
6174@cindex @file{stdarg.h} and RT PC
6175@item -mfp-arg-in-fpregs
6176Use a calling sequence incompatible with the IBM calling convention in
6177which floating point arguments are passed in floating point registers.
6178Note that @code{varargs.h} and @code{stdargs.h} will not work with
6179floating point operands if this option is specified.
6180
6181@item -mfp-arg-in-gregs
6182Use the normal calling convention for floating point arguments. This is
6183the default.
6184
6185@item -mhc-struct-return
6186Return structures of more than one word in memory, rather than in a
6187register. This provides compatibility with the MetaWare HighC (hc)
6188compiler. Use the option @samp{-fpcc-struct-return} for compatibility
6189with the Portable C Compiler (pcc).
6190
6191@item -mnohc-struct-return
6192Return some structures of more than one word in registers, when
6193convenient. This is the default. For compatibility with the
6194IBM-supplied compilers, use the option @samp{-fpcc-struct-return} or the
6195option @samp{-mhc-struct-return}.
6196@end table
6197
6198@node MIPS Options
6199@subsection MIPS Options
6200@cindex MIPS options
6201
6202These @samp{-m} options are defined for the MIPS family of computers:
6203
2642624b 6204@table @gcctabopt
74291a4b
MM
6205@item -mcpu=@var{cpu type}
6206Assume the defaults for the machine type @var{cpu type} when scheduling
6207instructions. The choices for @var{cpu type} are @samp{r2000}, @samp{r3000},
8b9243df
JJ
6208@samp{r3900}, @samp{r4000}, @samp{r4100}, @samp{r4300}, @samp{r4400},
6209@samp{r4600}, @samp{r4650}, @samp{r5000}, @samp{r6000}, @samp{r8000},
6210and @samp{orion}. Additionally, the @samp{r2000}, @samp{r3000},
6211@samp{r4000}, @samp{r5000}, and @samp{r6000} can be abbreviated as
6212@samp{r2k} (or @samp{r2K}), @samp{r3k}, etc. While picking a specific
6213@var{cpu type} will schedule things appropriately for that particular
6214chip, the compiler will not generate any code that does not meet level 1
6215of the MIPS ISA (instruction set architecture) without a @samp{-mipsX}
6216or @samp{-mabi} switch being used.
74291a4b
MM
6217
6218@item -mips1
6219Issue instructions from level 1 of the MIPS ISA. This is the default.
6220@samp{r3000} is the default @var{cpu type} at this ISA level.
6221
6222@item -mips2
6223Issue instructions from level 2 of the MIPS ISA (branch likely, square
6224root instructions). @samp{r6000} is the default @var{cpu type} at this
6225ISA level.
6226
6227@item -mips3
6228Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
6229@samp{r4000} is the default @var{cpu type} at this ISA level.
74291a4b 6230
3398f47f 6231@item -mips4
8b9243df
JJ
6232Issue instructions from level 4 of the MIPS ISA (conditional move,
6233prefetch, enhanced FPU instructions). @samp{r8000} is the default
6234@var{cpu type} at this ISA level.
3398f47f 6235
74291a4b
MM
6236@item -mfp32
6237Assume that 32 32-bit floating point registers are available. This is
6238the default.
6239
6240@item -mfp64
6241Assume that 32 64-bit floating point registers are available. This is
6242the default when the @samp{-mips3} option is used.
6243
6244@item -mgp32
6245Assume that 32 32-bit general purpose registers are available. This is
6246the default.
6247
6248@item -mgp64
6249Assume that 32 64-bit general purpose registers are available. This is
6250the default when the @samp{-mips3} option is used.
6251
6252@item -mint64
3ce1ba83
GRK
6253Force int and long types to be 64 bits wide. See @samp{-mlong32} for an
6254explanation of the default, and the width of pointers.
74291a4b
MM
6255
6256@item -mlong64
3ce1ba83
GRK
6257Force long types to be 64 bits wide. See @samp{-mlong32} for an
6258explanation of the default, and the width of pointers.
fb1bf66d 6259
3ce1ba83
GRK
6260@item -mlong32
6261Force long, int, and pointer types to be 32 bits wide.
6262
6263If none of @samp{-mlong32}, @samp{-mlong64}, or @samp{-mint64} are set,
b192711e 6264the size of ints, longs, and pointers depends on the ABI and ISA chosen.
3ce1ba83
GRK
6265For @samp{-mabi=32}, and @samp{-mabi=n32}, ints and longs are 32 bits
6266wide. For @samp{-mabi=64}, ints are 32 bits, and longs are 64 bits wide.
6267For @samp{-mabi=eabi} and either @samp{-mips1} or @samp{-mips2}, ints
6268and longs are 32 bits wide. For @samp{-mabi=eabi} and higher ISAs, ints
6269are 32 bits, and longs are 64 bits wide. The width of pointer types is
6270the smaller of the width of longs or the width of general purpose
6271registers (which in turn depends on the ISA).
74291a4b 6272
62a1403d 6273@item -mabi=32
8b9243df 6274@itemx -mabi=o64
3398f47f
MM
6275@itemx -mabi=n32
6276@itemx -mabi=64
6277@itemx -mabi=eabi
8b9243df
JJ
6278Generate code for the indicated ABI. The default instruction level is
6279@samp{-mips1} for @samp{32}, @samp{-mips3} for @samp{n32}, and
6280@samp{-mips4} otherwise. Conversely, with @samp{-mips1} or
6281@samp{-mips2}, the default ABI is @samp{32}; otherwise, the default ABI
6282is @samp{64}.
3398f47f 6283
74291a4b
MM
6284@item -mmips-as
6285Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
6286add normal debug information. This is the default for all
6287platforms except for the OSF/1 reference platform, using the OSF/rose
6288object format. If the either of the @samp{-gstabs} or @samp{-gstabs+}
6289switches are used, the @file{mips-tfile} program will encapsulate the
6290stabs within MIPS ECOFF.
6291
6292@item -mgas
6293Generate code for the GNU assembler. This is the default on the OSF/1
861bb6c1
JL
6294reference platform, using the OSF/rose object format. Also, this is
6295the default if the configure option @samp{--with-gnu-as} is used.
6296
6297@item -msplit-addresses
6298@itemx -mno-split-addresses
6299Generate code to load the high and low parts of address constants separately.
6300This allows @code{gcc} to optimize away redundant loads of the high order
6301bits of addresses. This optimization requires GNU as and GNU ld.
6302This optimization is enabled by default for some embedded targets where
6303GNU as and GNU ld are standard.
74291a4b
MM
6304
6305@item -mrnames
6306@itemx -mno-rnames
6307The @samp{-mrnames} switch says to output code using the MIPS software
6308names for the registers, instead of the hardware names (ie, @var{a0}
6309instead of @var{$4}). The only known assembler that supports this option
6310is the Algorithmics assembler.
6311
6312@item -mgpopt
6313@itemx -mno-gpopt
6314The @samp{-mgpopt} switch says to write all of the data declarations
6315before the instructions in the text section, this allows the MIPS
6316assembler to generate one word memory references instead of using two
6317words for short global or static data items. This is on by default if
6318optimization is selected.
6319
6320@item -mstats
6321@itemx -mno-stats
6322For each non-inline function processed, the @samp{-mstats} switch
6323causes the compiler to emit one line to the standard error file to
6324print statistics about the program (number of registers saved, stack
6325size, etc.).
6326
6327@item -mmemcpy
6328@itemx -mno-memcpy
6329The @samp{-mmemcpy} switch makes all block moves call the appropriate
6330string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
6331generating inline code.
6332
6333@item -mmips-tfile
6334@itemx -mno-mips-tfile
6335The @samp{-mno-mips-tfile} switch causes the compiler not
6336postprocess the object file with the @file{mips-tfile} program,
6337after the MIPS assembler has generated it to add debug support. If
6338@file{mips-tfile} is not run, then no local variables will be
6339available to the debugger. In addition, @file{stage2} and
6340@file{stage3} objects will have the temporary file names passed to the
6341assembler embedded in the object file, which means the objects will
6342not compare the same. The @samp{-mno-mips-tfile} switch should only
6343be used when there are bugs in the @file{mips-tfile} program that
6344prevents compilation.
6345
6346@item -msoft-float
6347Generate output containing library calls for floating point.
0c2d1a2a 6348@strong{Warning:} the requisite libraries are not part of GCC.
74291a4b
MM
6349Normally the facilities of the machine's usual C compiler are used, but
6350this can't be done directly in cross-compilation. You must make your
6351own arrangements to provide suitable library functions for
6352cross-compilation.
6353
6354@item -mhard-float
6355Generate output containing floating point instructions. This is the
6356default if you use the unmodified sources.
6357
6358@item -mabicalls
6359@itemx -mno-abicalls
6360Emit (or do not emit) the pseudo operations @samp{.abicalls},
6361@samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for
6362position independent code.
6363
6364@item -mlong-calls
6365@itemx -mno-long-calls
6366Do all calls with the @samp{JALR} instruction, which requires
6367loading up a function's address into a register before the call.
6368You need to use this switch, if you call outside of the current
6369512 megabyte segment to functions that are not through pointers.
6370
6371@item -mhalf-pic
6372@itemx -mno-half-pic
6373Put pointers to extern references into the data section and load them
6374up, rather than put the references in the text section.
6375
6376@item -membedded-pic
6377@itemx -mno-embedded-pic
69fa83cf
JW
6378Generate PIC code suitable for some embedded systems. All calls are
6379made using PC relative address, and all data is addressed using the $gp
6380register. No more than 65536 bytes of global data may be used. This
6381requires GNU as and GNU ld which do most of the work. This currently
6382only works on targets which use ECOFF; it does not work with ELF.
74291a4b
MM
6383
6384@item -membedded-data
6385@itemx -mno-embedded-data
6386Allocate variables to the read-only data section first if possible, then
6387next in the small data section if possible, otherwise in data. This gives
6388slightly slower code than the default, but reduces the amount of RAM required
6389when executing, and thus may be preferred for some embedded systems.
6390
919509ce
DN
6391@item -muninit-const-in-rodata
6392@itemx -mno-uninit-const-in-rodata
6393When used together with -membedded-data, it will always store uninitialized
6394const variables in the read-only data section.
6395
74291a4b
MM
6396@item -msingle-float
6397@itemx -mdouble-float
6398The @samp{-msingle-float} switch tells gcc to assume that the floating
6399point coprocessor only supports single precision operations, as on the
6400@samp{r4650} chip. The @samp{-mdouble-float} switch permits gcc to use
6401double precision operations. This is the default.
6402
6403@item -mmad
6404@itemx -mno-mad
6405Permit use of the @samp{mad}, @samp{madu} and @samp{mul} instructions,
6406as on the @samp{r4650} chip.
6407
6408@item -m4650
6409Turns on @samp{-msingle-float}, @samp{-mmad}, and, at least for now,
6410@samp{-mcpu=r4650}.
6411
8b9243df
JJ
6412@item -mips16
6413@itemx -mno-mips16
6414Enable 16-bit instructions.
6415
6416@item -mentry
6417Use the entry and exit pseudo ops. This option can only be used with
6418@samp{-mips16}.
6419
74291a4b
MM
6420@item -EL
6421Compile code for the processor in little endian mode.
6422The requisite libraries are assumed to exist.
6423
6424@item -EB
6425Compile code for the processor in big endian mode.
6426The requisite libraries are assumed to exist.
6427
6428@item -G @var{num}
6429@cindex smaller data references (MIPS)
6430@cindex gp-relative references (MIPS)
6431Put global and static items less than or equal to @var{num} bytes into
6432the small data or bss sections instead of the normal data or bss
6433section. This allows the assembler to emit one word memory reference
6434instructions based on the global pointer (@var{gp} or @var{$28}),
6435instead of the normal two words used. By default, @var{num} is 8 when
6436the MIPS assembler is used, and 0 when the GNU assembler is used. The
6437@samp{-G @var{num}} switch is also passed to the assembler and linker.
6438All modules should be compiled with the same @samp{-G @var{num}}
6439value.
6440
6441@item -nocpp
9ec36da5 6442Tell the MIPS assembler to not run its preprocessor over user
74291a4b 6443assembler files (with a @samp{.s} suffix) when assembling them.
63357d93 6444
1e387156
CM
6445@item -mfix7000
6446Pass an option to gas which will cause nops to be inserted if
6447the read of the destination register of an mfhi or mflo instruction
6448occurs in the following two instructions.
6449
63357d93
GRK
6450@item -no-crt0
6451Do not include the default crt0.
74291a4b
MM
6452@end table
6453
6454@ifset INTERNALS
6455These options are defined by the macro
6456@code{TARGET_SWITCHES} in the machine description. The default for the
6457options is also defined by that macro, which enables you to change the
6458defaults.
6459@end ifset
6460
6461@node i386 Options
6462@subsection Intel 386 Options
6463@cindex i386 Options
6464@cindex Intel 386 Options
6465
6466These @samp{-m} options are defined for the i386 family of computers:
6467
2642624b 6468@table @gcctabopt
a9f3e1a4
JL
6469@item -mcpu=@var{cpu type}
6470Assume the defaults for the machine type @var{cpu type} when scheduling
9d86bffc
JM
6471instructions. The choices for @var{cpu type} are @samp{i386},
6472@samp{i486}, @samp{i586}, @samp{i686}, @samp{pentium},
6473@samp{pentiumpro}, @samp{k6}, and @samp{athlon}
6f670fde
RH
6474
6475While picking a specific @var{cpu type} will schedule things appropriately
6476for that particular chip, the compiler will not generate any code that
6477does not run on the i386 without the @samp{-march=@var{cpu type}} option
7001ee2d
CB
6478being used. @samp{i586} is equivalent to @samp{pentium} and @samp{i686}
6479is equivalent to @samp{pentiumpro}. @samp{k6} is the AMD chip as
6480opposed to the Intel ones.
a9f3e1a4
JL
6481
6482@item -march=@var{cpu type}
6483Generate instructions for the machine type @var{cpu type}. The choices
6f670fde
RH
6484for @var{cpu type} are the same as for @samp{-mcpu}. Moreover,
6485specifying @samp{-march=@var{cpu type}} implies @samp{-mcpu=@var{cpu type}}.
a9f3e1a4
JL
6486
6487@item -m386
6488@itemx -m486
6489@itemx -mpentium
6490@itemx -mpentiumpro
6491Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro
7001ee2d 6492respectively. These synonyms are deprecated.
74291a4b 6493
04e149ab
KC
6494@item -mintel-syntax
6495Emit assembly using Intel syntax opcodes instead of AT&T syntax.
6496
74291a4b
MM
6497@item -mieee-fp
6498@itemx -mno-ieee-fp
6499Control whether or not the compiler uses IEEE floating point
6500comparisons. These handle correctly the case where the result of a
6501comparison is unordered.
6502
6503@item -msoft-float
6504Generate output containing library calls for floating point.
0c2d1a2a 6505@strong{Warning:} the requisite libraries are not part of GCC.
74291a4b
MM
6506Normally the facilities of the machine's usual C compiler are used, but
6507this can't be done directly in cross-compilation. You must make your
6508own arrangements to provide suitable library functions for
6509cross-compilation.
6510
6511On machines where a function returns floating point results in the 80387
6512register stack, some floating point opcodes may be emitted even if
6513@samp{-msoft-float} is used.
6514
6515@item -mno-fp-ret-in-387
6516Do not use the FPU registers for return values of functions.
6517
6518The usual calling convention has functions return values of types
6519@code{float} and @code{double} in an FPU register, even if there
6520is no FPU. The idea is that the operating system should emulate
6521an FPU.
6522
6523The option @samp{-mno-fp-ret-in-387} causes such values to be returned
6524in ordinary CPU registers instead.
6525
6526@item -mno-fancy-math-387
6527Some 387 emulators do not support the @code{sin}, @code{cos} and
6528@code{sqrt} instructions for the 387. Specify this option to avoid
6529generating those instructions. This option is the default on FreeBSD.
6530As of revision 2.6.1, these instructions are not generated unless you
6531also use the @samp{-ffast-math} switch.
6532
6533@item -malign-double
6534@itemx -mno-align-double
0c2d1a2a 6535Control whether GCC aligns @code{double}, @code{long double}, and
74291a4b
MM
6536@code{long long} variables on a two word boundary or a one word
6537boundary. Aligning @code{double} variables on a two word boundary will
6538produce code that runs somewhat faster on a @samp{Pentium} at the
6539expense of more memory.
6540
2b589241
JH
6541@item -m128bit-long-double
6542@itemx -m128bit-long-double
6543Control the size of @code{long double} type. i386 application binary interface
6544specify the size to be 12 bytes, while modern architectures (Pentium and newer)
6545preffer @code{long double} aligned to 8 or 16 byte boundary. This is
6546impossible to reach with 12 byte long doubles in the array accesses.
6547
6548@strong{Warning:} if you use the @samp{-m128bit-long-double} switch, the
6549structures and arrays containing @code{long double} will change their size as
6550well as function calling convention for function taking @code{long double}
6551will be modified.
6552
6553@item -m96bit-long-double
6554@itemx -m96bit-long-double
0a75e5c3 6555Set the size of @code{long double} to 96 bits as required by the i386
2b589241 6556application binary interface. This is the default.
74291a4b
MM
6557
6558@item -msvr3-shlib
6559@itemx -mno-svr3-shlib
0c2d1a2a 6560Control whether GCC places uninitialized locals into @code{bss} or
74291a4b
MM
6561@code{data}. @samp{-msvr3-shlib} places these locals into @code{bss}.
6562These options are meaningful only on System V Release 3.
6563
6564@item -mno-wide-multiply
6565@itemx -mwide-multiply
0c2d1a2a 6566Control whether GCC uses the @code{mul} and @code{imul} that produce
74291a4b
MM
656764 bit results in @code{eax:edx} from 32 bit operands to do @code{long
6568long} multiplies and 32-bit division by constants.
6569
6570@item -mrtd
6571Use a different function-calling convention, in which functions that
6572take a fixed number of arguments return with the @code{ret} @var{num}
6573instruction, which pops their arguments while returning. This saves one
6574instruction in the caller since there is no need to pop the arguments
6575there.
6576
6577You can specify that an individual function is called with this calling
6578sequence with the function attribute @samp{stdcall}. You can also
6579override the @samp{-mrtd} option by using the function attribute
0b433de6 6580@samp{cdecl}. @xref{Function Attributes}.
74291a4b
MM
6581
6582@strong{Warning:} this calling convention is incompatible with the one
6583normally used on Unix, so you cannot use it if you need to call
6584libraries compiled with the Unix compiler.
6585
6586Also, you must provide function prototypes for all functions that
6587take variable numbers of arguments (including @code{printf});
6588otherwise incorrect code will be generated for calls to those
6589functions.
6590
6591In addition, seriously incorrect code will result if you call a
6592function with too many arguments. (Normally, extra arguments are
6593harmlessly ignored.)
6594
6595@item -mreg-alloc=@var{regs}
6596Control the default allocation order of integer registers. The
6597string @var{regs} is a series of letters specifying a register. The
6598supported letters are: @code{a} allocate EAX; @code{b} allocate EBX;
6599@code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI;
6600@code{D} allocate EDI; @code{B} allocate EBP.
6601
6602@item -mregparm=@var{num}
6603Control how many registers are used to pass integer arguments. By
6604default, no registers are used to pass arguments, and at most 3
6605registers can be used. You can control this behavior for a specific
0b433de6
JL
6606function by using the function attribute @samp{regparm}.
6607@xref{Function Attributes}.
74291a4b
MM
6608
6609@strong{Warning:} if you use this switch, and
6610@var{num} is nonzero, then you must build all modules with the same
6611value, including any libraries. This includes the system libraries and
6612startup modules.
6613
6614@item -malign-loops=@var{num}
6615Align loops to a 2 raised to a @var{num} byte boundary. If
9e423e6d
JW
6616@samp{-malign-loops} is not specified, the default is 2 unless
6617gas 2.8 (or later) is being used in which case the default is
6618to align the loop on a 16 byte boundary if it is less than 8
6619bytes away.
74291a4b
MM
6620
6621@item -malign-jumps=@var{num}
6622Align instructions that are only jumped to to a 2 raised to a @var{num}
6623byte boundary. If @samp{-malign-jumps} is not specified, the default is
9e423e6d
JW
66242 if optimizing for a 386, and 4 if optimizing for a 486 unless
6625gas 2.8 (or later) is being used in which case the default is
6626to align the instruction on a 16 byte boundary if it is less
6627than 8 bytes away.
74291a4b
MM
6628
6629@item -malign-functions=@var{num}
6630Align the start of functions to a 2 raised to @var{num} byte boundary.
6d4312dd 6631If @samp{-malign-functions} is not specified, the default is 2 if optimizing
74291a4b 6632for a 386, and 4 if optimizing for a 486.
74291a4b 6633
3af4bd89
JH
6634@item -mpreferred-stack-boundary=@var{num}
6635Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
6636byte boundary. If @samp{-mpreferred-stack-boundary} is not specified,
6637the default is 4 (16 bytes or 128 bits).
6638
6639The stack is required to be aligned on a 4 byte boundary. On Pentium
6640and PentiumPro, @code{double} and @code{long double} values should be
6641aligned to an 8 byte boundary (see @samp{-malign-double}) or suffer
6642significant run time performance penalties. On Pentium III, the
b192711e 6643Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
3af4bd89
JH
6644penalties if it is not 16 byte aligned.
6645
6646To ensure proper alignment of this values on the stack, the stack boundary
6647must be as aligned as that required by any value stored on the stack.
6648Further, every function must be generated such that it keeps the stack
6649aligned. Thus calling a function compiled with a higher preferred
6650stack boundary from a function compiled with a lower preferred stack
6651boundary will most likely misalign the stack. It is recommended that
6652libraries that use callbacks always use the default setting.
6653
6654This extra alignment does consume extra stack space. Code that is sensitive
6655to stack space usage, such as embedded systems and operating system kernels,
6656may want to reduce the preferred alignment to
6657@samp{-mpreferred-stack-boundary=2}.
f22a97d2 6658
f73ad30e
JH
6659@item -mpush-args
6660@kindex -mpush-args
6661Use PUSH operations to store outgoing parameters. This method is shorter
6662and usually equally fast as method using SUB/MOV operations and is enabled
6663by default. In some cases disabling it may improve performance because of
6664improved scheduling and reduced dependencies.
6665
6666@item -maccumulate-outgoing-args
6667@kindex -maccumulate-outgoing-args
6668If enabled, the maximum amount of space required for outgoing arguments will be
6669computed in the function prologue. This in faster on most modern CPUs
b192711e 6670because of reduced dependencies, improved scheduling and reduced stack usage
f73ad30e
JH
6671when preferred stack boundary is not equal to 2. The drawback is a notable
6672increase in code size. This switch implies -mno-push-args.
6673
f22a97d2
MK
6674@item -mthreads
6675@kindex -mthreads
6676Support thread-safe exception handling on @samp{Mingw32}. Code that relies
6677on thread-safe exception handling must compile and link all code with the
6678@samp{-mthreads} option. When compiling, @samp{-mthreads} defines
6679@samp{-D_MT}; when linking, it links in a special thread helper library
6680@samp{-lmingwthrd} which cleans up per thread exception handling data.
79f05c19
JH
6681
6682@item -mno-align-stringops
6683@kindex -mno-align-stringops
6684Do not align destination of inlined string operations. This switch reduces
6685code size and improves performance in case the destination is already aligned,
6686but gcc don't know about it.
6687
6688@item -minline-all-stringops
6689@kindex -minline-all-stringops
6690By default GCC inlines string operations only when destination is known to be
6691aligned at least to 4 byte boundary. This enables more inlining, increase code
6692size, but may improve performance of code that depends on fast memcpy, strlen
6693and memset for short lengths.
3af4bd89
JH
6694@end table
6695
74291a4b
MM
6696@node HPPA Options
6697@subsection HPPA Options
6698@cindex HPPA Options
6699
6700These @samp{-m} options are defined for the HPPA family of computers:
6701
2642624b 6702@table @gcctabopt
ea3bfbfe
JQ
6703@item -march=@var{architecture type}
6704Generate code for the specified architecture. The choices for
6705@var{architecture type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
67061.1, and @samp{2.0} for PA 2.0 processors. Refer to
6707@file{/usr/lib/sched.models} on an HP-UX system to determine the proper
6708architecture option for your machine. Code compiled for lower numbered
6709architectures will run on higher numbered architectures, but not the
6710other way around.
6711
6712PA 2.0 support currently requires gas snapshot 19990413 or later. The
6713next release of binutils (current is 2.9.1) will probably contain PA 2.0
6714support.
74291a4b 6715
ea3bfbfe 6716@item -mpa-risc-1-0
62a1403d
AS
6717@itemx -mpa-risc-1-1
6718@itemx -mpa-risc-2-0
ea3bfbfe 6719Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
74291a4b 6720
861bb6c1
JL
6721@item -mbig-switch
6722Generate code suitable for big switch tables. Use this option only if
6723the assembler/linker complain about out of range branches within a switch
6724table.
6725
74291a4b
MM
6726@item -mjump-in-delay
6727Fill delay slots of function calls with unconditional jump instructions
6728by modifying the return pointer for the function call to be the target
6729of the conditional jump.
6730
6731@item -mdisable-fpregs
6732Prevent floating point registers from being used in any manner. This is
6733necessary for compiling kernels which perform lazy context switching of
6734floating point registers. If you use this option and attempt to perform
6735floating point operations, the compiler will abort.
6736
6737@item -mdisable-indexing
6738Prevent the compiler from using indexing address modes. This avoids some
6739rather obscure problems when compiling MIG generated code under MACH.
6740
6741@item -mno-space-regs
6742Generate code that assumes the target has no space registers. This allows
6743GCC to generate faster indirect calls and use unscaled index address modes.
6744
6745Such code is suitable for level 0 PA systems and kernels.
6746
6747@item -mfast-indirect-calls
6748Generate code that assumes calls never cross space boundaries. This
6749allows GCC to emit code which performs faster indirect calls.
6750
b192711e 6751This option will not work in the presence of shared libraries or nested
74291a4b
MM
6752functions.
6753
74291a4b
MM
6754@item -mlong-load-store
6755Generate 3-instruction load and store sequences as sometimes required by
6756the HP-UX 10 linker. This is equivalent to the @samp{+k} option to
6757the HP compilers.
6758
6759@item -mportable-runtime
6760Use the portable calling conventions proposed by HP for ELF systems.
6761
6762@item -mgas
6763Enable the use of assembler directives only GAS understands.
6764
6765@item -mschedule=@var{cpu type}
6766Schedule code according to the constraints for the machine type
732135bf 6767@var{cpu type}. The choices for @var{cpu type} are @samp{700}
e14b50ce 6768@samp{7100}, @samp{7100LC}, @samp{7200}, and @samp{8000}. Refer to
732135bf
JL
6769@file{/usr/lib/sched.models} on an HP-UX system to determine the
6770proper scheduling option for your machine.
74291a4b
MM
6771
6772@item -mlinker-opt
6773Enable the optimization pass in the HPUX linker. Note this makes symbolic
6774debugging impossible. It also triggers a bug in the HPUX 8 and HPUX 9 linkers
6775in which they give bogus error messages when linking some programs.
6776
6777@item -msoft-float
6778Generate output containing library calls for floating point.
6779@strong{Warning:} the requisite libraries are not available for all HPPA
6780targets. Normally the facilities of the machine's usual C compiler are
6781used, but this cannot be done directly in cross-compilation. You must make
6782your own arrangements to provide suitable library functions for
6783cross-compilation. The embedded target @samp{hppa1.1-*-pro}
6784does provide software floating point support.
6785
6786@samp{-msoft-float} changes the calling convention in the output file;
6787therefore, it is only useful if you compile @emph{all} of a program with
6788this option. In particular, you need to compile @file{libgcc.a}, the
0c2d1a2a 6789library that comes with GCC, with @samp{-msoft-float} in order for
74291a4b
MM
6790this to work.
6791@end table
6792
6793@node Intel 960 Options
6794@subsection Intel 960 Options
6795
6796These @samp{-m} options are defined for the Intel 960 implementations:
6797
2642624b 6798@table @gcctabopt
74291a4b
MM
6799@item -m@var{cpu type}
6800Assume the defaults for the machine type @var{cpu type} for some of
6801the other options, including instruction scheduling, floating point
6802support, and addressing modes. The choices for @var{cpu type} are
6803@samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
6804@samp{sa}, and @samp{sb}.
6805The default is
6806@samp{kb}.
6807
6808@item -mnumerics
6809@itemx -msoft-float
6810The @samp{-mnumerics} option indicates that the processor does support
6811floating-point instructions. The @samp{-msoft-float} option indicates
6812that floating-point support should not be assumed.
6813
6814@item -mleaf-procedures
6815@itemx -mno-leaf-procedures
6816Do (or do not) attempt to alter leaf procedures to be callable with the
6817@code{bal} instruction as well as @code{call}. This will result in more
6818efficient code for explicit calls when the @code{bal} instruction can be
6819substituted by the assembler or linker, but less efficient code in other
6820cases, such as calls via function pointers, or using a linker that doesn't
6821support this optimization.
6822
6823@item -mtail-call
6824@itemx -mno-tail-call
6825Do (or do not) make additional attempts (beyond those of the
6826machine-independent portions of the compiler) to optimize tail-recursive
6827calls into branches. You may not want to do this because the detection of
6828cases where this is not valid is not totally complete. The default is
6829@samp{-mno-tail-call}.
6830
6831@item -mcomplex-addr
6832@itemx -mno-complex-addr
6833Assume (or do not assume) that the use of a complex addressing mode is a
6834win on this implementation of the i960. Complex addressing modes may not
6835be worthwhile on the K-series, but they definitely are on the C-series.
6836The default is currently @samp{-mcomplex-addr} for all processors except
6837the CB and CC.
6838
6839@item -mcode-align
6840@itemx -mno-code-align
6841Align code to 8-byte boundaries for faster fetching (or don't bother).
6842Currently turned on by default for C-series implementations only.
6843
6844@ignore
6845@item -mclean-linkage
6846@itemx -mno-clean-linkage
6847These options are not fully implemented.
6848@end ignore
6849
6850@item -mic-compat
6851@itemx -mic2.0-compat
6852@itemx -mic3.0-compat
6853Enable compatibility with iC960 v2.0 or v3.0.
6854
6855@item -masm-compat
6856@itemx -mintel-asm
6857Enable compatibility with the iC960 assembler.
6858
6859@item -mstrict-align
6860@itemx -mno-strict-align
6861Do not permit (do permit) unaligned accesses.
6862
6863@item -mold-align
6864Enable structure-alignment compatibility with Intel's gcc release version
861bb6c1 68651.3 (based on gcc 1.37). This option implies @samp{-mstrict-align}.
eaa4b44c
VM
6866
6867@item -mlong-double-64
6868Implement type @samp{long double} as 64-bit floating point numbers.
6869Without the option @samp{long double} is implemented by 80-bit
6870floating point numbers. The only reason we have it because there is
6871no 128-bit @samp{long double} support in @samp{fp-bit.c} yet. So it
6872is only useful for people using soft-float targets. Otherwise, we
6873should recommend against use of it.
6874
74291a4b
MM
6875@end table
6876
6877@node DEC Alpha Options
6878@subsection DEC Alpha Options
6879
6880These @samp{-m} options are defined for the DEC Alpha implementations:
6881
2642624b 6882@table @gcctabopt
74291a4b
MM
6883@item -mno-soft-float
6884@itemx -msoft-float
6885Use (do not use) the hardware floating-point instructions for
bedc7537 6886floating-point operations. When @option{-msoft-float} is specified,
74291a4b
MM
6887functions in @file{libgcc1.c} will be used to perform floating-point
6888operations. Unless they are replaced by routines that emulate the
6889floating-point operations, or compiled in such a way as to call such
6890emulations routines, these routines will issue floating-point
6891operations. If you are compiling for an Alpha without floating-point
6892operations, you must ensure that the library is built so as not to call
6893them.
6894
6895Note that Alpha implementations without floating-point operations are
6896required to have floating-point registers.
6897
6898@item -mfp-reg
6899@itemx -mno-fp-regs
6900Generate code that uses (does not use) the floating-point register set.
bedc7537 6901@option{-mno-fp-regs} implies @option{-msoft-float}. If the floating-point
74291a4b
MM
6902register set is not used, floating point operands are passed in integer
6903registers as if they were integers and floating-point results are passed
6904in $0 instead of $f0. This is a non-standard calling sequence, so any
6905function with a floating-point argument or return value called by code
bedc7537 6906compiled with @option{-mno-fp-regs} must also be compiled with that
74291a4b
MM
6907option.
6908
6909A typical use of this option is building a kernel that does not use,
6910and hence need not save and restore, any floating-point registers.
6911
6912@item -mieee
6913The Alpha architecture implements floating-point hardware optimized for
6914maximum performance. It is mostly compliant with the IEEE floating
6915point standard. However, for full compliance, software assistance is
6916required. This option generates code fully IEEE compliant code
6917@emph{except} that the @var{inexact flag} is not maintained (see below).
6918If this option is turned on, the CPP macro @code{_IEEE_FP} is defined
6919during compilation. The option is a shorthand for: @samp{-D_IEEE_FP
6920-mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}. The resulting
6921code is less efficient but is able to correctly support denormalized
6922numbers and exceptional IEEE values such as not-a-number and plus/minus
6923infinity. Other Alpha compilers call this option
bedc7537 6924@option{-ieee_with_no_inexact}.
74291a4b
MM
6925
6926@item -mieee-with-inexact
6927@c overfull hbox here --bob 22 jul96
6928@c original text between ignore ... end ignore
6929@ignore
6930This is like @samp{-mieee} except the generated code also maintains the
6931IEEE @var{inexact flag}. Turning on this option causes the generated
6932code to implement fully-compliant IEEE math. The option is a shorthand
6933for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @samp{-mieee-conformant},
6934@samp{-mfp-trap-mode=sui}, and @samp{-mtrap-precision=i}. On some Alpha
6935implementations the resulting code may execute significantly slower than
6936the code generated by default. Since there is very little code that
6937depends on the @var{inexact flag}, you should normally not specify this
6938option. Other Alpha compilers call this option
6939@samp{-ieee_with_inexact}.
6940@end ignore
6941@c changed paragraph
6942This is like @samp{-mieee} except the generated code also maintains the
6943IEEE @var{inexact flag}. Turning on this option causes the generated
6944code to implement fully-compliant IEEE math. The option is a shorthand
6945for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
6946@samp{-mieee-conformant},
6947@samp{-mfp-trap-mode=sui},
6948and @samp{-mtrap-precision=i}.
6949On some Alpha implementations the resulting code may execute
6950significantly slower than the code generated by default. Since there
6951is very little code that depends on the @var{inexact flag}, you should
6952normally not specify this option. Other Alpha compilers call this
6953option @samp{-ieee_with_inexact}.
6954@c end changes to prevent overfull hboxes
6955
6956@item -mfp-trap-mode=@var{trap mode}
6957This option controls what floating-point related traps are enabled.
6958Other Alpha compilers call this option @samp{-fptm }@var{trap mode}.
6959The trap mode can be set to one of four values:
6960
6961@table @samp
6962@item n
6963This is the default (normal) setting. The only traps that are enabled
6964are the ones that cannot be disabled in software (e.g., division by zero
6965trap).
6966
6967@item u
6968In addition to the traps enabled by @samp{n}, underflow traps are enabled
6969as well.
6970
6971@item su
6972Like @samp{su}, but the instructions are marked to be safe for software
6973completion (see Alpha architecture manual for details).
6974
6975@item sui
6976Like @samp{su}, but inexact traps are enabled as well.
6977@end table
6978
6979@item -mfp-rounding-mode=@var{rounding mode}
6980Selects the IEEE rounding mode. Other Alpha compilers call this option
6981@samp{-fprm }@var{rounding mode}. The @var{rounding mode} can be one
6982of:
6983
6984@table @samp
6985@item n
6986Normal IEEE rounding mode. Floating point numbers are rounded towards
6987the nearest machine number or towards the even machine number in case
6988of a tie.
6989
6990@item m
6991Round towards minus infinity.
6992
6993@item c
6994Chopped rounding mode. Floating point numbers are rounded towards zero.
6995
6996@item d
6997Dynamic rounding mode. A field in the floating point control register
6998(@var{fpcr}, see Alpha architecture reference manual) controls the
6999rounding mode in effect. The C library initializes this register for
7000rounding towards plus infinity. Thus, unless your program modifies the
ec4b2ecb
CB
7001@var{fpcr}, @samp{d} corresponds to round towards plus infinity.
7002@end table
74291a4b
MM
7003
7004@item -mtrap-precision=@var{trap precision}
7005In the Alpha architecture, floating point traps are imprecise. This
7006means without software assistance it is impossible to recover from a
7007floating trap and program execution normally needs to be terminated.
0c2d1a2a 7008GCC can generate code that can assist operating system trap handlers
74291a4b
MM
7009in determining the exact location that caused a floating point trap.
7010Depending on the requirements of an application, different levels of
7011precisions can be selected:
7012
7013@table @samp
7014@item p
7015Program precision. This option is the default and means a trap handler
7016can only identify which program caused a floating point exception.
7017
7018@item f
7019Function precision. The trap handler can determine the function that
7020caused a floating point exception.
7021
7022@item i
7023Instruction precision. The trap handler can determine the exact
7024instruction that caused a floating point exception.
7025@end table
7026
7027Other Alpha compilers provide the equivalent options called
7028@samp{-scope_safe} and @samp{-resumption_safe}.
7029
7030@item -mieee-conformant
7031This option marks the generated code as IEEE conformant. You must not
7032use this option unless you also specify @samp{-mtrap-precision=i} and either
7033@samp{-mfp-trap-mode=su} or @samp{-mfp-trap-mode=sui}. Its only effect
7034is to emit the line @samp{.eflag 48} in the function prologue of the
7035generated assembly file. Under DEC Unix, this has the effect that
7036IEEE-conformant math library routines will be linked in.
7037
7038@item -mbuild-constants
0c2d1a2a 7039Normally GCC examines a 32- or 64-bit integer constant to
74291a4b
MM
7040see if it can construct it from smaller constants in two or three
7041instructions. If it cannot, it will output the constant as a literal and
956d6950 7042generate code to load it from the data segment at runtime.
74291a4b 7043
0c2d1a2a 7044Use this option to require GCC to construct @emph{all} integer constants
74291a4b
MM
7045using code, even if it takes more instructions (the maximum is six).
7046
7047You would typically use this option to build a shared library dynamic
7048loader. Itself a shared library, it must relocate itself in memory
7049before it can find the variables and constants in its own data segment.
956d6950
JL
7050
7051@item -malpha-as
7052@itemx -mgas
7053Select whether to generate code to be assembled by the vendor-supplied
7054assembler (@samp{-malpha-as}) or by the GNU assembler @samp{-mgas}.
7055
7056@item -mbwx
7057@itemx -mno-bwx
7058@itemx -mcix
7059@itemx -mno-cix
7060@itemx -mmax
7061@itemx -mno-max
0c2d1a2a 7062Indicate whether GCC should generate code to use the optional BWX,
956d6950
JL
7063CIX, and MAX instruction sets. The default is to use the instruction sets
7064supported by the CPU type specified via @samp{-mcpu=} option or that
0c2d1a2a 7065of the CPU on which GCC was built if none was specified.
956d6950 7066
956d6950
JL
7067@item -mcpu=@var{cpu_type}
7068Set the instruction set, register set, and instruction scheduling
7069parameters for machine type @var{cpu_type}. You can specify either the
0c2d1a2a 7070@samp{EV} style name or the corresponding chip number. GCC
956d6950
JL
7071supports scheduling parameters for the EV4 and EV5 family of processors
7072and will choose the default values for the instruction set from
7073the processor you specify. If you do not specify a processor type,
0c2d1a2a 7074GCC will default to the processor on which the compiler was built.
956d6950
JL
7075
7076Supported values for @var{cpu_type} are
7077
7078@table @samp
7079@item ev4
7080@itemx 21064
7081Schedules as an EV4 and has no instruction set extensions.
7082
7083@item ev5
7084@itemx 21164
7085Schedules as an EV5 and has no instruction set extensions.
7086
7087@item ev56
7088@itemx 21164a
7089Schedules as an EV5 and supports the BWX extension.
7090
7091@item pca56
4f69985c 7092@itemx 21164pc
956d6950
JL
7093@itemx 21164PC
7094Schedules as an EV5 and supports the BWX and MAX extensions.
7095
7096@item ev6
7097@itemx 21264
7098Schedules as an EV5 (until Digital releases the scheduling parameters
7099for the EV6) and supports the BWX, CIX, and MAX extensions.
4f69985c
RH
7100@end table
7101
7102@item -mmemory-latency=@var{time}
7103Sets the latency the scheduler should assume for typical memory
7104references as seen by the application. This number is highly
b192711e 7105dependent on the memory access patterns used by the application
4f69985c
RH
7106and the size of the external cache on the machine.
7107
7108Valid options for @var{time} are
7109
7110@table @samp
7111@item @var{number}
7112A decimal number representing clock cycles.
7113
7114@item L1
7115@itemx L2
7116@itemx L3
7117@itemx main
7118The compiler contains estimates of the number of clock cycles for
7119``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
7120(also called Dcache, Scache, and Bcache), as well as to main memory.
7121Note that L3 is only valid for EV5.
7122
956d6950 7123@end table
74291a4b
MM
7124@end table
7125
7126@node Clipper Options
7127@subsection Clipper Options
7128
7129These @samp{-m} options are defined for the Clipper implementations:
7130
2642624b 7131@table @gcctabopt
74291a4b
MM
7132@item -mc300
7133Produce code for a C300 Clipper processor. This is the default.
7134
62a1403d 7135@item -mc400
74291a4b
MM
7136Produce code for a C400 Clipper processor i.e. use floating point
7137registers f8..f15.
7138@end table
7139
7140@node H8/300 Options
7141@subsection H8/300 Options
7142
7143These @samp{-m} options are defined for the H8/300 implementations:
7144
2642624b 7145@table @gcctabopt
74291a4b
MM
7146@item -mrelax
7147Shorten some address references at link time, when possible; uses the
7148linker option @samp{-relax}. @xref{H8/300,, @code{ld} and the H8/300,
7149ld.info, Using ld}, for a fuller description.
7150
7151@item -mh
7152Generate code for the H8/300H.
7153
dcb9d1f0
JL
7154@item -ms
7155Generate code for the H8/S.
7156
17f0f8fa
KH
7157@item -ms2600
7158Generate code for the H8/S2600. This switch must be used with -ms.
7159
74291a4b
MM
7160@item -mint32
7161Make @code{int} data 32 bits by default.
7162
7163@item -malign-300
2c54abce
KH
7164On the H8/300H and H8/S, use the same alignment rules as for the H8/300.
7165The default for the H8/300H and H8/S is to align longs and floats on 4
7166byte boundaries.
74291a4b 7167@samp{-malign-300} causes them to be aligned on 2 byte boundaries.
2c54abce 7168This option has no effect on the H8/300.
74291a4b
MM
7169@end table
7170
7171@node SH Options
7172@subsection SH Options
7173
7174These @samp{-m} options are defined for the SH implementations:
7175
2642624b 7176@table @gcctabopt
74291a4b
MM
7177@item -m1
7178Generate code for the SH1.
7179
7180@item -m2
7181Generate code for the SH2.
7182
7183@item -m3
7184Generate code for the SH3.
7185
7186@item -m3e
7187Generate code for the SH3e.
7188
3cadd778
AO
7189@item -m4-nofpu
7190Generate code for the SH4 without a floating-point unit.
7191
7192@item -m4-single-only
7193Generate code for the SH4 with a floating-point unit that only
7194supports single-precision arithmentic.
7195
7196@item -m4-single
7197Generate code for the SH4 assuming the floating-point unit is in
7198single-precision mode by default.
7199
7200@item -m4
7201Generate code for the SH4.
7202
74291a4b
MM
7203@item -mb
7204Compile code for the processor in big endian mode.
7205
7206@item -ml
7207Compile code for the processor in little endian mode.
7208
3d5a0820
R
7209@item -mdalign
7210Align doubles at 64 bit boundaries. Note that this changes the calling
7211conventions, and thus some functions from the standard C library will
7212not work unless you recompile it first with -mdalign.
7213
74291a4b
MM
7214@item -mrelax
7215Shorten some address references at link time, when possible; uses the
7216linker option @samp{-relax}.
3cadd778
AO
7217
7218@item -mbigtable
7219Use 32-bit offsets in @code{switch} tables. The default is to use
722016-bit offsets.
7221
7222@item -mfmovd
7223Enable the use of the instruction @code{fmovd}.
7224
7225@item -mhitachi
7226Comply with the calling conventions defined by Hitachi.
7227
7228@item -mnomacsave
7229Mark the @code{MAC} register as call-clobbered, even if
bedc7537 7230@option{-mhitachi} is given.
3cadd778
AO
7231
7232@item -misize
7233Dump instruction size and location in the assembly code.
7234
7235@item -mpadstruct
7236This option is deprecated. It pads structures to multiple of 4 bytes,
7237which is incompatible with the SH ABI.
7238
7239@item -mspace
bedc7537 7240Optimize for space instead of speed. Implied by @option{-Os}.
1a66cd67
AO
7241
7242@item -mprefergot
7243When generating position-independent code, emit function calls using
7244the Global Offset Table instead of the Procedure Linkage Table.
93ca1662
NY
7245
7246@item -musermode
7247Generate a library function call to invalidate instruction cache
7248entries, after fixing up a trampoline. This library function call
7249doesn't assume it can write to the whole memory address space. This
7250is the default when the target is @code{sh-*-linux*}.
74291a4b
MM
7251@end table
7252
7253@node System V Options
7254@subsection Options for System V
7255
7256These additional options are available on System V Release 4 for
7257compatibility with other compilers on those systems:
7258
2642624b 7259@table @gcctabopt
74291a4b
MM
7260@item -G
7261Create a shared object.
7262It is recommended that @samp{-symbolic} or @samp{-shared} be used instead.
7263
7264@item -Qy
7265Identify the versions of each tool used by the compiler, in a
7266@code{.ident} assembler directive in the output.
7267
7268@item -Qn
7269Refrain from adding @code{.ident} directives to the output file (this is
7270the default).
7271
bedc7537 7272@item -YP,@var{dirs}
74291a4b
MM
7273Search the directories @var{dirs}, and no others, for libraries
7274specified with @samp{-l}.
7275
bedc7537
NC
7276@item -Ym,@var{dir}
7277Look in the directory @var{dir} to find the M4 preprocessor.
74291a4b
MM
7278The assembler uses this option.
7279@c This is supposed to go with a -Yd for predefined M4 macro files, but
7280@c the generic assembler that comes with Solaris takes just -Ym.
7281@end table
7282
282a61e6
MH
7283@node TMS320C3x/C4x Options
7284@subsection TMS320C3x/C4x Options
7285@cindex TMS320C3x/C4x Options
7286
7287These @samp{-m} options are defined for TMS320C3x/C4x implementations:
7288
2642624b 7289@table @gcctabopt
282a61e6
MH
7290
7291@item -mcpu=@var{cpu_type}
7292Set the instruction set, register set, and instruction scheduling
7293parameters for machine type @var{cpu_type}. Supported values for
7294@var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
7295@samp{c44}. The default is @samp{c40} to generate code for the
7296TMS320C40.
7297
7298@item -mbig-memory
7299@item -mbig
7300@itemx -msmall-memory
7301@itemx -msmall
7302Generates code for the big or small memory model. The small memory
7303model assumed that all data fits into one 64K word page. At run-time
7304the data page (DP) register must be set to point to the 64K page
7305containing the .bss and .data program sections. The big memory model is
7306the default and requires reloading of the DP register for every direct
7307memory access.
7308
7309@item -mbk
7310@itemx -mno-bk
7311Allow (disallow) allocation of general integer operands into the block
7312count register BK.
7313
7314@item -mdb
7315@itemx -mno-db
7316Enable (disable) generation of code using decrement and branch,
7317DBcond(D), instructions. This is enabled by default for the C4x. To be
7318on the safe side, this is disabled for the C3x, since the maximum
7319iteration count on the C3x is 2^23 + 1 (but who iterates loops more than
73202^23 times on the C3x?). Note that GCC will try to reverse a loop so
7321that it can utilise the decrement and branch instruction, but will give
7322up if there is more than one memory reference in the loop. Thus a loop
7323where the loop counter is decremented can generate slightly more
7324efficient code, in cases where the RPTB instruction cannot be utilised.
7325
7326@item -mdp-isr-reload
7327@itemx -mparanoid
7328Force the DP register to be saved on entry to an interrupt service
7329routine (ISR), reloaded to point to the data section, and restored on
7330exit from the ISR. This should not be required unless someone has
7331violated the small memory model by modifying the DP register, say within
7332an object library.
7333
7334@item -mmpyi
7335@itemx -mno-mpyi
7336For the C3x use the 24-bit MPYI instruction for integer multiplies
7337instead of a library call to guarantee 32-bit results. Note that if one
7338of the operands is a constant, then the multiplication will be performed
7339using shifts and adds. If the -mmpyi option is not specified for the C3x,
7340then squaring operations are performed inline instead of a library call.
7341
7342@item -mfast-fix
7343@itemx -mno-fast-fix
7344The C3x/C4x FIX instruction to convert a floating point value to an
7345integer value chooses the nearest integer less than or equal to the
7346floating point value rather than to the nearest integer. Thus if the
7347floating point number is negative, the result will be incorrectly
7348truncated an additional code is necessary to detect and correct this
7349case. This option can be used to disable generation of the additional
7350code required to correct the result.
7351
7352@item -mrptb
7353@itemx -mno-rptb
7354Enable (disable) generation of repeat block sequences using the RPTB
7355instruction for zero overhead looping. The RPTB construct is only used
7356for innermost loops that do not call functions or jump across the loop
7357boundaries. There is no advantage having nested RPTB loops due to the
7358overhead required to save and restore the RC, RS, and RE registers.
7359This is enabled by default with -O2.
7360
7361@item -mrpts=@var{count}
7362@itemx -mno-rpts
7363Enable (disable) the use of the single instruction repeat instruction
7364RPTS. If a repeat block contains a single instruction, and the loop
7365count can be guaranteed to be less than the value @var{count}, GCC will
7366emit a RPTS instruction instead of a RPTB. If no value is specified,
7367then a RPTS will be emitted even if the loop count cannot be determined
7368at compile time. Note that the repeated instruction following RPTS does
7369not have to be reloaded from memory each iteration, thus freeing up the
b192711e 7370CPU buses for operands. However, since interrupts are blocked by this
282a61e6
MH
7371instruction, it is disabled by default.
7372
7373@item -mloop-unsigned
7374@itemx -mno-loop-unsigned
7375The maximum iteration count when using RPTS and RPTB (and DB on the C40)
7376is 2^31 + 1 since these instructions test if the iteration count is
7377negative to terminate the loop. If the iteration count is unsigned
7378there is a possibility than the 2^31 + 1 maximum iteration count may be
7379exceeded. This switch allows an unsigned iteration count.
7380
7381@item -mti
7382Try to emit an assembler syntax that the TI assembler (asm30) is happy
7383with. This also enforces compatibility with the API employed by the TI
7384C3x C compiler. For example, long doubles are passed as structures
7385rather than in floating point registers.
7386
7387@item -mregparm
7388@itemx -mmemparm
7389Generate code that uses registers (stack) for passing arguments to functions.
7390By default, arguments are passed in registers where possible rather
7391than by pushing arguments on to the stack.
7392
7393@item -mparallel-insns
7394@itemx -mno-parallel-insns
7395Allow the generation of parallel instructions. This is enabled by
7396default with -O2.
7397
7398@item -mparallel-mpy
7399@itemx -mno-parallel-mpy
7400Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
7401provided -mparallel-insns is also specified. These instructions have
7402tight register constraints which can pessimize the code generation
7403of large functions.
7404
7405@end table
7406
f84271d9
JL
7407@node V850 Options
7408@subsection V850 Options
7409@cindex V850 Options
7410
7411These @samp{-m} options are defined for V850 implementations:
7412
2642624b 7413@table @gcctabopt
f84271d9
JL
7414@item -mlong-calls
7415@itemx -mno-long-calls
7416Treat all calls as being far away (near). If calls are assumed to be
7417far away, the compiler will always load the functions address up into a
7418register, and call indirect through the pointer.
7419
7420@item -mno-ep
bd762873 7421@itemx -mep
f84271d9
JL
7422Do not optimize (do optimize) basic blocks that use the same index
7423pointer 4 or more times to copy pointer into the @code{ep} register, and
7424use the shorter @code{sld} and @code{sst} instructions. The @samp{-mep}
7425option is on by default if you optimize.
7426
7427@item -mno-prolog-function
7428@itemx -mprolog-function
7429Do not use (do use) external functions to save and restore registers at
7430the prolog and epilog of a function. The external functions are slower,
7431but use less code space if more than one function saves the same number
7432of registers. The @samp{-mprolog-function} option is on by default if
7433you optimize.
7434
7435@item -mspace
7436Try to make the code as small as possible. At present, this just turns
7437on the @samp{-mep} and @samp{-mprolog-function} options.
7438
7439@item -mtda=@var{n}
7440Put static or global variables whose size is @var{n} bytes or less into
7441the tiny data area that register @code{ep} points to. The tiny data
7442area can hold up to 256 bytes in total (128 bytes for byte references).
7443
7444@item -msda=@var{n}
7445Put static or global variables whose size is @var{n} bytes or less into
7446the small data area that register @code{gp} points to. The small data
7447area can hold up to 64 kilobytes.
7448
7449@item -mzda=@var{n}
7450Put static or global variables whose size is @var{n} bytes or less into
7451the first 32 kilobytes of memory.
e9a25f70 7452
48f0be1b
SC
7453@item -mv850
7454Specify that the target processor is the V850.
7455
e9a25f70
JL
7456@item -mbig-switch
7457Generate code suitable for big switch tables. Use this option only if
7458the assembler/linker complain about out of range branches within a switch
7459table.
f84271d9
JL
7460@end table
7461
56b2d7a7
JL
7462@node ARC Options
7463@subsection ARC Options
7464@cindex ARC Options
7465
7466These options are defined for ARC implementations:
7467
2642624b 7468@table @gcctabopt
56b2d7a7
JL
7469@item -EL
7470Compile code for little endian mode. This is the default.
7471
7472@item -EB
7473Compile code for big endian mode.
7474
7475@item -mmangle-cpu
7476Prepend the name of the cpu to all public symbol names.
7477In multiple-processor systems, there are many ARC variants with different
7478instruction and register set characteristics. This flag prevents code
7479compiled for one cpu to be linked with code compiled for another.
7480No facility exists for handling variants that are "almost identical".
7481This is an all or nothing option.
7482
7483@item -mcpu=@var{cpu}
7484Compile code for ARC variant @var{cpu}.
7485Which variants are supported depend on the configuration.
7486All variants support @samp{-mcpu=base}, this is the default.
7487
7488@item -mtext=@var{text section}
59d40964
AS
7489@itemx -mdata=@var{data section}
7490@itemx -mrodata=@var{readonly data section}
56b2d7a7
JL
7491Put functions, data, and readonly data in @var{text section},
7492@var{data section}, and @var{readonly data section} respectively
7493by default. This can be overridden with the @code{section} attribute.
0b433de6 7494@xref{Variable Attributes}.
56b2d7a7
JL
7495
7496@end table
7497
83575957
ID
7498@node NS32K Options
7499@subsection NS32K Options
7500@cindex NS32K options
7501
7502These are the @samp{-m} options defined for the 32000 series. The default
7503values for these options depends on which style of 32000 was selected when
7504the compiler was configured; the defaults for the most common choices are
7505given below.
7506
2642624b 7507@table @gcctabopt
83575957
ID
7508@item -m32032
7509@itemx -m32032
7510Generate output for a 32032. This is the default
7511when the compiler is configured for 32032 and 32016 based systems.
7512
7513@item -m32332
7514@itemx -m32332
7515Generate output for a 32332. This is the default
7516when the compiler is configured for 32332-based systems.
7517
7518@item -m32532
7519@itemx -m32532
7520Generate output for a 32532. This is the default
7521when the compiler is configured for 32532-based systems.
7522
7523@item -m32081
7524Generate output containing 32081 instructions for floating point.
7525This is the default for all systems.
7526
7527@item -m32381
7528Generate output containing 32381 instructions for floating point. This
7529also implies @samp{-m32081}. The 32381 is only compatible with the 32332
7530and 32532 cpus. This is the default for the pc532-netbsd configuration.
7531
7532@item -mmulti-add
7533Try and generate multiply-add floating point instructions @code{polyF}
7534and @code{dotF}. This option is only available if the @samp{-m32381}
7535option is in effect. Using these instructions requires changes to to
7536register allocation which generally has a negative impact on
7537performance. This option should only be enabled when compiling code
7538particularly likely to make heavy use of multiply-add instructions.
7539
7540@item -mnomulti-add
7541Do not try and generate multiply-add floating point instructions
7542@code{polyF} and @code{dotF}. This is the default on all platforms.
7543
7544@item -msoft-float
7545Generate output containing library calls for floating point.
7546@strong{Warning:} the requisite libraries may not be available.
7547
7548@item -mnobitfield
7549Do not use the bit-field instructions. On some machines it is faster to
7550use shifting and masking operations. This is the default for the pc532.
7551
7552@item -mbitfield
7553Do use the bit-field instructions. This is the default for all platforms
7554except the pc532.
7555
7556@item -mrtd
7557Use a different function-calling convention, in which functions
7558that take a fixed number of arguments return pop their
7559arguments on return with the @code{ret} instruction.
7560
7561This calling convention is incompatible with the one normally
7562used on Unix, so you cannot use it if you need to call libraries
7563compiled with the Unix compiler.
7564
7565Also, you must provide function prototypes for all functions that
7566take variable numbers of arguments (including @code{printf});
7567otherwise incorrect code will be generated for calls to those
7568functions.
7569
7570In addition, seriously incorrect code will result if you call a
7571function with too many arguments. (Normally, extra arguments are
7572harmlessly ignored.)
7573
7574This option takes its name from the 680x0 @code{rtd} instruction.
7575
7576
7577@item -mregparam
7578Use a different function-calling convention where the first two arguments
7579are passed in registers.
7580
7581This calling convention is incompatible with the one normally
7582used on Unix, so you cannot use it if you need to call libraries
7583compiled with the Unix compiler.
7584
7585@item -mnoregparam
7586Do not pass any arguments in registers. This is the default for all
7587targets.
7588
7589@item -msb
7590It is OK to use the sb as an index register which is always loaded with
7591zero. This is the default for the pc532-netbsd target.
7592
7593@item -mnosb
7594The sb register is not available for use or has not been initialized to
7595zero by the run time system. This is the default for all targets except
7596the pc532-netbsd. It is also implied whenever @samp{-mhimem} or
7597@samp{-fpic} is set.
7598
7599@item -mhimem
7600Many ns32000 series addressing modes use displacements of up to 512MB.
7601If an address is above 512MB then displacements from zero can not be used.
7602This option causes code to be generated which can be loaded above 512MB.
7603This may be useful for operating systems or ROM code.
7604
7605@item -mnohimem
7606Assume code will be loaded in the first 512MB of virtual address space.
7607This is the default for all platforms.
7608
7609
7610@end table
7611
052a4b28
DC
7612@node AVR Options
7613@subsection AVR Options
7614@cindex AVR Options
7615
7616These options are defined for AVR implementations:
7617
2642624b 7618@table @gcctabopt
052a4b28 7619@item -mmcu=@var{mcu}
3a69a7d5
MM
7620Specify ATMEL AVR instruction set or MCU type.
7621
7622Instruction set avr1 is for the minimal AVR core, not supported by the C
7623compiler, only for assembler programs (MCU types: at90s1200, attiny10,
7624attiny11, attiny12, attiny15, attiny28).
7625
7626Instruction set avr2 (default) is for the classic AVR core with up to
76278K program memory space (MCU types: at90s2313, at90s2323, attiny22,
7628at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
7629at90c8534, at90s8535).
7630
7631Instruction set avr3 is for the classic AVR core with up to 128K program
7632memory space (MCU types: atmega103, atmega603).
7633
7634Instruction set avr4 is for the enhanced AVR core with up to 8K program
7635memory space (MCU types: atmega83, atmega85).
7636
7637Instruction set avr5 is for the enhanced AVR core with up to 128K program
7638memory space (MCU types: atmega161, atmega163, atmega32, at94k).
052a4b28
DC
7639
7640@item -msize
3a69a7d5 7641Output instruction sizes to the asm file.
052a4b28
DC
7642
7643@item -minit-stack=@var{N}
3a69a7d5
MM
7644Specify the initial stack address, which may be a symbol or numeric value,
7645__stack is the default.
052a4b28
DC
7646
7647@item -mno-interrupts
7648Generated code is not compatible with hardware interrupts.
7649Code size will be smaller.
7650
7651@item -mcall-prologues
7652Functions prologues/epilogues expanded as call to appropriate
7653subroutines. Code size will be smaller.
3a69a7d5
MM
7654
7655@item -mno-tablejump
7656Do not generate tablejump insns which sometimes increase code size.
7657
7658@item -mtiny-stack
7659Change only the low 8 bits of the stack pointer.
052a4b28
DC
7660@end table
7661
789a3090
NC
7662@node MCore Options
7663@subsection MCore Options
7664@cindex MCore options
7665
7666These are the @samp{-m} options defined for the Motorola M*Core
7667processors.
7668
2642624b 7669@table @gcctabopt
789a3090
NC
7670
7671@item -mhardlit
7672@itemx -mhardlit
7673@itemx -mno-hardlit
7674Inline constants into the code stream if it can be done in two
7675instructions or less.
7676
7677@item -mdiv
7678@itemx -mdiv
7679@itemx -mno-div
7680Use the divide instruction. (Enabled by default).
7681
7682@item -mrelax-immediate
7683@itemx -mrelax-immediate
7684@itemx -mno-relax-immediate
b192711e 7685Allow arbitrary sized immediates in bit operations.
789a3090
NC
7686
7687@item -mwide-bitfields
7688@itemx -mwide-bitfields
7689@itemx -mno-wide-bitfields
7690Always treat bitfields as int-sized.
7691
7692@item -m4byte-functions
7693@itemx -m4byte-functions
7694@itemx -mno-4byte-functions
b192711e 7695Force all functions to be aligned to a four byte boundary.
789a3090
NC
7696
7697@item -mcallgraph-data
7698@itemx -mcallgraph-data
7699@itemx -mno-callgraph-data
7700Emit callgraph information.
7701
7702@item -mslow-bytes
7703@itemx -mslow-bytes
7704@itemx -mno-slow-bytes
7705Prefer word access when reading byte quantities.
7706
7707@item -mlittle-endian
7708@itemx -mlittle-endian
7709@itemx -mbig-endian
b192711e 7710Generate code for a little endian target.
789a3090
NC
7711
7712@item -m210
7713@itemx -m210
7714@itemx -m340
7715Generate code for the 210 processor.
789a3090 7716@end table
83575957 7717
df6194d4
JW
7718@node IA-64 Options
7719@subsection IA-64 Options
7720@cindex IA-64 Options
7721
7722These are the @samp{-m} options defined for the Intel IA-64 architecture.
7723
7724@table @gcctabopt
7725@item -mbig-endian
7726Generate code for a big endian target. This is the default for HPUX.
7727
7728@item -mlittle-endian
7729Generate code for a little endian target. This is the default for AIX5
7730and Linux.
7731
7732@item -mgnu-as
7733@itemx -mno-gnu-as
15d3a111
JW
7734Generate (or don't) code for the GNU assembler. This is the default.
7735@c Also, this is the default if the configure option @samp{--with-gnu-as}
7736@c is used.
df6194d4
JW
7737
7738@item -mgnu-ld
7739@itemx -mno-gnu-ld
15d3a111
JW
7740Generate (or don't) code for the GNU linker. This is the default.
7741@c Also, this is the default if the configure option @samp{--with-gnu-ld}
7742@c is used.
df6194d4
JW
7743
7744@item -mno-pic
15d3a111
JW
7745Generate code that does not use a global pointer register. The result
7746is not position independent code, and violates the IA-64 ABI.
df6194d4
JW
7747
7748@item -mvolatile-asm-stop
7749@itemx -mno-volatile-asm-stop
15d3a111
JW
7750Generate (or don't) a stop bit immediately before and after volatile asm
7751statements.
df6194d4
JW
7752
7753@item -mb-step
7754Generate code that works around Itanium B step errata.
7755
7756@item -mregister-names
7757@itemx -mno-register-names
15d3a111
JW
7758Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
7759the stacked registers. This may make assembler output more readable.
df6194d4
JW
7760
7761@item -mno-sdata
7762@itemx -msdata
15d3a111
JW
7763Disable (or enable) optimizations that use the small data section. This may
7764be useful for working around optimizer bugs.
df6194d4
JW
7765
7766@item -mconstant-gp
7767Generate code that uses a single constant global pointer value. This is
7768useful when compiling kernel code.
7769
7770@item -mauto-pic
7771Generate code that is self-relocatable. This implies @samp{-mconstant-gp}.
7772This is useful when compiling firmware code.
7773
7774@item -minline-divide-min-latency
7775Generate code for inline divides using the minimum latency algorithm.
7776
7777@item -minline-divide-max-throughput
7778Generate code for inline divides using the maximum throughput algorithm.
7779
7780@item -mno-dwarf2-asm
7781@itemx -mdwarf2-asm
15d3a111
JW
7782Don't (or do) generate assembler code for the DWARF2 line number debugging
7783info. This may be useful when not using the GNU assembler.
df6194d4
JW
7784
7785@item -mfixed-range=@var{register range}
7786Generate code treating the given register range as fixed registers.
7787A fixed register is one that the register allocator can not use. This is
7788useful when compiling kernel code. A register range is specified as
7789two registers separated by a dash. Multiple register ranges can be
7790specified separated by a comma.
7791@end table
7792
e8ad90e5
MM
7793@node D30V Options
7794@subsection D30V Options
7795@cindex D30V Options
7796
7797These @samp{-m} options are defined for D30V implementations:
7798
2642624b 7799@table @gcctabopt
e8ad90e5
MM
7800@item -mextmem
7801Link the @samp{.text}, @samp{.data}, @samp{.bss}, @samp{.strings},
7802@samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections into external
7803memory, which starts at location @code{0x80000000}.
7804
7805@item -mextmemory
7806Same as the @samp{-mextmem} switch.
7807
7808@item -monchip
7809Link the @samp{.text} section into onchip text memory, which starts at
7810location @code{0x0}. Also link @samp{.data}, @samp{.bss},
7811@samp{.strings}, @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections
7812into onchip data memory, which starts at location @code{0x20000000}.
7813
7814@item -mno-asm-optimize
7815@itemx -masm-optimize
7816Disable (enable) passing @samp{-O} to the assembler when optimizing.
7817The assembler uses the @samp{-O} option to automatically parallelize
7818adjacent short instructions where possible.
7819
7820@item -mbranch-cost=@var{n}
7821Increase the internal costs of branches to @var{n}. Higher costs means
7822that the compiler will issue more instructions to avoid doing a branch.
7823The default is 2.
7824
7825@item -mcond-exec=@var{n}
7826Specify the maximum number of conditionally executed instructions that
7827replace a branch. The default is 4.
7828@end table
56b2d7a7 7829
74291a4b
MM
7830@node Code Gen Options
7831@section Options for Code Generation Conventions
7832@cindex code generation conventions
7833@cindex options, code generation
7834@cindex run-time options
7835
7836These machine-independent options control the interface conventions
7837used in code generation.
7838
7839Most of them have both positive and negative forms; the negative form
7840of @samp{-ffoo} would be @samp{-fno-foo}. In the table below, only
7841one of the forms is listed---the one which is not the default. You
7842can figure out the other form by either removing @samp{no-} or adding
7843it.
7844
2642624b 7845@table @gcctabopt
956d6950 7846@item -fexceptions
89ed4e9d 7847Enable exception handling. Generates extra code needed to propagate
c5c76735
JL
7848exceptions. For some targets, this implies GNU CC will generate frame
7849unwind information for all functions, which can produce significant data
7850size overhead, although it does not affect execution. If you do not
7851specify this option, GNU CC will enable it by default for languages like
7852C++ which normally require exception handling, and disable itfor
7853languages like C that do not normally require it. However, you may need
7854to enable this option when compiling C code that needs to interoperate
7855properly with exception handlers written in C++. You may also wish to
7856disable this option if you are compiling older C++ programs that don't
7857use exception handling.
956d6950 7858
14a774a9 7859@item -funwind-tables
bedc7537 7860Similar to @option{-fexceptions}, except that it will just generate any needed
14a774a9
RK
7861static data, but will not affect the generated code in any other way.
7862You will normally not enable this option; instead, a language processor
7863that needs this handling would enable it on your behalf.
7864
74291a4b
MM
7865@item -fpcc-struct-return
7866Return ``short'' @code{struct} and @code{union} values in memory like
7867longer ones, rather than in registers. This convention is less
7868efficient, but it has the advantage of allowing intercallability between
0c2d1a2a 7869GCC-compiled files and files compiled with other compilers.
74291a4b
MM
7870
7871The precise convention for returning structures in memory depends
7872on the target configuration macros.
7873
7874Short structures and unions are those whose size and alignment match
7875that of some integer type.
7876
7877@item -freg-struct-return
7878Use the convention that @code{struct} and @code{union} values are
7879returned in registers when possible. This is more efficient for small
7880structures than @samp{-fpcc-struct-return}.
7881
7882If you specify neither @samp{-fpcc-struct-return} nor its contrary
0c2d1a2a
JB
7883@samp{-freg-struct-return}, GCC defaults to whichever convention is
7884standard for the target. If there is no standard convention, GCC
7885defaults to @samp{-fpcc-struct-return}, except on targets where GCC
74291a4b
MM
7886is the principal compiler. In those cases, we can choose the standard,
7887and we chose the more efficient register return alternative.
7888
7889@item -fshort-enums
7890Allocate to an @code{enum} type only as many bytes as it needs for the
7891declared range of possible values. Specifically, the @code{enum} type
7892will be equivalent to the smallest integer type which has enough room.
7893
7894@item -fshort-double
7895Use the same size for @code{double} as for @code{float}.
7896
7897@item -fshared-data
7898Requests that the data and non-@code{const} variables of this
7899compilation be shared data rather than private data. The distinction
7900makes sense only on certain operating systems, where shared data is
7901shared between processes running the same program, while private data
7902exists in one copy per process.
7903
7904@item -fno-common
c5c76735 7905Allocate even uninitialized global variables in the data section of the
74291a4b
MM
7906object file, rather than generating them as common blocks. This has the
7907effect that if the same variable is declared (without @code{extern}) in
7908two different compilations, you will get an error when you link them.
7909The only reason this might be useful is if you wish to verify that the
7910program will work on other systems which always work this way.
7911
7912@item -fno-ident
7913Ignore the @samp{#ident} directive.
7914
7915@item -fno-gnu-linker
7916Do not output global initializations (such as C++ constructors and
7917destructors) in the form used by the GNU linker (on systems where the GNU
7918linker is the standard method of handling them). Use this option when
7919you want to use a non-GNU linker, which also requires using the
bedc7537
NC
7920@command{collect2} program to make sure the system linker includes
7921constructors and destructors. (@command{collect2} is included in the GCC
7922distribution.) For systems which @emph{must} use @command{collect2}, the
7923compiler driver @command{gcc} is configured to do this automatically.
74291a4b
MM
7924
7925@item -finhibit-size-directive
7926Don't output a @code{.size} assembler directive, or anything else that
7927would cause trouble if the function is split in the middle, and the
7928two halves are placed at locations far apart in memory. This option is
7929used when compiling @file{crtstuff.c}; you should not need to use it
7930for anything else.
7931
7932@item -fverbose-asm
7933Put extra commentary information in the generated assembly code to
7934make it more readable. This option is generally only of use to those
7935who actually need to read the generated assembly code (perhaps while
7936debugging the compiler itself).
7937
c85f7c16 7938@samp{-fno-verbose-asm}, the default, causes the
74291a4b
MM
7939extra information to be omitted and is useful when comparing two assembler
7940files.
7941
7942@item -fvolatile
7943Consider all memory references through pointers to be volatile.
7944
7945@item -fvolatile-global
7946Consider all memory references to extern and global data items to
0c2d1a2a 7947be volatile. GCC does not consider static data items to be volatile
ab87f8c8
JL
7948because of this switch.
7949
7950@item -fvolatile-static
7951Consider all memory references to static data to be volatile.
74291a4b
MM
7952
7953@item -fpic
7954@cindex global offset table
7955@cindex PIC
7956Generate position-independent code (PIC) suitable for use in a shared
7957library, if supported for the target machine. Such code accesses all
861bb6c1
JL
7958constant addresses through a global offset table (GOT). The dynamic
7959loader resolves the GOT entries when the program starts (the dynamic
0c2d1a2a 7960loader is not part of GCC; it is part of the operating system). If
861bb6c1
JL
7961the GOT size for the linked executable exceeds a machine-specific
7962maximum size, you get an error message from the linker indicating that
7963@samp{-fpic} does not work; in that case, recompile with @samp{-fPIC}
7964instead. (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
7965on the m68k and RS/6000. The 386 has no such limit.)
74291a4b
MM
7966
7967Position-independent code requires special support, and therefore works
0c2d1a2a 7968only on certain machines. For the 386, GCC supports PIC for System V
74291a4b
MM
7969but not for the Sun 386i. Code generated for the IBM RS/6000 is always
7970position-independent.
7971
74291a4b
MM
7972@item -fPIC
7973If supported for the target machine, emit position-independent code,
7974suitable for dynamic linking and avoiding any limit on the size of the
7975global offset table. This option makes a difference on the m68k, m88k,
7976and the Sparc.
7977
7978Position-independent code requires special support, and therefore works
7979only on certain machines.
7980
7981@item -ffixed-@var{reg}
7982Treat the register named @var{reg} as a fixed register; generated code
7983should never refer to it (except perhaps as a stack pointer, frame
7984pointer or in some other fixed role).
7985
7986@var{reg} must be the name of a register. The register names accepted
7987are machine-specific and are defined in the @code{REGISTER_NAMES}
7988macro in the machine description macro file.
7989
7990This flag does not have a negative form, because it specifies a
7991three-way choice.
7992
7993@item -fcall-used-@var{reg}
956d6950 7994Treat the register named @var{reg} as an allocable register that is
74291a4b
MM
7995clobbered by function calls. It may be allocated for temporaries or
7996variables that do not live across a call. Functions compiled this way
7997will not save and restore the register @var{reg}.
7998
cb2fdc84
GRK
7999It is an error to used this flag with the frame pointer or stack pointer.
8000Use of this flag for other registers that have fixed pervasive roles in
8001the machine's execution model will produce disastrous results.
74291a4b
MM
8002
8003This flag does not have a negative form, because it specifies a
8004three-way choice.
8005
8006@item -fcall-saved-@var{reg}
956d6950 8007Treat the register named @var{reg} as an allocable register saved by
74291a4b
MM
8008functions. It may be allocated even for temporaries or variables that
8009live across a call. Functions compiled this way will save and restore
8010the register @var{reg} if they use it.
8011
cb2fdc84
GRK
8012It is an error to used this flag with the frame pointer or stack pointer.
8013Use of this flag for other registers that have fixed pervasive roles in
8014the machine's execution model will produce disastrous results.
74291a4b
MM
8015
8016A different sort of disaster will result from the use of this flag for
8017a register in which function values may be returned.
8018
8019This flag does not have a negative form, because it specifies a
8020three-way choice.
8021
8022@item -fpack-struct
8023Pack all structure members together without holes. Usually you would
8024not want to use this option, since it makes the code suboptimal, and
8025the offsets of structure members won't agree with system libraries.
8026
861bb6c1 8027@item -fcheck-memory-usage
0c2d1a2a 8028Generate extra code to check each memory access. GCC will generate
861bb6c1 8029code that is suitable for a detector of bad memory accesses such as
7d384cc0 8030@file{Checker}.
861bb6c1 8031
d3111037
CB
8032Normally, you should compile all, or none, of your code with this option.
8033
8034If you do mix code compiled with and without this option,
8035you must ensure that all code that has side effects
8036and that is called by code compiled with this option
8037is, itself, compiled with this option.
8038If you do not, you might get erroneous messages from the detector.
8039
861bb6c1 8040If you use functions from a library that have side-effects (such as
d3111037 8041@code{read}), you might not be able to recompile the library and
861bb6c1 8042specify this option. In that case, you can enable the
0c2d1a2a 8043@samp{-fprefix-function-name} option, which requests GCC to encapsulate
861bb6c1
JL
8044your code and make other functions look as if they were compiled with
8045@samp{-fcheck-memory-usage}. This is done by calling ``stubs'',
8046which are provided by the detector. If you cannot find or build
d3111037 8047stubs for every function you call, you might have to specify
861bb6c1
JL
8048@samp{-fcheck-memory-usage} without @samp{-fprefix-function-name}.
8049
7d384cc0 8050If you specify this option, you can not use the @code{asm} or
c5c76735
JL
8051@code{__asm__} keywords in functions with memory checking enabled. GNU
8052CC cannot understand what the @code{asm} statement may do, and therefore
8053cannot generate the appropriate code, so it will reject it. However, if
ee457005
JM
8054you specify the function attribute @code{no_check_memory_usage}
8055(@pxref{Function Attributes}), GNU CC will disable memory checking within a
c5c76735
JL
8056function; you may use @code{asm} statements inside such functions. You
8057may have an inline expansion of a non-checked function within a checked
8058function; in that case GNU CC will not generate checks for the inlined
8059function's memory accesses.
8060
8061If you move your @code{asm} statements to non-checked inline functions
8062and they do access memory, you can add calls to the support code in your
7d384cc0
KR
8063inline function, to indicate any reads, writes, or copies being done.
8064These calls would be similar to those done in the stubs described above.
8065
861bb6c1 8066@item -fprefix-function-name
0c2d1a2a
JB
8067Request GCC to add a prefix to the symbols generated for function names.
8068GCC adds a prefix to the names of functions defined as well as
861bb6c1 8069functions called. Code compiled with this option and code compiled
d3111037 8070without the option can't be linked together, unless stubs are used.
861bb6c1
JL
8071
8072If you compile the following code with @samp{-fprefix-function-name}
8073@example
8074extern void bar (int);
8075void
8076foo (int a)
8077@{
8078 return bar (a + 5);
861bb6c1
JL
8079@}
8080@end example
8081
8082@noindent
0c2d1a2a 8083GCC will compile the code as if it was written:
861bb6c1
JL
8084@example
8085extern void prefix_bar (int);
8086void
8087prefix_foo (int a)
8088@{
8089 return prefix_bar (a + 5);
8090@}
8091@end example
8092This option is designed to be used with @samp{-fcheck-memory-usage}.
8093
07417085
KR
8094@item -finstrument-functions
8095Generate instrumentation calls for entry and exit to functions. Just
8096after function entry and just before function exit, the following
8097profiling functions will be called with the address of the current
8098function and its call site. (On some platforms,
8099@code{__builtin_return_address} does not work beyond the current
8100function, so the call site information may not be available to the
8101profiling functions otherwise.)
8102
8103@example
8104void __cyg_profile_func_enter (void *this_fn, void *call_site);
8105void __cyg_profile_func_exit (void *this_fn, void *call_site);
8106@end example
8107
8108The first argument is the address of the start of the current function,
8109which may be looked up exactly in the symbol table.
8110
8111This instrumentation is also done for functions expanded inline in other
8112functions. The profiling calls will indicate where, conceptually, the
8113inline function is entered and exited. This means that addressable
8114versions of such functions must be available. If all your uses of a
8115function are expanded inline, this may mean an additional expansion of
8116code size. If you use @samp{extern inline} in your C code, an
8117addressable version of such functions must be provided. (This is
8118normally the case anyways, but if you get lucky and the optimizer always
8119expands the functions inline, you might have gotten away without
8120providing static copies.)
8121
8122A function may be given the attribute @code{no_instrument_function}, in
8123which case this instrumentation will not be done. This can be used, for
8124example, for the profiling functions listed above, high-priority
8125interrupt routines, and any functions from which the profiling functions
8126cannot safely be called (perhaps signal handlers, if the profiling
8127routines generate output or allocate memory).
8128
861bb6c1
JL
8129@item -fstack-check
8130Generate code to verify that you do not go beyond the boundary of the
8131stack. You should specify this flag if you are running in an
8132environment with multiple threads, but only rarely need to specify it in
8133a single-threaded environment since stack overflow is automatically
8134detected on nearly all systems if there is only one stack.
8135
a157febd
GK
8136Note that this switch does not actually cause checking to be done; the
8137operating system must do that. The switch causes generation of code
8138to ensure that the operating system sees the stack being extended.
8139
8140@item -fstack-limit-register=@var{reg}
8141@itemx -fstack-limit-symbol=@var{sym}
8142@itemx -fno-stack-limit
8143Generate code to ensure that the stack does not grow beyond a certain value,
8144either the value of a register or the address of a symbol. If the stack
8145would grow beyond the value, a signal is raised. For most targets,
8146the signal is raised before the stack overruns the boundary, so
8147it is possible to catch the signal without taking special precautions.
8148
8149For instance, if the stack starts at address @samp{0x80000000} and grows
8150downwards you can use the flags
8151@samp{-fstack-limit-symbol=__stack_limit}
8152@samp{-Wl,--defsym,__stack_limit=0x7ffe0000} which will enforce a stack
8153limit of 128K.
8154
e5eb27e5
JL
8155@cindex aliasing of parameters
8156@cindex parameters, aliased
8157@item -fargument-alias
04afd9d6
JL
8158@itemx -fargument-noalias
8159@itemx -fargument-noalias-global
e5eb27e5
JL
8160Specify the possible relationships among parameters and between
8161parameters and global data.
8162
8163@samp{-fargument-alias} specifies that arguments (parameters) may
8164alias each other and may alias global storage.
8165@samp{-fargument-noalias} specifies that arguments do not alias
8166each other, but may alias global storage.
8167@samp{-fargument-noalias-global} specifies that arguments do not
8168alias each other and do not alias global storage.
8169
8170Each language will automatically use whatever option is required by
8171the language standard. You should not need to use these options yourself.
19283265
RH
8172
8173@item -fleading-underscore
8174This option and its counterpart, -fno-leading-underscore, forcibly
8175change the way C symbols are represented in the object file. One use
8176is to help link with legacy assembly code.
8177
8178Be warned that you should know what you are doing when invoking this
8179option, and that not all targets provide complete support for it.
74291a4b
MM
8180@end table
8181
ee457005
JM
8182@c man end
8183
74291a4b 8184@node Environment Variables
0c2d1a2a 8185@section Environment Variables Affecting GCC
74291a4b
MM
8186@cindex environment variables
8187
ee457005
JM
8188@c man begin ENVIRONMENT
8189
0c2d1a2a
JB
8190This section describes several environment variables that affect how GCC
8191operates. Some of them work by specifying directories or prefixes to use
56f48ce9 8192when searching for various kinds of files. Some are used to specify other
46103ab4 8193aspects of the compilation environment.
74291a4b
MM
8194
8195@ifclear INTERNALS
8196Note that you can also specify places to search using options such as
8197@samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
8198take precedence over places specified using environment variables, which
0c2d1a2a
JB
8199in turn take precedence over those specified by the configuration of GCC.
8200
74291a4b
MM
8201@end ifclear
8202@ifset INTERNALS
8203Note that you can also specify places to search using options such as
8204@samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
8205take precedence over places specified using environment variables, which
0c2d1a2a
JB
8206in turn take precedence over those specified by the configuration of GCC.
8207@xref{Driver}.
74291a4b
MM
8208@end ifset
8209
bedc7537 8210@table @env
ab87f8c8
JL
8211@item LANG
8212@itemx LC_CTYPE
8213@c @itemx LC_COLLATE
8214@itemx LC_MESSAGES
8215@c @itemx LC_MONETARY
8216@c @itemx LC_NUMERIC
8217@c @itemx LC_TIME
8218@itemx LC_ALL
8219@findex LANG
8220@findex LC_CTYPE
8221@c @findex LC_COLLATE
8222@findex LC_MESSAGES
8223@c @findex LC_MONETARY
8224@c @findex LC_NUMERIC
8225@c @findex LC_TIME
8226@findex LC_ALL
8227@cindex locale
0c2d1a2a
JB
8228These environment variables control the way that GCC uses
8229localization information that allow GCC to work with different
8230national conventions. GCC inspects the locale categories
bedc7537 8231@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
ab87f8c8
JL
8232so. These locale categories can be set to any value supported by your
8233installation. A typical value is @samp{en_UK} for English in the United
8234Kingdom.
8235
bedc7537 8236The @env{LC_CTYPE} environment variable specifies character
0c2d1a2a 8237classification. GCC uses it to determine the character boundaries in
ab87f8c8
JL
8238a string; this is needed for some multibyte encodings that contain quote
8239and escape characters that would otherwise be interpreted as a string
8240end or escape.
8241
bedc7537 8242The @env{LC_MESSAGES} environment variable specifies the language to
ab87f8c8
JL
8243use in diagnostic messages.
8244
bedc7537
NC
8245If the @env{LC_ALL} environment variable is set, it overrides the value
8246of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
8247and @env{LC_MESSAGES} default to the value of the @env{LANG}
0c2d1a2a 8248environment variable. If none of these variables are set, GCC
ab87f8c8
JL
8249defaults to traditional C English behavior.
8250
74291a4b
MM
8251@item TMPDIR
8252@findex TMPDIR
bedc7537 8253If @env{TMPDIR} is set, it specifies the directory to use for temporary
0c2d1a2a 8254files. GCC uses temporary files to hold the output of one stage of
74291a4b
MM
8255compilation which is to be used as input to the next stage: for example,
8256the output of the preprocessor, which is the input to the compiler
8257proper.
8258
8259@item GCC_EXEC_PREFIX
8260@findex GCC_EXEC_PREFIX
bedc7537 8261If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
74291a4b
MM
8262names of the subprograms executed by the compiler. No slash is added
8263when this prefix is combined with the name of a subprogram, but you can
8264specify a prefix that ends with a slash if you wish.
8265
bedc7537 8266If @env{GCC_EXEC_PREFIX} is not set, GNU CC will attempt to figure out
0deb20df
TT
8267an appropriate prefix to use based on the pathname it was invoked with.
8268
0c2d1a2a 8269If GCC cannot find the subprogram using the specified prefix, it
74291a4b
MM
8270tries looking in the usual places for the subprogram.
8271
bedc7537 8272The default value of @env{GCC_EXEC_PREFIX} is
74291a4b
MM
8273@file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
8274of @code{prefix} when you ran the @file{configure} script.
8275
8276Other prefixes specified with @samp{-B} take precedence over this prefix.
8277
8278This prefix is also used for finding files such as @file{crt0.o} that are
8279used for linking.
8280
8281In addition, the prefix is used in an unusual way in finding the
8282directories to search for header files. For each of the standard
8283directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
bedc7537 8284(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
74291a4b 8285replacing that beginning with the specified prefix to produce an
0c2d1a2a 8286alternate directory name. Thus, with @samp{-Bfoo/}, GCC will search
74291a4b
MM
8287@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
8288These alternate directories are searched first; the standard directories
8289come next.
8290
8291@item COMPILER_PATH
8292@findex COMPILER_PATH
bedc7537
NC
8293The value of @env{COMPILER_PATH} is a colon-separated list of
8294directories, much like @env{PATH}. GCC tries the directories thus
74291a4b 8295specified when searching for subprograms, if it can't find the
bedc7537 8296subprograms using @env{GCC_EXEC_PREFIX}.
74291a4b
MM
8297
8298@item LIBRARY_PATH
8299@findex LIBRARY_PATH
bedc7537
NC
8300The value of @env{LIBRARY_PATH} is a colon-separated list of
8301directories, much like @env{PATH}. When configured as a native compiler,
0c2d1a2a 8302GCC tries the directories thus specified when searching for special
bedc7537 8303linker files, if it can't find them using @env{GCC_EXEC_PREFIX}. Linking
0c2d1a2a 8304using GCC also uses these directories when searching for ordinary
74291a4b
MM
8305libraries for the @samp{-l} option (but directories specified with
8306@samp{-L} come first).
8307
8308@item C_INCLUDE_PATH
8309@itemx CPLUS_INCLUDE_PATH
8310@itemx OBJC_INCLUDE_PATH
8311@findex C_INCLUDE_PATH
8312@findex CPLUS_INCLUDE_PATH
8313@findex OBJC_INCLUDE_PATH
8314@c @itemx OBJCPLUS_INCLUDE_PATH
8315These environment variables pertain to particular languages. Each
8316variable's value is a colon-separated list of directories, much like
bedc7537 8317@env{PATH}. When GCC searches for header files, it tries the
74291a4b
MM
8318directories listed in the variable for the language you are using, after
8319the directories specified with @samp{-I} but before the standard header
8320file directories.
8321
8322@item DEPENDENCIES_OUTPUT
8323@findex DEPENDENCIES_OUTPUT
8324@cindex dependencies for make as output
8325If this variable is set, its value specifies how to output dependencies
8326for Make based on the header files processed by the compiler. This
8327output looks much like the output from the @samp{-M} option
8328(@pxref{Preprocessor Options}), but it goes to a separate file, and is
8329in addition to the usual results of compilation.
8330
bedc7537 8331The value of @env{DEPENDENCIES_OUTPUT} can be just a file name, in
74291a4b
MM
8332which case the Make rules are written to that file, guessing the target
8333name from the source file name. Or the value can have the form
8334@samp{@var{file} @var{target}}, in which case the rules are written to
8335file @var{file} using @var{target} as the target name.
56f48ce9
DB
8336
8337@item LANG
8338@findex LANG
8339@cindex locale definition
8340This variable is used to pass locale information to the compiler. One way in
8341which this information is used is to determine the character set to be used
8342when character literals, string literals and comments are parsed in C and C++.
8343When the compiler is configured to allow multibyte characters,
bedc7537 8344the following values for @env{LANG} are recognized:
56f48ce9 8345
2642624b 8346@table @samp
56f48ce9
DB
8347@item C-JIS
8348Recognize JIS characters.
8349@item C-SJIS
8350Recognize SJIS characters.
8351@item C-EUCJP
8352Recognize EUCJP characters.
8353@end table
8354
bedc7537 8355If @env{LANG} is not defined, or if it has some other value, then the
56f48ce9
DB
8356compiler will use mblen and mbtowc as defined by the default locale to
8357recognize and translate multibyte characters.
74291a4b
MM
8358@end table
8359
9d86bffc
JM
8360@c man end
8361
74291a4b
MM
8362@node Running Protoize
8363@section Running Protoize
8364
8365The program @code{protoize} is an optional part of GNU C. You can use
c1030c7c 8366it to add prototypes to a program, thus converting the program to ISO
74291a4b
MM
8367C in one respect. The companion program @code{unprotoize} does the
8368reverse: it removes argument types from any prototypes that are found.
8369
8370When you run these programs, you must specify a set of source files as
8371command line arguments. The conversion programs start out by compiling
8372these files to see what functions they define. The information gathered
8373about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
8374
8375After scanning comes actual conversion. The specified files are all
8376eligible to be converted; any files they include (whether sources or
8377just headers) are eligible as well.
8378
8379But not all the eligible files are converted. By default,
8380@code{protoize} and @code{unprotoize} convert only source and header
8381files in the current directory. You can specify additional directories
8382whose files should be converted with the @samp{-d @var{directory}}
8383option. You can also specify particular files to exclude with the
8384@samp{-x @var{file}} option. A file is converted if it is eligible, its
8385directory name matches one of the specified directory names, and its
8386name within the directory has not been excluded.
8387
8388Basic conversion with @code{protoize} consists of rewriting most
8389function definitions and function declarations to specify the types of
8390the arguments. The only ones not rewritten are those for varargs
8391functions.
8392
8393@code{protoize} optionally inserts prototype declarations at the
8394beginning of the source file, to make them available for any calls that
8395precede the function's definition. Or it can insert prototype
8396declarations with block scope in the blocks where undeclared functions
8397are called.
8398
8399Basic conversion with @code{unprotoize} consists of rewriting most
8400function declarations to remove any argument types, and rewriting
c1030c7c 8401function definitions to the old-style pre-ISO form.
74291a4b
MM
8402
8403Both conversion programs print a warning for any function declaration or
8404definition that they can't convert. You can suppress these warnings
8405with @samp{-q}.
8406
8407The output from @code{protoize} or @code{unprotoize} replaces the
8408original source file. The original file is renamed to a name ending
a7db8bbb
MK
8409with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
8410without the original @samp{.c} suffix). If the @samp{.save} (@samp{.sav}
8411for DOS) file already exists, then the source file is simply discarded.
74291a4b 8412
0c2d1a2a 8413@code{protoize} and @code{unprotoize} both depend on GCC itself to
74291a4b 8414scan the program and collect information about the functions it uses.
0c2d1a2a 8415So neither of these programs will work until GCC is installed.
74291a4b
MM
8416
8417Here is a table of the options you can use with @code{protoize} and
8418@code{unprotoize}. Each option works with both programs unless
8419otherwise stated.
8420
8421@table @code
8422@item -B @var{directory}
8423Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
8424usual directory (normally @file{/usr/local/lib}). This file contains
8425prototype information about standard system functions. This option
8426applies only to @code{protoize}.
8427
8428@item -c @var{compilation-options}
8429Use @var{compilation-options} as the options when running @code{gcc} to
8430produce the @samp{.X} files. The special option @samp{-aux-info} is
8431always passed in addition, to tell @code{gcc} to write a @samp{.X} file.
8432
8433Note that the compilation options must be given as a single argument to
8434@code{protoize} or @code{unprotoize}. If you want to specify several
8435@code{gcc} options, you must quote the entire set of compilation options
8436to make them a single word in the shell.
8437
8438There are certain @code{gcc} arguments that you cannot use, because they
8439would produce the wrong kind of output. These include @samp{-g},
8440@samp{-O}, @samp{-c}, @samp{-S}, and @samp{-o} If you include these in
8441the @var{compilation-options}, they are ignored.
8442
8443@item -C
a7db8bbb
MK
8444Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
8445systems) instead of @samp{.c}. This is convenient if you are converting
ee77eda5 8446a C program to C++. This option applies only to @code{protoize}.
74291a4b
MM
8447
8448@item -g
8449Add explicit global declarations. This means inserting explicit
8450declarations at the beginning of each source file for each function
8451that is called in the file and was not declared. These declarations
8452precede the first function definition that contains a call to an
8453undeclared function. This option applies only to @code{protoize}.
8454
8455@item -i @var{string}
8456Indent old-style parameter declarations with the string @var{string}.
8457This option applies only to @code{protoize}.
8458
8459@code{unprotoize} converts prototyped function definitions to old-style
8460function definitions, where the arguments are declared between the
8461argument list and the initial @samp{@{}. By default, @code{unprotoize}
8462uses five spaces as the indentation. If you want to indent with just
8463one space instead, use @samp{-i " "}.
8464
8465@item -k
8466Keep the @samp{.X} files. Normally, they are deleted after conversion
8467is finished.
8468
8469@item -l
8470Add explicit local declarations. @code{protoize} with @samp{-l} inserts
8471a prototype declaration for each function in each block which calls the
8472function without any declaration. This option applies only to
8473@code{protoize}.
8474
8475@item -n
8476Make no real changes. This mode just prints information about the conversions
8477that would have been done without @samp{-n}.
8478
8479@item -N
8480Make no @samp{.save} files. The original files are simply deleted.
8481Use this option with caution.
8482
8483@item -p @var{program}
8484Use the program @var{program} as the compiler. Normally, the name
8485@file{gcc} is used.
8486
8487@item -q
8488Work quietly. Most warnings are suppressed.
8489
8490@item -v
8491Print the version number, just like @samp{-v} for @code{gcc}.
8492@end table
8493
8494If you need special compiler options to compile one of your program's
8495source files, then you should generate that file's @samp{.X} file
8496specially, by running @code{gcc} on that source file with the
8497appropriate options and the option @samp{-aux-info}. Then run
8498@code{protoize} on the entire set of files. @code{protoize} will use
8499the existing @samp{.X} file because it is newer than the source file.
8500For example:
8501
8502@example
8503gcc -Dfoo=bar file1.c -aux-info
8504protoize *.c
8505@end example
8506
8507@noindent
8508You need to include the special files along with the rest in the
8509@code{protoize} command, even though their @samp{.X} files already
8510exist, because otherwise they won't get converted.
8511
8512@xref{Protoize Caveats}, for more information on how to use
8513@code{protoize} successfully.
8514
This page took 1.990238 seconds and 5 git commands to generate.