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