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