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