]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/invoke.texi
Update mainline egcs to gcc2 snapshot 971021.
[thirdparty/gcc.git] / gcc / invoke.texi
CommitLineData
861bb6c1 1@c Copyright (C) 1988,89,92,93,94,95,96,1997 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
6@chapter GNU CC Command Options
7@cindex GNU CC command options
8@cindex command options
9@cindex options, GNU CC command
10
11When you invoke GNU CC, it normally does preprocessing, compilation,
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
23Most of the command line options that you can use with GNU CC are useful
24for C programs; when an option is only useful with another language
25(usually C++), the explanation says so explicitly. If the description
26for a particular option does not mention a source language, you can use
27that option with all supported languages.
28
29@cindex C++ compilation options
30@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
31options for compiling C++ programs.
32
33@cindex grouping options
34@cindex options, grouping
35The @code{gcc} program accepts options and file names as operands. Many
36options have multiletter names; therefore multiple single-letter options
37may @emph{not} be grouped: @samp{-dr} is very different from @w{@samp{-d
38-r}}.
39
40@cindex order of options
41@cindex options, order
42You can mix options and other arguments. For the most part, the order
43you use doesn't matter. Order does matter when you use several options
44of the same kind; for example, if you specify @samp{-L} more than once,
45the directories are searched in the order specified.
46
47Many options have long names starting with @samp{-f} or with
48@samp{-W}---for example, @samp{-fforce-mem},
49@samp{-fstrength-reduce}, @samp{-Wformat} and so on. Most of
50these have both positive and negative forms; the negative form of
51@samp{-ffoo} would be @samp{-fno-foo}. This manual documents
52only one of these two forms, whichever one is not the default.
53
54@menu
55* Option Summary:: Brief list of all options, without explanations.
56* Overall Options:: Controlling the kind of output:
57 an executable, object files, assembler files,
58 or preprocessed source.
59* Invoking G++:: Compiling C++ programs.
60* C Dialect Options:: Controlling the variant of C language compiled.
61* C++ Dialect Options:: Variations on C++.
62* Warning Options:: How picky should the compiler be?
63* Debugging Options:: Symbol tables, measurements, and debugging dumps.
64* Optimize Options:: How much optimization?
65* Preprocessor Options:: Controlling header files and macro definitions.
66 Also, getting dependency information for Make.
67* Assembler Options:: Passing options to the assembler.
68* Link Options:: Specifying libraries and so on.
69* Directory Options:: Where to find header files and libraries.
70 Where to find the compiler executable files.
71* Target Options:: Running a cross-compiler, or an old version of GNU CC.
72* Submodel Options:: Specifying minor hardware or convention variations,
73 such as 68010 vs 68020.
74* Code Gen Options:: Specifying conventions for function calls, data layout
75 and register usage.
76* Environment Variables:: Env vars that affect GNU CC.
77* Running Protoize:: Automatically adding or removing function prototypes.
78@end menu
79
80@node Option Summary
81@section Option Summary
82
83Here is a summary of all the options, grouped by type. Explanations are
84in the following sections.
85
86@table @emph
87@item Overall Options
88@xref{Overall Options,,Options Controlling the Kind of Output}.
89@smallexample
90-c -S -E -o @var{file} -pipe -v -x @var{language}
91@end smallexample
92
93@item C Language Options
94@xref{C Dialect Options,,Options Controlling C Dialect}.
95@smallexample
861bb6c1 96-ansi -fallow-single-precision -fcond-mismatch -fno-asm
8c81598d 97-fno-builtin -ffreestanding -fhosted -fsigned-bitfields -fsigned-char
74291a4b
MM
98-funsigned-bitfields -funsigned-char -fwritable-strings
99-traditional -traditional-cpp -trigraphs
100@end smallexample
101
102@item C++ Language Options
103@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
104@smallexample
105-fall-virtual -fdollars-in-identifiers -felide-constructors
8c81598d
JM
106-fenum-int-equiv -fexternal-templates -ffor-scope -fno-for-scope
107-fhandle-signatures -fmemoize-lookups -fname-mangling-version-@var{n}
108-fno-default-inline -fno-gnu-keywords -fnonnull-objects -fguiding-decls
109-foperator-names -fstrict-prototype -fthis-is-variable
110-ftemplate-depth-@var{n} -nostdinc++ -traditional +e@var{n}
74291a4b
MM
111@end smallexample
112
113@item Warning Options
114@xref{Warning Options,,Options to Request or Suppress Warnings}.
115@smallexample
116-fsyntax-only -pedantic -pedantic-errors
117-w -W -Wall -Waggregate-return -Wbad-function-cast
8c81598d 118-Wcast-align -Wcast-qual -Wchar-subscript -Wcomment
74291a4b 119-Wconversion -Werror -Wformat
e9a25f70
JL
120-Wid-clash-@var{len} -Wimplicit -Wimplicit-int
121-Wimplicit-function-declarations -Wimport -Winline
861bb6c1 122-Wlarger-than-@var{len} -Wmain -Wmissing-declarations
74291a4b 123-Wmissing-prototypes -Wnested-externs
d770d3b3 124-Wno-import -Wold-style-cast -Woverloaded-virtual -Wparentheses
8c81598d
JM
125-Wpointer-arith -Wredundant-decls -Wreorder -Wreturn-type -Wshadow
126-Wsign-compare -Wstrict-prototypes -Wswitch -Wsynth
74291a4b 127-Wtemplate-debugging -Wtraditional -Wtrigraphs
8c81598d 128-Wundef -Wuninitialized -Wunused -Wwrite-strings
74291a4b
MM
129@end smallexample
130
131@item Debugging Options
132@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
133@smallexample
134-a -ax -d@var{letters} -fpretend-float
861bb6c1 135-fprofile-arcs -ftest-coverage
8c81598d 136-g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2
74291a4b
MM
137-ggdb -gstabs -gstabs+ -gxcoff -gxcoff+
138-p -pg -print-file-name=@var{library} -print-libgcc-file-name
139-print-prog-name=@var{program} -print-search-dirs -save-temps
140@end smallexample
141
142@item Optimization Options
143@xref{Optimize Options,,Options that Control Optimization}.
144@smallexample
861bb6c1 145-fbranch-probabilities
74291a4b
MM
146-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
147-fdelayed-branch -fexpensive-optimizations
148-ffast-math -ffloat-store -fforce-addr -fforce-mem
8c81598d
JM
149-ffunction-sections -finline-functions
150-fkeep-inline-functions -fno-default-inline
74291a4b 151-fno-defer-pop -fno-function-cse
8c660648 152-fno-inline -fno-peephole -fomit-frame-pointer -fregmove
6d6d0fa0 153-frerun-cse-after-loop -frerun-loop-opt -fschedule-insns
74291a4b
MM
154-fschedule-insns2 -fstrength-reduce -fthread-jumps
155-funroll-all-loops -funroll-loops
e5eb27e5 156-fmove-all-movables -freduce-all-givs
74291a4b
MM
157-O -O0 -O1 -O2 -O3
158@end smallexample
159
160@item Preprocessor Options
161@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
162@smallexample
163-A@var{question}(@var{answer}) -C -dD -dM -dN
164-D@var{macro}@r{[}=@var{defn}@r{]} -E -H
165-idirafter @var{dir}
166-include @var{file} -imacros @var{file}
167-iprefix @var{file} -iwithprefix @var{dir}
168-iwithprefixbefore @var{dir} -isystem @var{dir}
169-M -MD -MM -MMD -MG -nostdinc -P -trigraphs
170-undef -U@var{macro} -Wp,@var{option}
171@end smallexample
172
173@item Assembler Option
174@xref{Assembler Options,,Passing Options to the Assembler}.
175@smallexample
176-Wa,@var{option}
177@end smallexample
178
179@item Linker Options
180@xref{Link Options,,Options for Linking}.
181@smallexample
182@var{object-file-name} -l@var{library}
183-nostartfiles -nodefaultlibs -nostdlib
184-s -static -shared -symbolic
185-Wl,@var{option} -Xlinker @var{option}
186-u @var{symbol}
187@end smallexample
188
189@item Directory Options
190@xref{Directory Options,,Options for Directory Search}.
191@smallexample
8c81598d 192-B@var{prefix} -I@var{dir} -I- -L@var{dir} -specs=@var{file}
74291a4b
MM
193@end smallexample
194
195@item Target Options
196@c I wrote this xref this way to avoid overfull hbox. -- rms
197@xref{Target Options}.
198@smallexample
199-b @var{machine} -V @var{version}
200@end smallexample
201
202@item Machine Dependent Options
203@xref{Submodel Options,,Hardware Models and Configurations}.
204@smallexample
205@emph{M680x0 Options}
8c81598d
JM
206-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040
207-m68060 -m5200 -m68881 -mbitfield -mc68000 -mc68020 -mfpa
861bb6c1 208-mnobitfield -mrtd -mshort -msoft-float -malign-int
74291a4b
MM
209
210@emph{VAX Options}
211-mg -mgnu -munix
212
213@emph{SPARC Options}
ded17aad
DE
214-mcpu=@var{cpu type}
215-mtune=@var{cpu type}
216-mcmodel=@var{code model}
6d4312dd
DE
217-malign-jumps=@var{num} -malign-loops=@var{num}
218-malign-functions=@var{num}
ded17aad 219-m32 -m64
74291a4b 220-mapp-regs -mbroken-saverestore -mcypress -mepilogue
ded17aad
DE
221-mflat -mfpu -mhard-float -mhard-quad-float
222-mimpure-text -mlive-g0 -mno-app-regs -mno-epilogue
74291a4b
MM
223-mno-flat -mno-fpu -mno-impure-text
224-mno-stack-bias -mno-unaligned-doubles
225-msoft-float -msoft-quad-float -msparclite -mstack-bias
226-msupersparc -munaligned-doubles -mv8
227
228@emph{Convex Options}
229-mc1 -mc2 -mc32 -mc34 -mc38
230-margcount -mnoargcount
231-mlong32 -mlong64
232-mvolatile-cache -mvolatile-nocache
233
234@emph{AMD29K Options}
235-m29000 -m29050 -mbw -mnbw -mdw -mndw
236-mlarge -mnormal -msmall
237-mkernel-registers -mno-reuse-arg-regs
238-mno-stack-check -mno-storem-bug
239-mreuse-arg-regs -msoft-float -mstack-check
240-mstorem-bug -muser-registers
241
242@emph{ARM Options}
8c81598d
JM
243-mapcs-frame -mapcs-26 -mapcs-32
244-mlittle-endian -mbig-endian -mwords-little-endian
245-mshort-load-bytes -mno-short-load-bytes
246-msoft-float -mhard-float
247-mbsd -mxopen -mno-symrename
74291a4b 248
6d6d0fa0
JL
249@emph{MN10300 Options}
250-mmult-bug
251-mno-mult-bug
252
861bb6c1
JL
253@emph{M32R/D Options}
254-mcode-model=@var{model type} -msdata=@var{sdata type}
255-G @var{num}
256
74291a4b
MM
257@emph{M88K Options}
258-m88000 -m88100 -m88110 -mbig-pic
259-mcheck-zero-division -mhandle-large-shift
260-midentify-revision -mno-check-zero-division
261-mno-ocs-debug-info -mno-ocs-frame-position
262-mno-optimize-arg-area -mno-serialize-volatile
263-mno-underscores -mocs-debug-info
264-mocs-frame-position -moptimize-arg-area
265-mserialize-volatile -mshort-data-@var{num} -msvr3
266-msvr4 -mtrap-large-shift -muse-div-instruction
267-mversion-03.00 -mwarn-passed-structs
268
269@emph{RS/6000 and PowerPC Options}
8c81598d
JM
270-mcpu=@var{cpu type}
271-mtune=@var{cpu type}
74291a4b
MM
272-mpower -mno-power -mpower2 -mno-power2
273-mpowerpc -mno-powerpc
274-mpowerpc-gpopt -mno-powerpc-gpopt
275-mpowerpc-gfxopt -mno-powerpc-gfxopt
276-mnew-mnemonics -mno-new-mnemonics
277-mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc
861bb6c1 278-mxl-call -mno-xl-call -mthreads -mpe
74291a4b 279-msoft-float -mhard-float -mmultiple -mno-multiple
861bb6c1
JL
280-mstring -mno-string -mupdate -mno-update
281-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align
74291a4b
MM
282-mstrict-align -mno-strict-align -mrelocatable
283-mno-relocatable -mrelocatable-lib -mno-relocatable-lib
284-mtoc -mno-toc -mtraceback -mno-traceback
285-mlittle -mlittle-endian -mbig -mbig-endian
286-mcall-aix -mcall-sysv -mprototype -mno-prototype
e9a25f70
JL
287-msim -mmvme -mads -myellowknife -memb
288-msdata -msdata=@var{opt} -G @var{num}
74291a4b
MM
289
290@emph{RT Options}
291-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
292-mfull-fp-blocks -mhc-struct-return -min-line-mul
293-mminimum-fp-blocks -mnohc-struct-return
294
295@emph{MIPS Options}
8c81598d 296-mabicalls -mcpu=@var{cpu type} -membedded-data
74291a4b 297-membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64
8c81598d
JM
298-mgpopt -mhalf-pic -mhard-float -mint64 -mips1
299-mips2 -mips3 -mlong64 -mlong-calls -mmemcpy
74291a4b
MM
300-mmips-as -mmips-tfile -mno-abicalls
301-mno-embedded-data -mno-embedded-pic
302-mno-gpopt -mno-long-calls
303-mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats
8c81598d
JM
304-mrnames -msoft-float
305-m4650 -msingle-float -mmad
74291a4b
MM
306-mstats -EL -EB -G @var{num} -nocpp
307
308@emph{i386 Options}
8c81598d 309-m486 -m386 -mieee-fp -mno-fancy-math-387
74291a4b 310-mno-fp-ret-in-387 -msoft-float -msvr3-shlib
8c81598d
JM
311-mno-wide-multiply -mrtd -malign-double
312-mreg-alloc=@var{list} -mregparm=@var{num}
313-malign-jumps=@var{num} -malign-loops=@var{num}
74291a4b
MM
314-malign-functions=@var{num}
315
316@emph{HPPA Options}
8c81598d
JM
317-mbig-switch -mdisable-fpregs -mdisable-indexing -mfast-indirect-calls
318-mgas -mjump-in-delay -mlong-load-store -mno-big-switch -mno-disable-fpregs
319-mno-disable-indexing -mno-fast-indirect-calls -mno-gas
74291a4b
MM
320-mno-jump-in-delay
321-mno-long-load-store
e9a25f70
JL
322-mno-portable-runtime -mno-soft-float -mno-space -mno-space-regs
323-msoft-float
74291a4b 324-mpa-risc-1-0 -mpa-risc-1-1 -mportable-runtime
8c81598d 325-mschedule=@var{list} -mspace -mspace-regs
74291a4b
MM
326
327@emph{Intel 960 Options}
328-m@var{cpu type} -masm-compat -mclean-linkage
329-mcode-align -mcomplex-addr -mleaf-procedures
330-mic-compat -mic2.0-compat -mic3.0-compat
331-mintel-asm -mno-clean-linkage -mno-code-align
332-mno-complex-addr -mno-leaf-procedures
333-mno-old-align -mno-strict-align -mno-tail-call
334-mnumerics -mold-align -msoft-float -mstrict-align
335-mtail-call
336
337@emph{DEC Alpha Options}
338-mfp-regs -mno-fp-regs
8c81598d
JM
339-mno-soft-float -msoft-float
340-mieee -mieee-with-inexact -mieee-conformant
341-mfp-trap-mode -mfp-rounding-mode -mtrap-precision
74291a4b
MM
342-mbuild-constants
343
344@emph{Clipper Options}
8c81598d 345-mc300 -mc400
74291a4b
MM
346
347@emph{H8/300 Options}
dcb9d1f0 348-mrelax -mh -ms -mint32 -malign-300
74291a4b
MM
349
350@emph{SH Options}
351-m1 -m2 -m3 -m3e -mb -ml -mrelax
352
353@emph{System V Options}
354-Qy -Qn -YP,@var{paths} -Ym,@var{dir}
74291a4b 355
f84271d9
JL
356@emph{V850 Options}
357-mlong-calls -mno-long-calls -mep -mno-ep
358-mprolog-function -mno-prolog-function -mspace
359-mtda=@var{n} -msda=@var{n} -mzda=@var{n}
e9a25f70 360-mv850 -mbig-switch
f84271d9
JL
361@end smallexample
362
74291a4b
MM
363@item Code Generation Options
364@xref{Code Gen Options,,Options for Code Generation Conventions}.
365@smallexample
366-fcall-saved-@var{reg} -fcall-used-@var{reg}
367-ffixed-@var{reg} -finhibit-size-directive
861bb6c1 368-fcheck-memory-usage -fprefix-function-name
74291a4b
MM
369-fno-common -fno-ident -fno-gnu-linker
370-fpcc-struct-return -fpic -fPIC
371-freg-struct-return -fshared-data -fshort-enums
372-fshort-double -fvolatile -fvolatile-global
861bb6c1 373-fverbose-asm -fpack-struct -fstack-check +e0 +e1
e5eb27e5
JL
374-fargument-alias -fargument-noalias
375-fargument-noalias-global
74291a4b
MM
376@end smallexample
377@end table
378
379@menu
380* Overall Options:: Controlling the kind of output:
381 an executable, object files, assembler files,
382 or preprocessed source.
383* C Dialect Options:: Controlling the variant of C language compiled.
384* C++ Dialect Options:: Variations on C++.
385* Warning Options:: How picky should the compiler be?
386* Debugging Options:: Symbol tables, measurements, and debugging dumps.
387* Optimize Options:: How much optimization?
388* Preprocessor Options:: Controlling header files and macro definitions.
389 Also, getting dependency information for Make.
390* Assembler Options:: Passing options to the assembler.
391* Link Options:: Specifying libraries and so on.
392* Directory Options:: Where to find header files and libraries.
393 Where to find the compiler executable files.
394* Target Options:: Running a cross-compiler, or an old version of GNU CC.
395@end menu
396
397@node Overall Options
398@section Options Controlling the Kind of Output
399
400Compilation can involve up to four stages: preprocessing, compilation
401proper, assembly and linking, always in that order. The first three
402stages apply to an individual source file, and end by producing an
403object file; linking combines all the object files (those newly
404compiled, and those specified as input) into an executable file.
405
406@cindex file name suffix
407For any given input file, the file name suffix determines what kind of
408compilation is done:
409
410@table @code
411@item @var{file}.c
412C source code which must be preprocessed.
413
414@item @var{file}.i
415C source code which should not be preprocessed.
416
417@item @var{file}.ii
418C++ source code which should not be preprocessed.
419
420@item @var{file}.m
421Objective-C source code. Note that you must link with the library
422@file{libobjc.a} to make an Objective-C program work.
423
424@item @var{file}.h
425C header file (not to be compiled or linked).
426
427@item @var{file}.cc
428@itemx @var{file}.cxx
429@itemx @var{file}.cpp
430@itemx @var{file}.C
431C++ source code which must be preprocessed. Note that in @samp{.cxx},
432the last two letters must both be literally @samp{x}. Likewise,
433@samp{.C} refers to a literal capital C.
434
435@item @var{file}.s
436Assembler code.
437
438@item @var{file}.S
439Assembler code which must be preprocessed.
440
441@item @var{other}
442An object file to be fed straight into linking.
443Any file name with no recognized suffix is treated this way.
444@end table
445
446You can specify the input language explicitly with the @samp{-x} option:
447
448@table @code
449@item -x @var{language}
450Specify explicitly the @var{language} for the following input files
451(rather than letting the compiler choose a default based on the file
452name suffix). This option applies to all following input files until
453the next @samp{-x} option. Possible values for @var{language} are:
454@example
455c objective-c c++
456c-header cpp-output c++-cpp-output
457assembler assembler-with-cpp
458@end example
459
460@item -x none
461Turn off any specification of a language, so that subsequent files are
462handled according to their file name suffixes (as they are if @samp{-x}
463has not been used at all).
464@end table
465
466If you only want some of the stages of compilation, you can use
467@samp{-x} (or filename suffixes) to tell @code{gcc} where to start, and
468one of the options @samp{-c}, @samp{-S}, or @samp{-E} to say where
469@code{gcc} is to stop. Note that some combinations (for example,
470@samp{-x cpp-output -E} instruct @code{gcc} to do nothing at all.
471
472@table @code
473@item -c
474Compile or assemble the source files, but do not link. The linking
475stage simply is not done. The ultimate output is in the form of an
476object file for each source file.
477
478By default, the object file name for a source file is made by replacing
479the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
480
481Unrecognized input files, not requiring compilation or assembly, are
482ignored.
483
484@item -S
485Stop after the stage of compilation proper; do not assemble. The output
486is in the form of an assembler code file for each non-assembler input
487file specified.
488
489By default, the assembler file name for a source file is made by
490replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
491
492Input files that don't require compilation are ignored.
493
494@item -E
495Stop after the preprocessing stage; do not run the compiler proper. The
496output is in the form of preprocessed source code, which is sent to the
497standard output.
498
499Input files which don't require preprocessing are ignored.
500
501@cindex output file option
502@item -o @var{file}
503Place output in file @var{file}. This applies regardless to whatever
504sort of output is being produced, whether it be an executable file,
505an object file, an assembler file or preprocessed C code.
506
507Since only one output file can be specified, it does not make sense to
508use @samp{-o} when compiling more than one input file, unless you are
509producing an executable file as output.
510
511If @samp{-o} is not specified, the default is to put an executable file
512in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
513@file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
514all preprocessed C source on standard output.@refill
515
516@item -v
517Print (on standard error output) the commands executed to run the stages
518of compilation. Also print the version number of the compiler driver
519program and of the preprocessor and the compiler proper.
520
521@item -pipe
522Use pipes rather than temporary files for communication between the
523various stages of compilation. This fails to work on some systems where
524the assembler is unable to read from a pipe; but the GNU assembler has
525no trouble.
526@end table
527
528@node Invoking G++
529@section Compiling C++ Programs
530
531@cindex suffixes for C++ source
532@cindex C++ source file suffixes
533C++ source files conventionally use one of the suffixes @samp{.C},
534@samp{.cc}, @samp{cpp}, or @samp{.cxx}; preprocessed C++ files use the
535suffix @samp{.ii}. GNU CC recognizes files with these names and
536compiles them as C++ programs even if you call the compiler the same way
537as for compiling C programs (usually with the name @code{gcc}).
538
539@findex g++
540@findex c++
541However, C++ programs often require class libraries as well as a
542compiler that understands the C++ language---and under some
543circumstances, you might want to compile programs from standard input,
544or otherwise without a suffix that flags them as C++ programs.
545@code{g++} is a program that calls GNU CC with the default language
546set to C++, and automatically specifies linking against the GNU class
547library libg++.
548@cindex @code{g++ 1.@var{xx}}
549@cindex @code{g++}, separate compiler
550@cindex @code{g++} older version
551@footnote{Prior to release 2 of the compiler,
552there was a separate @code{g++} compiler. That version was based on GNU
553CC, but not integrated with it. Versions of @code{g++} with a
554@samp{1.@var{xx}} version number---for example, @code{g++} version 1.37
555or 1.42---are much less reliable than the versions integrated with GCC
5562. Moreover, combining G++ @samp{1.@var{xx}} with a version 2 GCC will
557simply not work.} On many systems, the script @code{g++} is also
558installed with the name @code{c++}.
559
560@cindex invoking @code{g++}
561When you compile C++ programs, you may specify many of the same
562command-line options that you use for compiling programs in any
563language; or command-line options meaningful for C and related
564languages; or options that are meaningful only for C++ programs.
565@xref{C Dialect Options,,Options Controlling C Dialect}, for
566explanations of options for languages related to C.
567@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
568explanations of options that are meaningful only for C++ programs.
569
570@node C Dialect Options
571@section Options Controlling C Dialect
572@cindex dialect options
573@cindex language dialect options
574@cindex options, dialect
575
576The following options control the dialect of C (or languages derived
577from C, such as C++ and Objective C) that the compiler accepts:
578
579@table @code
580@cindex ANSI support
581@item -ansi
582Support all ANSI standard C programs.
583
584This turns off certain features of GNU C that are incompatible with ANSI
585C, such as the @code{asm}, @code{inline} and @code{typeof} keywords, and
586predefined macros such as @code{unix} and @code{vax} that identify the
587type of system you are using. It also enables the undesirable and
861bb6c1
JL
588rarely used ANSI trigraph feature, and it disables recognition of C++
589style @samp{//} comments.
74291a4b
MM
590
591The alternate keywords @code{__asm__}, @code{__extension__},
592@code{__inline__} and @code{__typeof__} continue to work despite
593@samp{-ansi}. You would not want to use them in an ANSI C program, of
594course, but it is useful to put them in header files that might be included
595in compilations done with @samp{-ansi}. Alternate predefined macros
596such as @code{__unix__} and @code{__vax__} are also available, with or
597without @samp{-ansi}.
598
599The @samp{-ansi} option does not cause non-ANSI programs to be
600rejected gratuitously. For that, @samp{-pedantic} is required in
601addition to @samp{-ansi}. @xref{Warning Options}.
602
603The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
604option is used. Some header files may notice this macro and refrain
605from declaring certain functions or defining certain macros that the
606ANSI standard doesn't call for; this is to avoid interfering with any
607programs that might use these names for other things.
608
609The functions @code{alloca}, @code{abort}, @code{exit}, and
610@code{_exit} are not builtin functions when @samp{-ansi} is used.
611
612@item -fno-asm
613Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
614keyword, so that code can use these words as identifiers. You can use
615the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
616instead. @samp{-ansi} implies @samp{-fno-asm}.
617
618In C++, this switch only affects the @code{typeof} keyword, since
619@code{asm} and @code{inline} are standard keywords. You may want to
620use the @samp{-fno-gnu-keywords} flag instead, as it also disables the
621other, C++-specific, extension keywords such as @code{headof}.
622
623@item -fno-builtin
624@cindex builtin functions
625@findex abort
626@findex abs
627@findex alloca
628@findex cos
629@findex exit
630@findex fabs
631@findex ffs
632@findex labs
633@findex memcmp
634@findex memcpy
635@findex sin
636@findex sqrt
637@findex strcmp
638@findex strcpy
639@findex strlen
640Don't recognize builtin functions that do not begin with two leading
641underscores. Currently, the functions affected include @code{abort},
642@code{abs}, @code{alloca}, @code{cos}, @code{exit}, @code{fabs},
643@code{ffs}, @code{labs}, @code{memcmp}, @code{memcpy}, @code{sin},
644@code{sqrt}, @code{strcmp}, @code{strcpy}, and @code{strlen}.
645
646GCC normally generates special code to handle certain builtin functions
647more efficiently; for instance, calls to @code{alloca} may become single
648instructions that adjust the stack directly, and calls to @code{memcpy}
649may become inline copy loops. The resulting code is often both smaller
650and faster, but since the function calls no longer appear as such, you
651cannot set a breakpoint on those calls, nor can you change the behavior
652of the functions by linking with a different library.
653
654The @samp{-ansi} option prevents @code{alloca} and @code{ffs} from being
655builtin functions, since these functions do not have an ANSI standard
656meaning.
657
861bb6c1
JL
658@item -fhosted
659@cindex hosted environment
660
661Assert that compilation takes place in a hosted environment. This implies
662@samp{-fbuiltin}. A hosted environment is one in which the
663entire standard library is available, and in which @code{main} has a return
664type of @code{int}. Examples are nearly everything except a kernel.
665This is equivalent to @samp{-fno-freestanding}.
666
667@item -ffreestanding
668@cindex hosted environment
669
670Assert that compilation takes place in a freestanding environment. This
671implies @samp{-fno-builtin}. A freestanding environment
672is one in which the standard library may not exist, and program startup may
673not necessarily be at @code{main}. The most obvious example is an OS kernel.
674This is equivalent to @samp{-fno-hosted}.
675
74291a4b
MM
676@item -trigraphs
677Support ANSI C trigraphs. You don't want to know about this
678brain-damage. The @samp{-ansi} option implies @samp{-trigraphs}.
679
680@cindex traditional C language
681@cindex C language, traditional
682@item -traditional
683Attempt to support some aspects of traditional C compilers.
684Specifically:
685
686@itemize @bullet
687@item
688All @code{extern} declarations take effect globally even if they
689are written inside of a function definition. This includes implicit
690declarations of functions.
691
692@item
693The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
694and @code{volatile} are not recognized. (You can still use the
695alternative keywords such as @code{__typeof__}, @code{__inline__}, and
696so on.)
697
698@item
699Comparisons between pointers and integers are always allowed.
700
701@item
702Integer types @code{unsigned short} and @code{unsigned char} promote
703to @code{unsigned int}.
704
705@item
706Out-of-range floating point literals are not an error.
707
708@item
709Certain constructs which ANSI regards as a single invalid preprocessing
710number, such as @samp{0xe-0xd}, are treated as expressions instead.
711
712@item
713String ``constants'' are not necessarily constant; they are stored in
714writable space, and identical looking constants are allocated
715separately. (This is the same as the effect of
716@samp{-fwritable-strings}.)
717
718@cindex @code{longjmp} and automatic variables
719@item
720All automatic variables not declared @code{register} are preserved by
721@code{longjmp}. Ordinarily, GNU C follows ANSI C: automatic variables
722not declared @code{volatile} may be clobbered.
723
724@item
725@kindex \x
726@kindex \a
727@cindex escape sequences, traditional
728The character escape sequences @samp{\x} and @samp{\a} evaluate as the
729literal characters @samp{x} and @samp{a} respectively. Without
730@w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal
731representation of a character, and @samp{\a} produces a bell.
732
733@item
734In C++ programs, assignment to @code{this} is permitted with
735@samp{-traditional}. (The option @samp{-fthis-is-variable} also has
736this effect.)
737@end itemize
738
739You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
740if your program uses names that are normally GNU C builtin functions for
741other purposes of its own.
742
743You cannot use @samp{-traditional} if you include any header files that
744rely on ANSI C features. Some vendors are starting to ship systems with
745ANSI C header files and you cannot use @samp{-traditional} on such
746systems to compile files that include any system headers.
747
748The @samp{-traditional} option also enables the @samp{-traditional-cpp}
749option, which is described next.
750
751@item -traditional-cpp
752Attempt to support some aspects of traditional C preprocessors.
753Specifically:
754
755@itemize @bullet
756@item
757Comments convert to nothing at all, rather than to a space. This allows
758traditional token concatenation.
759
760@item
761In a preprocessing directive, the @samp{#} symbol must appear as the first
762character of a line.
763
764@item
765Macro arguments are recognized within string constants in a macro
766definition (and their values are stringified, though without additional
767quote marks, when they appear in such a context). The preprocessor
768always considers a string constant to end at a newline.
769
770@item
771@cindex detecting @w{@samp{-traditional}}
772The predefined macro @code{__STDC__} is not defined when you use
773@samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions
774which @code{__GNUC__} indicates are not affected by
775@samp{-traditional}). If you need to write header files that work
776differently depending on whether @samp{-traditional} is in use, by
777testing both of these predefined macros you can distinguish four
778situations: GNU C, traditional GNU C, other ANSI C compilers, and other
779old C compilers. The predefined macro @code{__STDC_VERSION__} is also
780not defined when you use @samp{-traditional}. @xref{Standard
781Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
782for more discussion of these and other predefined macros.
783
784@item
785@cindex string constants vs newline
786@cindex newline vs string constants
787The preprocessor considers a string constant to end at a newline (unless
788the newline is escaped with @samp{\}). (Without @w{@samp{-traditional}},
789string constants can contain the newline character as typed.)
790@end itemize
791
792@item -fcond-mismatch
793Allow conditional expressions with mismatched types in the second and
794third arguments. The value of such an expression is void.
795
796@item -funsigned-char
797Let the type @code{char} be unsigned, like @code{unsigned char}.
798
799Each kind of machine has a default for what @code{char} should
800be. It is either like @code{unsigned char} by default or like
801@code{signed char} by default.
802
803Ideally, a portable program should always use @code{signed char} or
804@code{unsigned char} when it depends on the signedness of an object.
805But many programs have been written to use plain @code{char} and
806expect it to be signed, or expect it to be unsigned, depending on the
807machines they were written for. This option, and its inverse, let you
808make such a program work with the opposite default.
809
810The type @code{char} is always a distinct type from each of
811@code{signed char} or @code{unsigned char}, even though its behavior
812is always just like one of those two.
813
814@item -fsigned-char
815Let the type @code{char} be signed, like @code{signed char}.
816
817Note that this is equivalent to @samp{-fno-unsigned-char}, which is
818the negative form of @samp{-funsigned-char}. Likewise, the option
819@samp{-fno-signed-char} is equivalent to @samp{-funsigned-char}.
820
821You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
822if your program uses names that are normally GNU C builtin functions for
823other purposes of its own.
824
825You cannot use @samp{-traditional} if you include any header files that
826rely on ANSI C features. Some vendors are starting to ship systems with
827ANSI C header files and you cannot use @samp{-traditional} on such
828systems to compile files that include any system headers.
829
830@item -fsigned-bitfields
831@itemx -funsigned-bitfields
832@itemx -fno-signed-bitfields
833@itemx -fno-unsigned-bitfields
834These options control whether a bitfield is signed or unsigned, when the
835declaration does not use either @code{signed} or @code{unsigned}. By
836default, such a bitfield is signed, because this is consistent: the
837basic integer types such as @code{int} are signed types.
838
839However, when @samp{-traditional} is used, bitfields are all unsigned
840no matter what.
841
842@item -fwritable-strings
843Store string constants in the writable data segment and don't uniquize
844them. This is for compatibility with old programs which assume they can
845write into string constants. The option @samp{-traditional} also has
846this effect.
847
848Writing into string constants is a very bad idea; ``constants'' should
849be constant.
850
851@item -fallow-single-precision
852Do not promote single precision math operations to double precision,
853even when compiling with @samp{-traditional}.
854
855Traditional K&R C promotes all floating point operations to double
856precision, regardless of the sizes of the operands. On the
857architecture for which you are compiling, single precision may be faster
858than double precision. If you must use @samp{-traditional}, but want
859to use single precision operations when the operands are single
860precision, use this option. This option has no effect when compiling
861with ANSI or GNU C conventions (the default).
862
863@end table
864
865@node C++ Dialect Options
866@section Options Controlling C++ Dialect
867
868@cindex compiler options, C++
869@cindex C++ options, command line
870@cindex options, C++
871This section describes the command-line options that are only meaningful
872for C++ programs; but you can also use most of the GNU compiler options
873regardless of what language your program is in. For example, you
874might compile a file @code{firstClass.C} like this:
875
876@example
877g++ -g -felide-constructors -O -c firstClass.C
878@end example
879
880@noindent
881In this example, only @samp{-felide-constructors} is an option meant
882only for C++ programs; you can use the other options with any
883language supported by GNU CC.
884
885Here is a list of options that are @emph{only} for compiling C++ programs:
886
887@table @code
888@item -fno-access-control
889Turn off all access checking. This switch is mainly useful for working
890around bugs in the access control code.
891
892@item -fall-virtual
893Treat all possible member functions as virtual, implicitly.
894All member functions (except for constructor functions and @code{new} or
895@code{delete} member operators) are treated as virtual functions of the
896class where they appear.
897
898This does not mean that all calls to these member functions will be made
899through the internal table of virtual functions. Under some
900circumstances, the compiler can determine that a call to a given virtual
901function can be made directly; in these cases the calls are direct in
902any case.
903
904@item -fcheck-new
905Check that the pointer returned by @code{operator new} is non-null
906before attempting to modify the storage allocated. The current Working
907Paper requires that @code{operator new} never return a null pointer, so
908this check is normally unnecessary.
909
910@item -fconserve-space
911Put uninitialized or runtime-initialized global variables into the
912common segment, as C does. This saves space in the executable at the
913cost of not diagnosing duplicate definitions. If you compile with this
914flag and your program mysteriously crashes after @code{main()} has
915completed, you may have an object that is being destroyed twice because
916two definitions were merged.
917
918@item -fdollars-in-identifiers
919Accept @samp{$} in identifiers. You can also explicitly prohibit use of
eb795509
RK
920@samp{$} with the option @samp{-fno-dollars-in-identifiers}. (GNU C allows
921@samp{$} by default on most target systems, but there are a few exceptions.)
74291a4b
MM
922Traditional C allowed the character @samp{$} to form part of
923identifiers. However, ANSI C and C++ forbid @samp{$} in identifiers.
924
925@item -fenum-int-equiv
926Anachronistically permit implicit conversion of @code{int} to
927enumeration types. Current C++ allows conversion of @code{enum} to
928@code{int}, but not the other way around.
929
930@item -fexternal-templates
931Cause template instantiations to obey @samp{#pragma interface} and
932@samp{implementation}; template instances are emitted or not according
933to the location of the template definition. @xref{Template
934Instantiation}, for more information.
935
37f6b6bf
MM
936This option is deprecated.
937
74291a4b
MM
938@item -falt-external-templates
939Similar to -fexternal-templates, but template instances are emitted or
940not according to the place where they are first instantiated.
941@xref{Template Instantiation}, for more information.
942
37f6b6bf
MM
943This option is deprecated.
944
74291a4b 945@item -ffor-scope
8c81598d 946@itemx -fno-for-scope
74291a4b
MM
947If -ffor-scope is specified, the scope of variables declared in
948a @i{for-init-statement} is limited to the @samp{for} loop itself,
949as specified by the draft C++ standard.
950If -fno-for-scope is specified, the scope of variables declared in
951a @i{for-init-statement} extends to the end of the enclosing scope,
952as was the case in old versions of gcc, and other (traditional)
953implementations of C++.
954
955The default if neither flag is given to follow the standard,
956but to allow and give a warning for old-style code that would
957otherwise be invalid, or have different behavior.
958
959@item -fno-gnu-keywords
960Do not recognize @code{classof}, @code{headof}, @code{signature},
961@code{sigof} or @code{typeof} as a keyword, so that code can use these
962words as identifiers. You can use the keywords @code{__classof__},
963@code{__headof__}, @code{__signature__}, @code{__sigof__}, and
964@code{__typeof__} instead. @samp{-ansi} implies
965@samp{-fno-gnu-keywords}.
966
37f6b6bf
MM
967@item -fguiding-decls
968Treat a function declaration with the same type as a potential function
969template instantiation as though it declares that instantiation, not a
970normal function. If a definition is given for the function later in the
971translation unit (or another translation unit if the target supports
972weak symbols), that definition will be used; otherwise the template will
973be instantiated. This behavior reflects the C++ language prior to
974September 1996, when guiding declarations were removed.
975
976This option implies @samp{-fname-mangling-version-0}, and will not work
977with other name mangling versions.
978
74291a4b
MM
979@item -fno-implicit-templates
980Never emit code for templates which are instantiated implicitly (i.e. by
981use); only emit code for explicit instantiations. @xref{Template
982Instantiation}, for more information.
983
984@item -fhandle-signatures
985Recognize the @code{signature} and @code{sigof} keywords for specifying
986abstract types. The default (@samp{-fno-handle-signatures}) is not to
987recognize them. @xref{C++ Signatures, Type Abstraction using
988Signatures}.
989
990@item -fhuge-objects
991Support virtual function calls for objects that exceed the size
992representable by a @samp{short int}. Users should not use this flag by
993default; if you need to use it, the compiler will tell you so. If you
994compile any of your code with this flag, you must compile @emph{all} of
995your code with this flag (including libg++, if you use it).
996
997This flag is not useful when compiling with -fvtable-thunks.
998
999@item -fno-implement-inlines
1000To save space, do not emit out-of-line copies of inline functions
1001controlled by @samp{#pragma implementation}. This will cause linker
1002errors if these functions are not inlined everywhere they are called.
1003
1004@item -fmemoize-lookups
1005@itemx -fsave-memoized
1006Use heuristics to compile faster. These heuristics are not enabled by
1007default, since they are only effective for certain input files. Other
1008input files compile more slowly.
1009
1010The first time the compiler must build a call to a member function (or
1011reference to a data member), it must (1) determine whether the class
1012implements member functions of that name; (2) resolve which member
1013function to call (which involves figuring out what sorts of type
1014conversions need to be made); and (3) check the visibility of the member
1015function to the caller. All of this adds up to slower compilation.
1016Normally, the second time a call is made to that member function (or
1017reference to that data member), it must go through the same lengthy
1018process again. This means that code like this:
1019
1020@smallexample
1021cout << "This " << p << " has " << n << " legs.\n";
1022@end smallexample
1023
1024@noindent
1025makes six passes through all three steps. By using a software cache, a
1026``hit'' significantly reduces this cost. Unfortunately, using the cache
1027introduces another layer of mechanisms which must be implemented, and so
1028incurs its own overhead. @samp{-fmemoize-lookups} enables the software
1029cache.
1030
1031Because access privileges (visibility) to members and member functions
1032may differ from one function context to the next, G++ may need to flush
1033the cache. With the @samp{-fmemoize-lookups} flag, the cache is flushed
1034after every function that is compiled. The @samp{-fsave-memoized} flag
1035enables the same software cache, but when the compiler determines that
1036the context of the last function compiled would yield the same access
1037privileges of the next function to compile, it preserves the cache.
1038This is most helpful when defining many member functions for the same
1039class: with the exception of member functions which are friends of other
1040classes, each member function has exactly the same access privileges as
1041every other, and the cache need not be flushed.
1042
1043The code that implements these flags has rotted; you should probably
1044avoid using them.
1045
1046@item -fstrict-prototype
1047Within an @samp{extern "C"} linkage specification, treat a function
1048declaration with no arguments, such as @samp{int foo ();}, as declaring
1049the function to take no arguments. Normally, such a declaration means
1050that the function @code{foo} can take any combination of arguments, as
1051in C. @samp{-pedantic} implies @samp{-fstrict-prototype} unless
1052overridden with @samp{-fno-strict-prototype}.
1053
1054This flag no longer affects declarations with C++ linkage.
1055
37f6b6bf
MM
1056@item -fname-mangling-version-@var{n}
1057Control the way in which names are mangled. Version 0 is compatible
1058with versions of g++ before 2.8. Version 1 is the default. Version 1
1059will allow correct mangling of function templates. For example,
1060version 0 mangling does not mangle foo<int, double> and foo<int, char>
1061given this declaration:
1062
1063@example
1064template <class T, class U> void foo(T t);
1065@end example
1066
74291a4b
MM
1067@item -fno-nonnull-objects
1068Don't assume that a reference is initialized to refer to a valid object.
1069Although the current C++ Working Paper prohibits null references, some
1070old code may rely on them, and you can use @samp{-fno-nonnull-objects}
1071to turn on checking.
1072
1073At the moment, the compiler only does this checking for conversions to
1074virtual base classes.
1075
1076@item -foperator-names
1077Recognize the operator name keywords @code{and}, @code{bitand},
1078@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1079synonyms for the symbols they refer to. @samp{-ansi} implies
1080@samp{-foperator-names}.
1081
8c81598d
JM
1082@item -frepo
1083Enable automatic template instantiation. This option also implies
1084@samp{-fno-implicit-templates}. @xref{Template Instantiation}, for more
1085information.
1086
74291a4b
MM
1087@item -fthis-is-variable
1088Permit assignment to @code{this}. The incorporation of user-defined
1089free store management into C++ has made assignment to @samp{this} an
1090anachronism. Therefore, by default it is invalid to assign to
1091@code{this} within a class member function; that is, GNU C++ treats
1092@samp{this} in a member function of class @code{X} as a non-lvalue of
1093type @samp{X *}. However, for backwards compatibility, you can make it
1094valid with @samp{-fthis-is-variable}.
1095
1096@item -fvtable-thunks
1097Use @samp{thunks} to implement the virtual function dispatch table
1098(@samp{vtable}). The traditional (cfront-style) approach to
1099implementing vtables was to store a pointer to the function and two
1100offsets for adjusting the @samp{this} pointer at the call site. Newer
1101implementations store a single pointer to a @samp{thunk} function which
1102does any necessary adjustment and then calls the target function.
1103
1104This option also enables a heuristic for controlling emission of
1105vtables; if a class has any non-inline virtual functions, the vtable
1106will be emitted in the translation unit containing the first one of
1107those.
1108
861bb6c1
JL
1109@item -ftemplate-depth-@var{n}
1110Set the maximum instantiation depth for template classes to @var{n}.
1111A limit on the template instantiation depth is needed to detect
1112endless recursions during template class instantiation. ANSI/ISO C++
1113conforming programs must not rely on a maximum depth greater than 17.
1114
74291a4b
MM
1115@item -nostdinc++
1116Do not search for header files in the standard directories specific to
1117C++, but do still search the other standard directories. (This option
1118is used when building libg++.)
1119
1120@item -traditional
1121For C++ programs (in addition to the effects that apply to both C and
1122C++), this has the same effect as @samp{-fthis-is-variable}.
1123@xref{C Dialect Options,, Options Controlling C Dialect}.
1124@end table
1125
1126In addition, these optimization, warning, and code generation options
1127have meanings only for C++ programs:
1128
1129@table @code
1130@item -fno-default-inline
1131Do not assume @samp{inline} for functions defined inside a class scope.
1132@xref{Optimize Options,,Options That Control Optimization}.
1133
d770d3b3
JM
1134@item -Wold-style-cast
1135@itemx -Woverloaded-virtual
74291a4b
MM
1136@itemx -Wtemplate-debugging
1137Warnings that apply only to C++ programs. @xref{Warning
1138Options,,Options to Request or Suppress Warnings}.
1139
861bb6c1
JL
1140@item -Weffc++
1141Warn about violation of some style rules from Effective C++ by Scott Myers.
1142
74291a4b
MM
1143@item +e@var{n}
1144Control how virtual function definitions are used, in a fashion
1145compatible with @code{cfront} 1.x. @xref{Code Gen Options,,Options for
1146Code Generation Conventions}.
1147@end table
1148
1149@node Warning Options
1150@section Options to Request or Suppress Warnings
1151@cindex options to control warnings
1152@cindex warning messages
1153@cindex messages, warning
1154@cindex suppressing warnings
1155
1156Warnings are diagnostic messages that report constructions which
1157are not inherently erroneous but which are risky or suggest there
1158may have been an error.
1159
1160You can request many specific warnings with options beginning @samp{-W},
1161for example @samp{-Wimplicit} to request warnings on implicit
1162declarations. Each of these specific warning options also has a
1163negative form beginning @samp{-Wno-} to turn off warnings;
1164for example, @samp{-Wno-implicit}. This manual lists only one of the
1165two forms, whichever is not the default.
1166
1167These options control the amount and kinds of warnings produced by GNU
1168CC:
1169
1170@table @code
1171@cindex syntax checking
1172@item -fsyntax-only
1173Check the code for syntax errors, but don't do anything beyond that.
1174
1175@item -pedantic
1176Issue all the warnings demanded by strict ANSI standard C; reject
1177all programs that use forbidden extensions.
1178
1179Valid ANSI standard C programs should compile properly with or without
1180this option (though a rare few will require @samp{-ansi}). However,
1181without this option, certain GNU extensions and traditional C features
1182are supported as well. With this option, they are rejected.
1183
1184@samp{-pedantic} does not cause warning messages for use of the
1185alternate keywords whose names begin and end with @samp{__}. Pedantic
1186warnings are also disabled in the expression that follows
1187@code{__extension__}. However, only system header files should use
1188these escape routes; application programs should avoid them.
1189@xref{Alternate Keywords}.
1190
1191This option is not intended to be @i{useful}; it exists only to satisfy
1192pedants who would otherwise claim that GNU CC fails to support the ANSI
1193standard.
1194
1195Some users try to use @samp{-pedantic} to check programs for strict ANSI
1196C conformance. They soon find that it does not do quite what they want:
1197it finds some non-ANSI practices, but not all---only those for which
1198ANSI C @emph{requires} a diagnostic.
1199
1200A feature to report any failure to conform to ANSI C might be useful in
1201some instances, but would require considerable additional work and would
1202be quite different from @samp{-pedantic}. We recommend, rather, that
1203users take advantage of the extensions of GNU C and disregard the
1204limitations of other compilers. Aside from certain supercomputers and
1205obsolete small machines, there is less and less reason ever to use any
1206other C compiler other than for bootstrapping GNU CC.
1207
1208@item -pedantic-errors
1209Like @samp{-pedantic}, except that errors are produced rather than
1210warnings.
1211
1212@item -w
1213Inhibit all warning messages.
1214
1215@item -Wno-import
1216Inhibit warning messages about the use of @samp{#import}.
1217
1218@item -Wchar-subscripts
1219Warn if an array subscript has type @code{char}. This is a common cause
1220of error, as programmers often forget that this type is signed on some
1221machines.
1222
1223@item -Wcomment
1224Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
1225comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
1226
1227@item -Wformat
1228Check calls to @code{printf} and @code{scanf}, etc., to make sure that
1229the arguments supplied have types appropriate to the format string
1230specified.
1231
e9a25f70
JL
1232@item -Wimplicit-int
1233Warn when a declaration does not specify a type.
1234
1235@item -Wimplicit-function-declarations
1236Warn whenever a function is used before being declared.
1237
74291a4b 1238@item -Wimplicit
e9a25f70 1239Same as @samp{-Wimplicit-int} @samp{-Wimplicit-function-declaration}.
861bb6c1
JL
1240
1241@item -Wmain
1242Warn if the type of @samp{main} is suspicious. @samp{main} should be a
1243function with external linkage, returning int, taking either zero
1244arguments, two, or three arguments of appropriate types.
1245
74291a4b
MM
1246@item -Wparentheses
1247Warn if parentheses are omitted in certain contexts, such
1248as when there is an assignment in a context where a truth value
1249is expected, or when operators are nested whose precedence people
1250often get confused about.
1251
e9a25f70
JL
1252Also warn about constructions where there may be confusion to which
1253@code{if} statement an @code{else} branch belongs. Here is an example of
1254such a case:
1255
1256@smallexample
1257@{
1258 if (a)
1259 if (b)
1260 foo ();
1261 else
1262 bar ();
1263@}
1264@end smallexample
1265
1266In C, every @code{else} branch belongs to the innermost possible @code{if}
1267statement, which in this example is @code{if (b)}. This is often not
1268what the programmer expected, as illustrated in the above example by
1269indentation the programmer chose. When there is the potential for this
1270confusion, GNU C will issue a warning when this flag is specified.
1271To eliminate the warning, add explicit braces around the innermost
1272@code{if} statement so there is no way the @code{else} could belong to
1273the enclosing @code{if}. The resulting code would look like this:
1274
1275@smallexample
1276@{
1277 if (a)
1278 @{
1279 if (b)
1280 foo ();
1281 else
1282 bar ();
1283 @}
1284@}
1285@end smallexample
1286
74291a4b
MM
1287@item -Wreturn-type
1288Warn whenever a function is defined with a return-type that defaults
1289to @code{int}. Also warn about any @code{return} statement with no
1290return-value in a function whose return-type is not @code{void}.
1291
1292@item -Wswitch
1293Warn whenever a @code{switch} statement has an index of enumeral type
1294and lacks a @code{case} for one or more of the named codes of that
1295enumeration. (The presence of a @code{default} label prevents this
1296warning.) @code{case} labels outside the enumeration range also
1297provoke warnings when this option is used.
1298
1299@item -Wtrigraphs
1300Warn if any trigraphs are encountered (assuming they are enabled).
1301
1302@item -Wunused
1303Warn whenever a variable is unused aside from its declaration,
1304whenever a function is declared static but never defined, whenever a
1305label is declared but not used, and whenever a statement computes a
1306result that is explicitly not used.
1307
1308To suppress this warning for an expression, simply cast it to void. For
1309unused variables and parameters, use the @samp{unused} attribute
1310(@pxref{Variable Attributes}).
1311
1312@item -Wuninitialized
1313An automatic variable is used without first being initialized.
1314
1315These warnings are possible only in optimizing compilation,
1316because they require data flow information that is computed only
1317when optimizing. If you don't specify @samp{-O}, you simply won't
1318get these warnings.
1319
1320These warnings occur only for variables that are candidates for
1321register allocation. Therefore, they do not occur for a variable that
1322is declared @code{volatile}, or whose address is taken, or whose size
1323is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
1324structures, unions or arrays, even when they are in registers.
1325
1326Note that there may be no warning about a variable that is used only
1327to compute a value that itself is never used, because such
1328computations may be deleted by data flow analysis before the warnings
1329are printed.
1330
1331These warnings are made optional because GNU CC is not smart
1332enough to see all the reasons why the code might be correct
1333despite appearing to have an error. Here is one example of how
1334this can happen:
1335
1336@smallexample
1337@{
1338 int x;
1339 switch (y)
1340 @{
1341 case 1: x = 1;
1342 break;
1343 case 2: x = 4;
1344 break;
1345 case 3: x = 5;
1346 @}
1347 foo (x);
1348@}
1349@end smallexample
1350
1351@noindent
1352If the value of @code{y} is always 1, 2 or 3, then @code{x} is
1353always initialized, but GNU CC doesn't know this. Here is
1354another common case:
1355
1356@smallexample
1357@{
1358 int save_y;
1359 if (change_y) save_y = y, y = new_y;
1360 @dots{}
1361 if (change_y) y = save_y;
1362@}
1363@end smallexample
1364
1365@noindent
1366This has no bug because @code{save_y} is used only if it is set.
1367
1368Some spurious warnings can be avoided if you declare all the functions
1369you use that never return as @code{noreturn}. @xref{Function
1370Attributes}.
1371
1372@item -Wreorder (C++ only)
1373@cindex reordering, warning
1374@cindex warning for reordering of member initializers
1375Warn when the order of member initializers given in the code does not
1376match the order in which they must be executed. For instance:
1377
1378@smallexample
1379struct A @{
1380 int i;
1381 int j;
1382 A(): j (0), i (1) @{ @}
1383@};
1384@end smallexample
1385
1386Here the compiler will warn that the member initializers for @samp{i}
1387and @samp{j} will be rearranged to match the declaration order of the
1388members.
1389
74291a4b
MM
1390@item -Wtemplate-debugging
1391@cindex template debugging
1392When using templates in a C++ program, warn if debugging is not yet
1393fully available (C++ only).
1394
1395@item -Wall
1396All of the above @samp{-W} options combined. This enables all the
1397warnings about constructions that some users consider questionable, and
1398that are easy to avoid (or modify to prevent the warning), even in
1399conjunction with macros.
1400@end table
1401
1402The following @samp{-W@dots{}} options are not implied by @samp{-Wall}.
1403Some of them warn about constructions that users generally do not
1404consider questionable, but which occasionally you might wish to check
1405for; others warn about constructions that are necessary or hard to avoid
1406in some cases, and there is no simple way to modify the code to suppress
1407the warning.
1408
1409@table @code
1410@item -W
1411Print extra warning messages for these events:
1412
1413@itemize @bullet
1414@cindex @code{longjmp} warnings
1415@item
1416A nonvolatile automatic variable might be changed by a call to
1417@code{longjmp}. These warnings as well are possible only in
1418optimizing compilation.
1419
1420The compiler sees only the calls to @code{setjmp}. It cannot know
1421where @code{longjmp} will be called; in fact, a signal handler could
1422call it at any point in the code. As a result, you may get a warning
1423even when there is in fact no problem because @code{longjmp} cannot
1424in fact be called at the place which would cause a problem.
1425
1426@item
1427A function can return either with or without a value. (Falling
1428off the end of the function body is considered returning without
1429a value.) For example, this function would evoke such a
1430warning:
1431
1432@smallexample
1433@group
1434foo (a)
1435@{
1436 if (a > 0)
1437 return a;
1438@}
1439@end group
1440@end smallexample
1441
1442@item
1443An expression-statement or the left-hand side of a comma expression
1444contains no side effects.
1445To suppress the warning, cast the unused expression to void.
1446For example, an expression such as @samp{x[i,j]} will cause a warning,
1447but @samp{x[(void)i,j]} will not.
1448
1449@item
1450An unsigned value is compared against zero with @samp{<} or @samp{<=}.
1451
1452@item
1453A comparison like @samp{x<=y<=z} appears; this is equivalent to
1454@samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
1455that of ordinary mathematical notation.
1456
1457@item
1458Storage-class specifiers like @code{static} are not the first things in
1459a declaration. According to the C Standard, this usage is obsolescent.
1460
1461@item
1462If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
1463arguments.
1464
e9a25f70
JL
1465@item
1466A comparison between signed and unsigned values could produce an
1467incorrect result when the signed value is converted to unsigned.
1468(But do not warn if @samp{-Wno-sign-compare} is also specified.)
1469
74291a4b
MM
1470@item
1471An aggregate has a partly bracketed initializer.
1472For example, the following code would evoke such a warning,
1473because braces are missing around the initializer for @code{x.h}:
1474
1475@smallexample
1476struct s @{ int f, g; @};
1477struct t @{ struct s h; int i; @};
1478struct t x = @{ 1, 2, 3 @};
1479@end smallexample
1480@end itemize
1481
1482@item -Wtraditional
1483Warn about certain constructs that behave differently in traditional and
1484ANSI C.
1485
1486@itemize @bullet
1487@item
1488Macro arguments occurring within string constants in the macro body.
1489These would substitute the argument in traditional C, but are part of
1490the constant in ANSI C.
1491
1492@item
1493A function declared external in one block and then used after the end of
1494the block.
1495
1496@item
1497A @code{switch} statement has an operand of type @code{long}.
1498@end itemize
1499
861bb6c1
JL
1500@item -Wundef
1501Warn if an undefined identifier is evaluated in an @samp{#if} directive.
1502
74291a4b
MM
1503@item -Wshadow
1504Warn whenever a local variable shadows another local variable.
1505
1506@item -Wid-clash-@var{len}
1507Warn whenever two distinct identifiers match in the first @var{len}
1508characters. This may help you prepare a program that will compile
1509with certain obsolete, brain-damaged compilers.
1510
1511@item -Wlarger-than-@var{len}
1512Warn whenever an object of larger than @var{len} bytes is defined.
1513
1514@item -Wpointer-arith
1515Warn about anything that depends on the ``size of'' a function type or
1516of @code{void}. GNU C assigns these types a size of 1, for
1517convenience in calculations with @code{void *} pointers and pointers
1518to functions.
1519
1520@item -Wbad-function-cast
1521Warn whenever a function call is cast to a non-matching type.
1522For example, warn if @code{int malloc()} is cast to @code{anything *}.
1523
1524@item -Wcast-qual
1525Warn whenever a pointer is cast so as to remove a type qualifier from
1526the target type. For example, warn if a @code{const char *} is cast
1527to an ordinary @code{char *}.
1528
1529@item -Wcast-align
1530Warn whenever a pointer is cast such that the required alignment of the
1531target is increased. For example, warn if a @code{char *} is cast to
1532an @code{int *} on machines where integers can only be accessed at
1533two- or four-byte boundaries.
1534
1535@item -Wwrite-strings
1536Give string constants the type @code{const char[@var{length}]} so that
1537copying the address of one into a non-@code{const} @code{char *}
1538pointer will get a warning. These warnings will help you find at
1539compile time code that can try to write into a string constant, but
1540only if you have been very careful about using @code{const} in
1541declarations and prototypes. Otherwise, it will just be a nuisance;
1542this is why we did not make @samp{-Wall} request these warnings.
1543
1544@item -Wconversion
1545Warn if a prototype causes a type conversion that is different from what
1546would happen to the same argument in the absence of a prototype. This
1547includes conversions of fixed point to floating and vice versa, and
1548conversions changing the width or signedness of a fixed point argument
1549except when the same as the default promotion.
1550
1551Also, warn if a negative integer constant expression is implicitly
1552converted to an unsigned type. For example, warn about the assignment
1553@code{x = -1} if @code{x} is unsigned. But do not warn about explicit
1554casts like @code{(unsigned) -1}.
1555
e9a25f70
JL
1556@item -Wsign-compare
1557@cindex warning for comparison of signed and unsigned values
1558@cindex comparison of signed and unsigned values, warning
1559@cindex signed and unsigned values, comparison warning
1560Warn when a comparison between signed and unsigned values could produce
1561an incorrect result when the signed value is converted to unsigned.
1562This warning is also enabled by @samp{-W}; to get the other warnings
1563of @samp{-W} without this warning, use @samp{-W -Wno-sign-compare}.
1564
74291a4b
MM
1565@item -Waggregate-return
1566Warn if any functions that return structures or unions are defined or
1567called. (In languages where you can return an array, this also elicits
1568a warning.)
1569
1570@item -Wstrict-prototypes
1571Warn if a function is declared or defined without specifying the
1572argument types. (An old-style function definition is permitted without
1573a warning if preceded by a declaration which specifies the argument
1574types.)
1575
1576@item -Wmissing-prototypes
1577Warn if a global function is defined without a previous prototype
1578declaration. This warning is issued even if the definition itself
1579provides a prototype. The aim is to detect global functions that fail
1580to be declared in header files.
1581
1582@item -Wmissing-declarations
1583Warn if a global function is defined without a previous declaration.
1584Do so even if the definition itself provides a prototype.
1585Use this option to detect global functions that are not declared in
1586header files.
1587
1588@item -Wredundant-decls
1589Warn if anything is declared more than once in the same scope, even in
1590cases where multiple declaration is valid and changes nothing.
1591
1592@item -Wnested-externs
1593Warn if an @code{extern} declaration is encountered within an function.
1594
1595@item -Winline
1596Warn if a function can not be inlined, and either it was declared as inline,
1597or else the @samp{-finline-functions} option was given.
1598
d770d3b3
JM
1599@item -Wold-style-cast
1600Warn if an old-style (C-style) cast is used within a program.
1601
74291a4b
MM
1602@item -Woverloaded-virtual
1603@cindex overloaded virtual fn, warning
1604@cindex warning for overloaded virtual fn
1605Warn when a derived class function declaration may be an error in
1606defining a virtual function (C++ only). In a derived class, the
1607definitions of virtual functions must match the type signature of a
1608virtual function declared in the base class. With this option, the
1609compiler warns when you define a function with the same name as a
1610virtual function, but with a type signature that does not match any
1611declarations from the base class.
1612
1613@item -Wsynth (C++ only)
1614@cindex warning for synthesized methods
1615@cindex synthesized methods, warning
1616Warn when g++'s synthesis behavior does not match that of cfront. For
1617instance:
1618
1619@smallexample
1620struct A @{
1621 operator int ();
1622 A& operator = (int);
1623@};
1624
1625main ()
1626@{
1627 A a,b;
1628 a = b;
1629@}
1630@end smallexample
1631
1632In this example, g++ will synthesize a default @samp{A& operator =
1633(const A&);}, while cfront will use the user-defined @samp{operator =}.
1634
1635@item -Werror
1636Make all warnings into errors.
1637@end table
1638
1639@node Debugging Options
1640@section Options for Debugging Your Program or GNU CC
1641@cindex options, debugging
1642@cindex debugging information options
1643
1644GNU CC has various special options that are used for debugging
1645either your program or GCC:
1646
1647@table @code
1648@item -g
1649Produce debugging information in the operating system's native format
1650(stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
1651information.
1652
1653On most systems that use stabs format, @samp{-g} enables use of extra
1654debugging information that only GDB can use; this extra information
1655makes debugging work better in GDB but will probably make other debuggers
1656crash or
1657refuse to read the program. If you want to control for certain whether
1658to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
861bb6c1 1659@samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf-1+}, or @samp{-gdwarf-1}
74291a4b
MM
1660(see below).
1661
1662Unlike most other C compilers, GNU CC allows you to use @samp{-g} with
1663@samp{-O}. The shortcuts taken by optimized code may occasionally
1664produce surprising results: some variables you declared may not exist
1665at all; flow of control may briefly move where you did not expect it;
1666some statements may not be executed because they compute constant
1667results or their values were already at hand; some statements may
1668execute in different places because they were moved out of loops.
1669
1670Nevertheless it proves possible to debug optimized output. This makes
1671it reasonable to use the optimizer for programs that might have bugs.
1672
1673The following options are useful when GNU CC is generated with the
1674capability for more than one debugging format.
1675
1676@item -ggdb
861bb6c1
JL
1677Produce debugging information for use by GDB. This means to use the
1678most expressive format available (DWARF 2, stabs, or the native format
1679if neither of those are supported), including GDB extensions if at all
1680possible.
74291a4b
MM
1681
1682@item -gstabs
1683Produce debugging information in stabs format (if that is supported),
1684without GDB extensions. This is the format used by DBX on most BSD
1685systems. On MIPS, Alpha and System V Release 4 systems this option
1686produces stabs debugging output which is not understood by DBX or SDB.
1687On System V Release 4 systems this option requires the GNU assembler.
1688
1689@item -gstabs+
1690Produce debugging information in stabs format (if that is supported),
1691using GNU extensions understood only by the GNU debugger (GDB). The
1692use of these extensions is likely to make other debuggers crash or
1693refuse to read the program.
1694
1695@item -gcoff
1696Produce debugging information in COFF format (if that is supported).
1697This is the format used by SDB on most System V systems prior to
1698System V Release 4.
1699
1700@item -gxcoff
1701Produce debugging information in XCOFF format (if that is supported).
1702This is the format used by the DBX debugger on IBM RS/6000 systems.
1703
1704@item -gxcoff+
1705Produce debugging information in XCOFF format (if that is supported),
1706using GNU extensions understood only by the GNU debugger (GDB). The
1707use of these extensions is likely to make other debuggers crash or
1708refuse to read the program, and may cause assemblers other than the GNU
1709assembler (GAS) to fail with an error.
1710
1711@item -gdwarf
861bb6c1
JL
1712Produce debugging information in DWARF version 1 format (if that is
1713supported). This is the format used by SDB on most System V Release 4
1714systems.
74291a4b
MM
1715
1716@item -gdwarf+
861bb6c1
JL
1717Produce debugging information in DWARF version 1 format (if that is
1718supported), using GNU extensions understood only by the GNU debugger
1719(GDB). The use of these extensions is likely to make other debuggers
1720crash or refuse to read the program.
1721
1722@item -gdwarf-2
1723Produce debugging information in DWARF version 2 format (if that is
1724supported). This is the format used by DBX on IRIX 6.
74291a4b
MM
1725
1726@item -g@var{level}
1727@itemx -ggdb@var{level}
1728@itemx -gstabs@var{level}
1729@itemx -gcoff@var{level}
1730@itemx -gxcoff@var{level}
1731@itemx -gdwarf@var{level}
861bb6c1 1732@itemx -gdwarf-2@var{level}
74291a4b
MM
1733Request debugging information and also use @var{level} to specify how
1734much information. The default level is 2.
1735
1736Level 1 produces minimal information, enough for making backtraces in
1737parts of the program that you don't plan to debug. This includes
1738descriptions of functions and external variables, but no information
1739about local variables and no line numbers.
1740
1741Level 3 includes extra information, such as all the macro definitions
1742present in the program. Some debuggers support macro expansion when
1743you use @samp{-g3}.
1744
1745@cindex @code{prof}
1746@item -p
1747Generate extra code to write profile information suitable for the
1748analysis program @code{prof}. You must use this option when compiling
1749the source files you want data about, and you must also use it when
1750linking.
1751
1752@cindex @code{gprof}
1753@item -pg
1754Generate extra code to write profile information suitable for the
1755analysis program @code{gprof}. You must use this option when compiling
1756the source files you want data about, and you must also use it when
1757linking.
1758
1759@cindex @code{tcov}
1760@item -a
1761Generate extra code to write profile information for basic blocks, which will
1762record the number of times each basic block is executed, the basic block start
1763address, and the function name containing the basic block. If @samp{-g} is
1764used, the line number and filename of the start of the basic block will also be
1765recorded. If not overridden by the machine description, the default action is
1766to append to the text file @file{bb.out}.
1767
1768This data could be analyzed by a program like @code{tcov}. Note,
1769however, that the format of the data is not what @code{tcov} expects.
1770Eventually GNU @code{gprof} should be extended to process this data.
1771
1772@item -ax
1773Generate extra code to profile basic blocks. Your executable will
1774produce output that is a superset of that produced when @samp{-a} is
1775used. Additional output is the source and target address of the basic
1776blocks where a jump takes place, the number of times a jump is executed,
1777and (optionally) the complete sequence of basic blocks being executed.
1778The output is appended to file @file{bb.out}.
1779
1780You can examine different profiling aspects without recompilation. Your
1781execuable will read a list of function names from file @file{bb.in}.
1782Profiling starts when a function on the list is entered and stops when
1783that invocation is exited. To exclude a function from profiling, prefix
1784its name with `-'. If a function name is not unique, you can
1785disambiguate it by writing it in the form
1786@samp{/path/filename.d:functionname}. Your executable will write the
1787available paths and filenames in file @file{bb.out}.
1788
1789Several function names have a special meaning:
1790@table @code
1791@item __bb_jumps__
1792Write source, target and frequency of jumps to file @file{bb.out}.
1793@item __bb_hidecall__
1794Exclude function calls from frequency count.
1795@item __bb_showret__
1796Include function returns in frequency count.
1797@item __bb_trace__
1798Write the sequence of basic blocks executed to file @file{bbtrace.gz}.
1799The file will be compressed using the program @samp{gzip}, which must
1800exist in your @code{PATH}. On systems without the @samp{popen}
1801function, the file will be named @file{bbtrace} and will not be
1802compressed. @strong{Profiling for even a few seconds on these systems
1803will produce a very large file.} Note: @code{__bb_hidecall__} and
1804@code{__bb_showret__} will not affect the sequence written to
1805@file{bbtrace.gz}.
1806@end table
1807
1808Here's a short example using different profiling parameters
1809in file @file{bb.in}. Assume function @code{foo} consists of basic blocks
18101 and 2 and is called twice from block 3 of function @code{main}. After
1811the calls, block 3 transfers control to block 4 of @code{main}.
1812
1813With @code{__bb_trace__} and @code{main} contained in file @file{bb.in},
1814the following sequence of blocks is written to file @file{bbtrace.gz}:
18150 3 1 2 1 2 4. The return from block 2 to block 3 is not shown, because
1816the return is to a point inside the block and not to the top. The
1817block address 0 always indicates, that control is transferred
1818to the trace from somewhere outside the observed functions. With
1819@samp{-foo} added to @file{bb.in}, the blocks of function
1820@code{foo} are removed from the trace, so only 0 3 4 remains.
1821
1822With @code{__bb_jumps__} and @code{main} contained in file @file{bb.in},
1823jump frequencies will be written to file @file{bb.out}. The
1824frequencies are obtained by constructing a trace of blocks
1825and incrementing a counter for every neighbouring pair of blocks
1826in the trace. The trace 0 3 1 2 1 2 4 displays the following
1827frequencies:
1828
1829@example
1830Jump from block 0x0 to block 0x3 executed 1 time(s)
1831Jump from block 0x3 to block 0x1 executed 1 time(s)
1832Jump from block 0x1 to block 0x2 executed 2 time(s)
1833Jump from block 0x2 to block 0x1 executed 1 time(s)
1834Jump from block 0x2 to block 0x4 executed 1 time(s)
1835@end example
1836
1837With @code{__bb_hidecall__}, control transfer due to call instructions
1838is removed from the trace, that is the trace is cut into three parts: 0
18393 4, 0 1 2 and 0 1 2. With @code{__bb_showret__}, control transfer due
1840to return instructions is added to the trace. The trace becomes: 0 3 1
18412 3 1 2 3 4. Note, that this trace is not the same, as the sequence
1842written to @file{bbtrace.gz}. It is solely used for counting jump
1843frequencies.
1844
861bb6c1
JL
1845@item -fprofile-arcs
1846Instrument @dfn{arcs} during compilation. For each function of your
1847program, GNU CC creates a program flow graph, then finds a spanning tree
1848for the graph. Only arcs that are not on the spanning tree have to be
1849instrumented: the compiler adds code to count the number of times that these
1850arcs are executed. When an arc is the only exit or only entrance to a
1851block, the instrumentation code can be added to the block; otherwise, a
1852new basic block must be created to hold the instrumentation code.
1853
1854Since not every arc in the program must be instrumented, programs
1855compiled with this option run faster than programs compiled with
1856@samp{-a}, which adds instrumentation code to every basic block in the
1857program. The tradeoff: since @code{gcov} does not have
1858execution counts for all branches, it must start with the execution
1859counts for the instrumented branches, and then iterate over the program
1860flow graph until the entire graph has been solved. Hence, @code{gcov}
1861runs a little more slowly than a program which uses information from
1862@samp{-a}.
1863
1864@samp{-fprofile-arcs} also makes it possible to estimate branch
1865probabilities, and to calculate basic block execution counts. In
1866general, basic block execution counts do not give enough information to
1867estimate all branch probabilities. When the compiled program exits, it
1868saves the arc execution counts to a file called
1869@file{@var{sourcename}.da}. Use the compiler option
1870@samp{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
1871Control Optimization}) when recompiling, to optimize using estimated
1872branch probabilities.
1873
1874@need 2000
1875@item -ftest-coverage
1876Create data files for the @code{gcov} code-coverage utility
1877(@pxref{Gcov,, @code{gcov}: a GNU CC Test Coverage Program}).
1878The data file names begin with the name of your source file:
1879
1880@table @code
1881@item @var{sourcename}.bb
1882A mapping from basic blocks to line numbers, which @code{gcov} uses to
1883associate basic block execution counts with line numbers.
1884
1885@item @var{sourcename}.bbg
1886A list of all arcs in the program flow graph. This allows @code{gcov}
1887to reconstruct the program flow graph, so that it can compute all basic
1888block and arc execution counts from the information in the
1889@code{@var{sourcename}.da} file (this last file is the output from
1890@samp{-fprofile-arcs}).
1891@end table
1892
74291a4b
MM
1893@item -d@var{letters}
1894Says to make debugging dumps during compilation at times specified by
1895@var{letters}. This is used for debugging the compiler. The file names
1896for most of the dumps are made by appending a word to the source file
1897name (e.g. @file{foo.c.rtl} or @file{foo.c.jump}). Here are the
1898possible letters for use in @var{letters}, and their meanings:
1899
1900@table @samp
1901@item M
1902Dump all macro definitions, at the end of preprocessing, and write no
1903output.
1904@item N
1905Dump all macro names, at the end of preprocessing.
1906@item D
1907Dump all macro definitions, at the end of preprocessing, in addition to
1908normal output.
1909@item y
1910Dump debugging information during parsing, to standard error.
1911@item r
1912Dump after RTL generation, to @file{@var{file}.rtl}.
1913@item x
1914Just generate RTL for a function instead of compiling it. Usually used
1915with @samp{r}.
1916@item j
1917Dump after first jump optimization, to @file{@var{file}.jump}.
1918@item s
1919Dump after CSE (including the jump optimization that sometimes
1920follows CSE), to @file{@var{file}.cse}.
1921@item L
1922Dump after loop optimization, to @file{@var{file}.loop}.
1923@item t
1924Dump after the second CSE pass (including the jump optimization that
1925sometimes follows CSE), to @file{@var{file}.cse2}.
1926@item f
1927Dump after flow analysis, to @file{@var{file}.flow}.
1928@item c
1929Dump after instruction combination, to the file
1930@file{@var{file}.combine}.
1931@item S
1932Dump after the first instruction scheduling pass, to
1933@file{@var{file}.sched}.
1934@item l
1935Dump after local register allocation, to
1936@file{@var{file}.lreg}.
1937@item g
1938Dump after global register allocation, to
1939@file{@var{file}.greg}.
1940@item R
1941Dump after the second instruction scheduling pass, to
1942@file{@var{file}.sched2}.
1943@item J
1944Dump after last jump optimization, to @file{@var{file}.jump2}.
1945@item d
1946Dump after delayed branch scheduling, to @file{@var{file}.dbr}.
1947@item k
1948Dump after conversion from registers to stack, to @file{@var{file}.stack}.
1949@item a
1950Produce all the dumps listed above.
1951@item m
1952Print statistics on memory usage, at the end of the run, to
1953standard error.
1954@item p
1955Annotate the assembler output with a comment indicating which
1956pattern and alternative was used.
1957@item A
1958Annotate the assembler output with miscellaneous debugging information.
1959@end table
1960
1961@item -fpretend-float
1962When running a cross-compiler, pretend that the target machine uses the
1963same floating point format as the host machine. This causes incorrect
1964output of the actual floating constants, but the actual instruction
1965sequence will probably be the same as GNU CC would make when running on
1966the target machine.
1967
1968@item -save-temps
1969Store the usual ``temporary'' intermediate files permanently; place them
1970in the current directory and name them based on the source file. Thus,
1971compiling @file{foo.c} with @samp{-c -save-temps} would produce files
1972@file{foo.i} and @file{foo.s}, as well as @file{foo.o}.
1973
1974@item -print-file-name=@var{library}
1975Print the full absolute name of the library file @var{library} that
1976would be used when linking---and don't do anything else. With this
1977option, GNU CC does not compile or link anything; it just prints the
1978file name.
1979
1980@item -print-prog-name=@var{program}
1981Like @samp{-print-file-name}, but searches for a program such as @samp{cpp}.
1982
1983@item -print-libgcc-file-name
1984Same as @samp{-print-file-name=libgcc.a}.
1985
1986This is useful when you use @samp{-nostdlib} or @samp{-nodefaultlibs}
1987but you do want to link with @file{libgcc.a}. You can do
1988
1989@example
1990gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
1991@end example
1992
1993@item -print-search-dirs
1994Print the name of the configured installation directory and a list of
1995program and library directories gcc will search---and don't do anything else.
1996
1997This is useful when gcc prints the error message
1998@samp{installation problem, cannot exec cpp: No such file or directory}.
1999To resolve this you either need to put @file{cpp} and the other compiler
2000components where gcc expects to find them, or you can set the environment
2001variable @code{GCC_EXEC_PREFIX} to the directory where you installed them.
2002Don't forget the trailing '/'.
2003@xref{Environment Variables}.
2004@end table
2005
2006@node Optimize Options
2007@section Options That Control Optimization
2008@cindex optimize options
2009@cindex options, optimization
2010
2011These options control various sorts of optimizations:
2012
2013@table @code
2014@item -O
2015@itemx -O1
2016Optimize. Optimizing compilation takes somewhat more time, and a lot
2017more memory for a large function.
2018
2019Without @samp{-O}, the compiler's goal is to reduce the cost of
2020compilation and to make debugging produce the expected results.
2021Statements are independent: if you stop the program with a breakpoint
2022between statements, you can then assign a new value to any variable or
2023change the program counter to any other statement in the function and
2024get exactly the results you would expect from the source code.
2025
2026Without @samp{-O}, the compiler only allocates variables declared
2027@code{register} in registers. The resulting compiled code is a little
2028worse than produced by PCC without @samp{-O}.
2029
2030With @samp{-O}, the compiler tries to reduce code size and execution
2031time.
2032
2033When you specify @samp{-O}, the compiler turns on @samp{-fthread-jumps}
2034and @samp{-fdefer-pop} on all machines. The compiler turns on
2035@samp{-fdelayed-branch} on machines that have delay slots, and
2036@samp{-fomit-frame-pointer} on machines that can support debugging even
2037without a frame pointer. On some machines the compiler also turns
2038on other flags.@refill
2039
2040@item -O2
2041Optimize even more. GNU CC performs nearly all supported optimizations
2042that do not involve a space-speed tradeoff. The compiler does not
2043perform loop unrolling or function inlining when you specify @samp{-O2}.
2044As compared to @samp{-O}, this option increases both compilation time
2045and the performance of the generated code.
2046
2047@samp{-O2} turns on all optional optimizations except for loop unrolling
2048and function inlining. It also turns on the @samp{-fforce-mem} option
2049on all machines and frame pointer elimination on machines where doing so
2050does not interfere with debugging.
2051
2052@item -O3
2053Optimize yet more. @samp{-O3} turns on all optimizations specified by
2054@samp{-O2} and also turns on the @samp{inline-functions} option.
2055
2056@item -O0
2057Do not optimize.
2058
2059If you use multiple @samp{-O} options, with or without level numbers,
2060the last such option is the one that is effective.
2061@end table
2062
2063Options of the form @samp{-f@var{flag}} specify machine-independent
2064flags. Most flags have both positive and negative forms; the negative
2065form of @samp{-ffoo} would be @samp{-fno-foo}. In the table below,
2066only one of the forms is listed---the one which is not the default.
2067You can figure out the other form by either removing @samp{no-} or
2068adding it.
2069
2070@table @code
2071@item -ffloat-store
2072Do not store floating point variables in registers, and inhibit other
2073options that might change whether a floating point value is taken from a
2074register or memory.
2075
2076@cindex floating point precision
2077This option prevents undesirable excess precision on machines such as
2078the 68000 where the floating registers (of the 68881) keep more
2079precision than a @code{double} is supposed to have. Similarly for the
2080x86 architecture. For most programs, the excess precision does only
2081good, but a few programs rely on the precise definition of IEEE floating
2082point. Use @samp{-ffloat-store} for such programs.
2083
2084@item -fno-default-inline
2085Do not make member functions inline by default merely because they are
2086defined inside the class scope (C++ only). Otherwise, when you specify
2087@w{@samp{-O}}, member functions defined inside class scope are compiled
2088inline by default; i.e., you don't need to add @samp{inline} in front of
2089the member function name.
2090
2091@item -fno-defer-pop
2092Always pop the arguments to each function call as soon as that function
2093returns. For machines which must pop arguments after a function call,
2094the compiler normally lets arguments accumulate on the stack for several
2095function calls and pops them all at once.
2096
2097@item -fforce-mem
2098Force memory operands to be copied into registers before doing
2099arithmetic on them. This produces better code by making all memory
2100references potential common subexpressions. When they are not common
2101subexpressions, instruction combination should eliminate the separate
2102register-load. The @samp{-O2} option turns on this option.
2103
2104@item -fforce-addr
2105Force memory address constants to be copied into registers before
2106doing arithmetic on them. This may produce better code just as
2107@samp{-fforce-mem} may.
2108
2109@item -fomit-frame-pointer
2110Don't keep the frame pointer in a register for functions that
2111don't need one. This avoids the instructions to save, set up and
2112restore frame pointers; it also makes an extra register available
2113in many functions. @strong{It also makes debugging impossible on
2114some machines.}
2115
2116@ifset INTERNALS
2117On some machines, such as the Vax, this flag has no effect, because
2118the standard calling sequence automatically handles the frame pointer
2119and nothing is saved by pretending it doesn't exist. The
2120machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2121whether a target machine supports this flag. @xref{Registers}.@refill
2122@end ifset
2123@ifclear INTERNALS
2124On some machines, such as the Vax, this flag has no effect, because
2125the standard calling sequence automatically handles the frame pointer
2126and nothing is saved by pretending it doesn't exist. The
2127machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2128whether a target machine supports this flag. @xref{Registers,,Register
2129Usage, gcc.info, Using and Porting GCC}.@refill
2130@end ifclear
2131
2132@item -fno-inline
2133Don't pay attention to the @code{inline} keyword. Normally this option
2134is used to keep the compiler from expanding any functions inline.
2135Note that if you are not optimizing, no functions can be expanded inline.
2136
2137@item -finline-functions
2138Integrate all simple functions into their callers. The compiler
2139heuristically decides which functions are simple enough to be worth
2140integrating in this way.
2141
2142If all calls to a given function are integrated, and the function is
2143declared @code{static}, then the function is normally not output as
2144assembler code in its own right.
2145
2146@item -fkeep-inline-functions
2147Even if all calls to a given function are integrated, and the function
2148is declared @code{static}, nevertheless output a separate run-time
2149callable version of the function. This switch does not affect
2150@code{extern inline} functions.
2151
2152@item -fkeep-static-consts
2153Emit variables declared @code{static const} when optimization isn't turned
2154on, even if the variables aren't referenced.
2155
2156GNU CC enables this option by default. If you want to force the compiler to
2157check if the variable was referenced, regardless of whether or not
2158optimization is turned on, use the @samp{-fno-keep-static-consts} option.
2159
2160@item -fno-function-cse
2161Do not put function addresses in registers; make each instruction that
2162calls a constant function contain the function's address explicitly.
2163
2164This option results in less efficient code, but some strange hacks
2165that alter the assembler output may be confused by the optimizations
2166performed when this option is not used.
2167
2168@item -ffast-math
2169This option allows GCC to violate some ANSI or IEEE rules and/or
2170specifications in the interest of optimizing code for speed. For
2171example, it allows the compiler to assume arguments to the @code{sqrt}
2172function are non-negative numbers and that no floating-point values
2173are NaNs.
2174
2175This option should never be turned on by any @samp{-O} option since
2176it can result in incorrect output for programs which depend on
2177an exact implementation of IEEE or ANSI rules/specifications for
2178math functions.
2179@end table
2180
2181@c following causes underfulls.. they don't look great, but we deal.
2182@c --mew 26jan93
2183The following options control specific optimizations. The @samp{-O2}
2184option turns on all of these optimizations except @samp{-funroll-loops}
2185and @samp{-funroll-all-loops}. On most machines, the @samp{-O} option
2186turns on the @samp{-fthread-jumps} and @samp{-fdelayed-branch} options,
2187but specific machines may handle it differently.
2188
2189You can use the following flags in the rare cases when ``fine-tuning''
2190of optimizations to be performed is desired.
2191
2192@table @code
2193@item -fstrength-reduce
2194Perform the optimizations of loop strength reduction and
2195elimination of iteration variables.
2196
2197@item -fthread-jumps
2198Perform optimizations where we check to see if a jump branches to a
2199location where another comparison subsumed by the first is found. If
2200so, the first branch is redirected to either the destination of the
2201second branch or a point immediately following it, depending on whether
2202the condition is known to be true or false.
2203
2204@item -fcse-follow-jumps
2205In common subexpression elimination, scan through jump instructions
2206when the target of the jump is not reached by any other path. For
2207example, when CSE encounters an @code{if} statement with an
2208@code{else} clause, CSE will follow the jump when the condition
2209tested is false.
2210
2211@item -fcse-skip-blocks
2212This is similar to @samp{-fcse-follow-jumps}, but causes CSE to
2213follow jumps which conditionally skip over blocks. When CSE
2214encounters a simple @code{if} statement with no else clause,
2215@samp{-fcse-skip-blocks} causes CSE to follow the jump around the
2216body of the @code{if}.
2217
2218@item -frerun-cse-after-loop
2219Re-run common subexpression elimination after loop optimizations has been
2220performed.
2221
6d6d0fa0
JL
2222@item -frerun-loop-opt
2223Run the loop optimizer twice.
2224
74291a4b
MM
2225@item -fexpensive-optimizations
2226Perform a number of minor optimizations that are relatively expensive.
2227
2228@item -fdelayed-branch
2229If supported for the target machine, attempt to reorder instructions
2230to exploit instruction slots available after delayed branch
2231instructions.
2232
2233@item -fschedule-insns
2234If supported for the target machine, attempt to reorder instructions to
2235eliminate execution stalls due to required data being unavailable. This
2236helps machines that have slow floating point or memory load instructions
2237by allowing other instructions to be issued until the result of the load
2238or floating point instruction is required.
2239
2240@item -fschedule-insns2
2241Similar to @samp{-fschedule-insns}, but requests an additional pass of
2242instruction scheduling after register allocation has been done. This is
2243especially useful on machines with a relatively small number of
2244registers and where memory load instructions take more than one cycle.
2245
2246@item -ffunction-sections
2247Place each function into its own section in the output file if the
2248target supports arbitrary sections. The function's name determines
2249the section's name in the output file.
2250
2251Use this option on systems where the linker can perform optimizations
2252to improve locality of reference in the instruction space. HPPA
2253processors running HP-UX and Sparc processors running Solaris 2 have
2254linkers with such optimizations. Other systems using the ELF object format
2255as well as AIX may have these optimizations in the future.
2256
2257Only use this option when there are significant benefits from doing
2258so. When you specify this option, the assembler and linker will
2259create larger object and executable files and will also be slower.
2260You will not be able to use @code{gprof} on all systems if you
2261specify this option and you may have problems with debugging if
2262you specify both this option and @samp{-g}.
2263
2264@item -fcaller-saves
2265Enable values to be allocated in registers that will be clobbered by
2266function calls, by emitting extra instructions to save and restore the
2267registers around such calls. Such allocation is done only when it
2268seems to result in better code than would otherwise be produced.
2269
2270This option is enabled by default on certain machines, usually those
2271which have no call-preserved registers to use instead.
2272
2273@item -funroll-loops
2274Perform the optimization of loop unrolling. This is only done for loops
2275whose number of iterations can be determined at compile time or run time.
2276@samp{-funroll-loop} implies both @samp{-fstrength-reduce} and
2277@samp{-frerun-cse-after-loop}.
2278
2279@item -funroll-all-loops
2280Perform the optimization of loop unrolling. This is done for all loops
2281and usually makes programs run more slowly. @samp{-funroll-all-loops}
2282implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
2283
e5eb27e5
JL
2284@item -fmove-all-movables
2285Forces all invariant computations in loops to be moved
2286outside the loop.
2287
2288@item -freduce-all-givs
2289Forces all general-induction variables in loops to be
2290strength-reduced.
2291
2292@emph{Note:} When compiling programs written in Fortran,
2293@samp{-fmove-all-moveables} and @samp{-freduce-all-givs} are enabled
2294by default when you use the optimizer.
2295
2296These options may generate better or worse code; results are highly
2297dependent on the structure of loops within the source code.
2298
2299These two options are intended to be removed someday, once
2300they have helped determine the efficacy of various
2301approaches to improving loop optimizations.
2302
ec83e9d3 2303Please let us (@code{egcs@@cygnus.com} and @code{fortran@@gnu.ai.mit.edu})
e5eb27e5
JL
2304know how use of these options affects
2305the performance of your production code.
2306We're very interested in code that runs @emph{slower}
2307when these options are @emph{enabled}.
2308
74291a4b
MM
2309@item -fno-peephole
2310Disable any machine-specific peephole optimizations.
861bb6c1
JL
2311
2312@item -fbranch-probabilities
2313After running a program compiled with @samp{-fprofile-arcs}
2314(@pxref{Debugging Options,, Options for Debugging Your Program or
2315@code{gcc}}), you can compile it a second time using
2316@samp{-fbranch-probabilities}, to improve optimizations based on
2317guessing the path a branch might take.
2318
2319@ifset INTERNALS
2320With @samp{-fbranch-probabilities}, GNU CC puts a @samp{REG_EXEC_COUNT}
2321note on the first instruction of each basic block, and a
2322@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
2323These can be used to improve optimization. Currently, they are only
2324used in one place: in @file{reorg.c}, instead of guessing which path a
2325branch is mostly to take, the @samp{REG_BR_PROB} values are used to
2326exactly determine which path is taken more often.
2327@end ifset
8c660648
JL
2328
2329@item -fregmove
2330Some machines only support 2 operands per instruction. On such
2331machines, GNU CC might have to do extra copies. The @samp{-fregmove}
2332option overrides the default for the machine to do the copy before
2333register allocation.
74291a4b
MM
2334@end table
2335
2336@node Preprocessor Options
2337@section Options Controlling the Preprocessor
2338@cindex preprocessor options
2339@cindex options, preprocessor
2340
2341These options control the C preprocessor, which is run on each C source
2342file before actual compilation.
2343
2344If you use the @samp{-E} option, nothing is done except preprocessing.
2345Some of these options make sense only together with @samp{-E} because
2346they cause the preprocessor output to be unsuitable for actual
2347compilation.
2348
2349@table @code
2350@item -include @var{file}
2351Process @var{file} as input before processing the regular input file.
2352In effect, the contents of @var{file} are compiled first. Any @samp{-D}
2353and @samp{-U} options on the command line are always processed before
2354@samp{-include @var{file}}, regardless of the order in which they are
2355written. All the @samp{-include} and @samp{-imacros} options are
2356processed in the order in which they are written.
2357
2358@item -imacros @var{file}
2359Process @var{file} as input, discarding the resulting output, before
2360processing the regular input file. Because the output generated from
2361@var{file} is discarded, the only effect of @samp{-imacros @var{file}}
2362is to make the macros defined in @var{file} available for use in the
2363main input.
2364
2365Any @samp{-D} and @samp{-U} options on the command line are always
2366processed before @samp{-imacros @var{file}}, regardless of the order in
2367which they are written. All the @samp{-include} and @samp{-imacros}
2368options are processed in the order in which they are written.
2369
2370@item -idirafter @var{dir}
2371@cindex second include path
2372Add the directory @var{dir} to the second include path. The directories
2373on the second include path are searched when a header file is not found
2374in any of the directories in the main include path (the one that
2375@samp{-I} adds to).
2376
2377@item -iprefix @var{prefix}
2378Specify @var{prefix} as the prefix for subsequent @samp{-iwithprefix}
2379options.
2380
2381@item -iwithprefix @var{dir}
2382Add a directory to the second include path. The directory's name is
2383made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was
2384specified previously with @samp{-iprefix}. If you have not specified a
2385prefix yet, the directory containing the installed passes of the
2386compiler is used as the default.
2387
2388@item -iwithprefixbefore @var{dir}
2389Add a directory to the main include path. The directory's name is made
2390by concatenating @var{prefix} and @var{dir}, as in the case of
2391@samp{-iwithprefix}.
2392
2393@item -isystem @var{dir}
2394Add a directory to the beginning of the second include path, marking it
2395as a system directory, so that it gets the same special treatment as
2396is applied to the standard system directories.
2397
2398@item -nostdinc
2399Do not search the standard system directories for header files. Only
2400the directories you have specified with @samp{-I} options (and the
2401current directory, if appropriate) are searched. @xref{Directory
2402Options}, for information on @samp{-I}.
2403
2404By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
2405search path to only those directories you specify explicitly.
2406
2407@item -undef
2408Do not predefine any nonstandard macros. (Including architecture flags).
2409
2410@item -E
2411Run only the C preprocessor. Preprocess all the C source files
2412specified and output the results to standard output or to the
2413specified output file.
2414
2415@item -C
2416Tell the preprocessor not to discard comments. Used with the
2417@samp{-E} option.
2418
2419@item -P
2420Tell the preprocessor not to generate @samp{#line} directives.
2421Used with the @samp{-E} option.
2422
2423@cindex make
2424@cindex dependencies, make
2425@item -M
2426Tell the preprocessor to output a rule suitable for @code{make}
2427describing the dependencies of each object file. For each source file,
2428the preprocessor outputs one @code{make}-rule whose target is the object
2429file name for that source file and whose dependencies are all the
2430@code{#include} header files it uses. This rule may be a single line or
2431may be continued with @samp{\}-newline if it is long. The list of rules
2432is printed on standard output instead of the preprocessed C program.
2433
2434@samp{-M} implies @samp{-E}.
2435
2436Another way to specify output of a @code{make} rule is by setting
2437the environment variable @code{DEPENDENCIES_OUTPUT} (@pxref{Environment
2438Variables}).
2439
2440@item -MM
2441Like @samp{-M} but the output mentions only the user header files
2442included with @samp{#include "@var{file}"}. System header files
2443included with @samp{#include <@var{file}>} are omitted.
2444
2445@item -MD
2446Like @samp{-M} but the dependency information is written to a file made by
2447replacing ".c" with ".d" at the end of the input file names.
2448This is in addition to compiling the file as specified---@samp{-MD} does
2449not inhibit ordinary compilation the way @samp{-M} does.
2450
2451In Mach, you can use the utility @code{md} to merge multiple dependency
2452files into a single dependency file suitable for using with the @samp{make}
2453command.
2454
2455@item -MMD
2456Like @samp{-MD} except mention only user header files, not system
2457header files.
2458
2459@item -MG
2460Treat missing header files as generated files and assume they live in the
2461same directory as the source file. If you specify @samp{-MG}, you
2462must also specify either @samp{-M} or @samp{-MM}. @samp{-MG} is not
2463supported with @samp{-MD} or @samp{-MMD}.
2464
2465@item -H
2466Print the name of each header file used, in addition to other normal
2467activities.
2468
2469@item -A@var{question}(@var{answer})
2470Assert the answer @var{answer} for @var{question}, in case it is tested
2471with a preprocessing conditional such as @samp{#if
2472#@var{question}(@var{answer})}. @samp{-A-} disables the standard
2473assertions that normally describe the target machine.
2474
2475@item -D@var{macro}
2476Define macro @var{macro} with the string @samp{1} as its definition.
2477
2478@item -D@var{macro}=@var{defn}
2479Define macro @var{macro} as @var{defn}. All instances of @samp{-D} on
2480the command line are processed before any @samp{-U} options.
2481
2482@item -U@var{macro}
2483Undefine macro @var{macro}. @samp{-U} options are evaluated after all
2484@samp{-D} options, but before any @samp{-include} and @samp{-imacros}
2485options.
2486
2487@item -dM
2488Tell the preprocessor to output only a list of the macro definitions
2489that are in effect at the end of preprocessing. Used with the @samp{-E}
2490option.
2491
2492@item -dD
2493Tell the preprocessing to pass all macro definitions into the output, in
2494their proper sequence in the rest of the output.
2495
2496@item -dN
2497Like @samp{-dD} except that the macro arguments and contents are omitted.
2498Only @samp{#define @var{name}} is included in the output.
2499
2500@item -trigraphs
2501Support ANSI C trigraphs. The @samp{-ansi} option also has this effect.
2502
2503@item -Wp,@var{option}
2504Pass @var{option} as an option to the preprocessor. If @var{option}
2505contains commas, it is split into multiple options at the commas.
2506@end table
2507
2508@node Assembler Options
2509@section Passing Options to the Assembler
2510
2511@c prevent bad page break with this line
2512You can pass options to the assembler.
2513
2514@table @code
2515@item -Wa,@var{option}
2516Pass @var{option} as an option to the assembler. If @var{option}
2517contains commas, it is split into multiple options at the commas.
2518@end table
2519
2520@node Link Options
2521@section Options for Linking
2522@cindex link options
2523@cindex options, linking
2524
2525These options come into play when the compiler links object files into
2526an executable output file. They are meaningless if the compiler is
2527not doing a link step.
2528
2529@table @code
2530@cindex file names
2531@item @var{object-file-name}
2532A file name that does not end in a special recognized suffix is
2533considered to name an object file or library. (Object files are
2534distinguished from libraries by the linker according to the file
2535contents.) If linking is done, these object files are used as input
2536to the linker.
2537
2538@item -c
2539@itemx -S
2540@itemx -E
2541If any of these options is used, then the linker is not run, and
2542object file names should not be used as arguments. @xref{Overall
2543Options}.
2544
2545@cindex Libraries
2546@item -l@var{library}
2547Search the library named @var{library} when linking.
2548
2549It makes a difference where in the command you write this option; the
2550linker searches processes libraries and object files in the order they
2551are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
2552after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers
2553to functions in @samp{z}, those functions may not be loaded.
2554
2555The linker searches a standard list of directories for the library,
2556which is actually a file named @file{lib@var{library}.a}. The linker
2557then uses this file as if it had been specified precisely by name.
2558
2559The directories searched include several standard system directories
2560plus any that you specify with @samp{-L}.
2561
2562Normally the files found this way are library files---archive files
2563whose members are object files. The linker handles an archive file by
2564scanning through it for members which define symbols that have so far
2565been referenced but not defined. But if the file that is found is an
2566ordinary object file, it is linked in the usual fashion. The only
2567difference between using an @samp{-l} option and specifying a file name
2568is that @samp{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
2569and searches several directories.
2570
2571@item -lobjc
2572You need this special case of the @samp{-l} option in order to
2573link an Objective C program.
2574
2575@item -nostartfiles
2576Do not use the standard system startup files when linking.
2577The standard system libraries are used normally, unless @code{-nostdlib}
2578or @code{-nodefaultlibs} is used.
2579
2580@item -nodefaultlibs
2581Do not use the standard system libraries when linking.
2582Only the libraries you specify will be passed to the linker.
2583The standard startup files are used normally, unless @code{-nostartfiles}
2584is used.
2585
2586@item -nostdlib
2587Do not use the standard system startup files or libraries when linking.
2588No startup files and only the libraries you specify will be passed to
2589the linker.
2590
2591@cindex @code{-lgcc}, use with @code{-nostdlib}
2592@cindex @code{-nostdlib} and unresolved references
2593@cindex unresolved references and @code{-nostdlib}
2594@cindex @code{-lgcc}, use with @code{-nodefaultlibs}
2595@cindex @code{-nodefaultlibs} and unresolved references
2596@cindex unresolved references and @code{-nodefaultlibs}
2597One of the standard libraries bypassed by @samp{-nostdlib} and
2598@samp{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
2599that GNU CC uses to overcome shortcomings of particular machines, or special
2600needs for some languages.
2601@ifset INTERNALS
2602(@xref{Interface,,Interfacing to GNU CC Output}, for more discussion of
2603@file{libgcc.a}.)
2604@end ifset
2605@ifclear INTERNALS
2606(@xref{Interface,,Interfacing to GNU CC Output,gcc.info,Porting GNU CC},
2607for more discussion of @file{libgcc.a}.)
2608@end ifclear
2609In most cases, you need @file{libgcc.a} even when you want to avoid
2610other standard libraries. In other words, when you specify @samp{-nostdlib}
2611or @samp{-nodefaultlibs} you should usually specify @samp{-lgcc} as well.
2612This ensures that you have no unresolved references to internal GNU CC
2613library subroutines. (For example, @samp{__main}, used to ensure C++
2614constructors will be called; @pxref{Collect2,,@code{collect2}}.)
2615
2616@item -s
2617Remove all symbol table and relocation information from the executable.
2618
2619@item -static
2620On systems that support dynamic linking, this prevents linking with the shared
2621libraries. On other systems, this option has no effect.
2622
2623@item -shared
2624Produce a shared object which can then be linked with other objects to
2625form an executable. Not all systems support this option. You must
2626also specify @samp{-fpic} or @samp{-fPIC} on some systems when
2627you specify this option.
2628
2629@item -symbolic
2630Bind references to global symbols when building a shared object. Warn
2631about any unresolved references (unless overridden by the link editor
2632option @samp{-Xlinker -z -Xlinker defs}). Only a few systems support
2633this option.
2634
2635@item -Xlinker @var{option}
2636Pass @var{option} as an option to the linker. You can use this to
2637supply system-specific linker options which GNU CC does not know how to
2638recognize.
2639
2640If you want to pass an option that takes an argument, you must use
2641@samp{-Xlinker} twice, once for the option and once for the argument.
2642For example, to pass @samp{-assert definitions}, you must write
2643@samp{-Xlinker -assert -Xlinker definitions}. It does not work to write
2644@samp{-Xlinker "-assert definitions"}, because this passes the entire
2645string as a single argument, which is not what the linker expects.
2646
2647@item -Wl,@var{option}
2648Pass @var{option} as an option to the linker. If @var{option} contains
2649commas, it is split into multiple options at the commas.
2650
2651@item -u @var{symbol}
2652Pretend the symbol @var{symbol} is undefined, to force linking of
2653library modules to define it. You can use @samp{-u} multiple times with
2654different symbols to force loading of additional library modules.
2655@end table
2656
2657@node Directory Options
2658@section Options for Directory Search
2659@cindex directory options
2660@cindex options, directory search
2661@cindex search path
2662
2663These options specify directories to search for header files, for
2664libraries and for parts of the compiler:
2665
2666@table @code
2667@item -I@var{dir}
861bb6c1
JL
2668Add the directory @var{dir} to the head of the list of directories to be
2669searched for header files. This can be used to override a system header
2670file, substituting your own version, since these directories are
74291a4b
MM
2671searched before the system header file directories. If you use more
2672than one @samp{-I} option, the directories are scanned in left-to-right
2673order; the standard system directories come after.
2674
2675@item -I-
2676Any directories you specify with @samp{-I} options before the @samp{-I-}
2677option are searched only for the case of @samp{#include "@var{file}"};
2678they are not searched for @samp{#include <@var{file}>}.
2679
2680If additional directories are specified with @samp{-I} options after
2681the @samp{-I-}, these directories are searched for all @samp{#include}
2682directives. (Ordinarily @emph{all} @samp{-I} directories are used
2683this way.)
2684
2685In addition, the @samp{-I-} option inhibits the use of the current
2686directory (where the current input file came from) as the first search
2687directory for @samp{#include "@var{file}"}. There is no way to
2688override this effect of @samp{-I-}. With @samp{-I.} you can specify
2689searching the directory which was current when the compiler was
2690invoked. That is not exactly the same as what the preprocessor does
2691by default, but it is often satisfactory.
2692
2693@samp{-I-} does not inhibit the use of the standard system directories
2694for header files. Thus, @samp{-I-} and @samp{-nostdinc} are
2695independent.
2696
2697@item -L@var{dir}
2698Add directory @var{dir} to the list of directories to be searched
2699for @samp{-l}.
2700
2701@item -B@var{prefix}
2702This option specifies where to find the executables, libraries,
2703include files, and data files of the compiler itself.
2704
2705The compiler driver program runs one or more of the subprograms
2706@file{cpp}, @file{cc1}, @file{as} and @file{ld}. It tries
2707@var{prefix} as a prefix for each program it tries to run, both with and
2708without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
2709
2710For each subprogram to be run, the compiler driver first tries the
2711@samp{-B} prefix, if any. If that name is not found, or if @samp{-B}
2712was not specified, the driver tries two standard prefixes, which are
2713@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}. If neither of
2714those results in a file name that is found, the unmodified program
2715name is searched for using the directories specified in your
2716@samp{PATH} environment variable.
2717
2718@samp{-B} prefixes that effectively specify directory names also apply
2719to libraries in the linker, because the compiler translates these
2720options into @samp{-L} options for the linker. They also apply to
2721includes files in the preprocessor, because the compiler translates these
2722options into @samp{-isystem} options for the preprocessor. In this case,
2723the compiler appends @samp{include} to the prefix.
2724
2725The run-time support file @file{libgcc.a} can also be searched for using
2726the @samp{-B} prefix, if needed. If it is not found there, the two
2727standard prefixes above are tried, and that is all. The file is left
2728out of the link if it is not found by those means.
2729
2730Another way to specify a prefix much like the @samp{-B} prefix is to use
2731the environment variable @code{GCC_EXEC_PREFIX}. @xref{Environment
2732Variables}.
861bb6c1
JL
2733
2734@item -specs=@var{file}
2735Process @var{file} after the compiler reads in the standard @file{specs}
2736file, in order to override the defaults that the @file{gcc} driver
2737program uses when determining what switches to pass to @file{cc1},
2738@file{cc1plus}, @file{as}, @file{ld}, etc. More than one
2739@samp{-specs=}@var{file} can be specified on the command line, and they
2740are processed in order, from left to right.
74291a4b
MM
2741@end table
2742
2743@node Target Options
2744@section Specifying Target Machine and Compiler Version
2745@cindex target options
2746@cindex cross compiling
2747@cindex specifying machine version
2748@cindex specifying compiler version and target machine
2749@cindex compiler version, specifying
2750@cindex target machine, specifying
2751
2752By default, GNU CC compiles code for the same type of machine that you
2753are using. However, it can also be installed as a cross-compiler, to
2754compile for some other type of machine. In fact, several different
2755configurations of GNU CC, for different target machines, can be
2756installed side by side. Then you specify which one to use with the
2757@samp{-b} option.
2758
2759In addition, older and newer versions of GNU CC can be installed side
2760by side. One of them (probably the newest) will be the default, but
2761you may sometimes wish to use another.
2762
2763@table @code
2764@item -b @var{machine}
2765The argument @var{machine} specifies the target machine for compilation.
2766This is useful when you have installed GNU CC as a cross-compiler.
2767
2768The value to use for @var{machine} is the same as was specified as the
2769machine type when configuring GNU CC as a cross-compiler. For
2770example, if a cross-compiler was configured with @samp{configure
2771i386v}, meaning to compile for an 80386 running System V, then you
2772would specify @samp{-b i386v} to run that cross compiler.
2773
2774When you do not specify @samp{-b}, it normally means to compile for
2775the same type of machine that you are using.
2776
2777@item -V @var{version}
2778The argument @var{version} specifies which version of GNU CC to run.
2779This is useful when multiple versions are installed. For example,
2780@var{version} might be @samp{2.0}, meaning to run GNU CC version 2.0.
2781
2782The default version, when you do not specify @samp{-V}, is the last
2783version of GNU CC that you installed.
2784@end table
2785
2786The @samp{-b} and @samp{-V} options actually work by controlling part of
2787the file name used for the executable files and libraries used for
2788compilation. A given version of GNU CC, for a given target machine, is
2789normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill
2790
2791Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
2792changing the names of these directories or adding alternate names (or
2793symbolic links). If in directory @file{/usr/local/lib/gcc-lib/} the
2794file @file{80386} is a link to the file @file{i386v}, then @samp{-b
279580386} becomes an alias for @samp{-b i386v}.
2796
2797In one respect, the @samp{-b} or @samp{-V} do not completely change
2798to a different compiler: the top-level driver program @code{gcc}
2799that you originally invoked continues to run and invoke the other
2800executables (preprocessor, compiler per se, assembler and linker)
2801that do the real work. However, since no real work is done in the
2802driver program, it usually does not matter that the driver program
2803in use is not the one for the specified target and version.
2804
2805The only way that the driver program depends on the target machine is
2806in the parsing and handling of special machine-specific options.
2807However, this is controlled by a file which is found, along with the
2808other executables, in the directory for the specified version and
2809target machine. As a result, a single installed driver program adapts
2810to any specified target machine and compiler version.
2811
2812The driver program executable does control one significant thing,
2813however: the default version and target machine. Therefore, you can
2814install different instances of the driver program, compiled for
2815different targets or versions, under different names.
2816
2817For example, if the driver for version 2.0 is installed as @code{ogcc}
2818and that for version 2.1 is installed as @code{gcc}, then the command
2819@code{gcc} will use version 2.1 by default, while @code{ogcc} will use
28202.0 by default. However, you can choose either version with either
2821command with the @samp{-V} option.
2822
2823@node Submodel Options
2824@section Hardware Models and Configurations
2825@cindex submodel options
2826@cindex specifying hardware config
2827@cindex hardware models and configurations, specifying
2828@cindex machine dependent options
2829
2830Earlier we discussed the standard option @samp{-b} which chooses among
2831different installed compilers for completely different target
2832machines, such as Vax vs. 68000 vs. 80386.
2833
2834In addition, each of these target machine types can have its own
2835special options, starting with @samp{-m}, to choose among various
2836hardware models or configurations---for example, 68010 vs 68020,
2837floating coprocessor or none. A single installed version of the
2838compiler can compile for any model or configuration, according to the
2839options specified.
2840
2841Some configurations of the compiler also support additional special
2842options, usually for compatibility with other compilers on the same
2843platform.
2844
2845@ifset INTERNALS
2846These options are defined by the macro @code{TARGET_SWITCHES} in the
2847machine description. The default for the options is also defined by
2848that macro, which enables you to change the defaults.
2849@end ifset
2850
2851@menu
2852* M680x0 Options::
2853* VAX Options::
2854* SPARC Options::
2855* Convex Options::
2856* AMD29K Options::
2857* ARM Options::
6d6d0fa0 2858* MN10300 Options::
861bb6c1 2859* M32R/D Options::
74291a4b
MM
2860* M88K Options::
2861* RS/6000 and PowerPC Options::
2862* RT Options::
2863* MIPS Options::
2864* i386 Options::
2865* HPPA Options::
2866* Intel 960 Options::
2867* DEC Alpha Options::
2868* Clipper Options::
2869* H8/300 Options::
2870* SH Options::
2871* System V Options::
f84271d9 2872* V850 Options::
74291a4b
MM
2873@end menu
2874
2875@node M680x0 Options
2876@subsection M680x0 Options
2877@cindex M680x0 options
2878
2879These are the @samp{-m} options defined for the 68000 series. The default
2880values for these options depends on which style of 68000 was selected when
2881the compiler was configured; the defaults for the most common choices are
2882given below.
2883
2884@table @code
2885@item -m68000
2886@itemx -mc68000
2887Generate output for a 68000. This is the default
2888when the compiler is configured for 68000-based systems.
2889
2890@item -m68020
2891@itemx -mc68020
2892Generate output for a 68020. This is the default
2893when the compiler is configured for 68020-based systems.
2894
2895@item -m68881
2896Generate output containing 68881 instructions for floating point.
2897This is the default for most 68020 systems unless @samp{-nfp} was
2898specified when the compiler was configured.
2899
2900@item -m68030
2901Generate output for a 68030. This is the default when the compiler is
2902configured for 68030-based systems.
2903
2904@item -m68040
2905Generate output for a 68040. This is the default when the compiler is
2906configured for 68040-based systems.
2907
2908This option inhibits the use of 68881/68882 instructions that have to be
2909emulated by software on the 68040. If your 68040 does not have code to
2910emulate those instructions, use @samp{-m68040}.
2911
2912@item -m68060
2913Generate output for a 68060. This is the default when the compiler is
2914configured for 68060-based systems.
2915
2916This option inhibits the use of 68020 and 68881/68882 instructions that
2917have to be emulated by software on the 68060. If your 68060 does not
2918have code to emulate those instructions, use @samp{-m68060}.
2919
2920@item -m5200
2921Generate output for a 520X "coldfire" family cpu. This is the default
2922when the compiler is configured for 520X-based systems.
2923
2924
2925@item -m68020-40
2926Generate output for a 68040, without using any of the new instructions.
2927This results in code which can run relatively efficiently on either a
292868020/68881 or a 68030 or a 68040. The generated code does use the
292968881 instructions that are emulated on the 68040.
2930
861bb6c1
JL
2931@item -m68020-60
2932Generate output for a 68060, without using any of the new instructions.
2933This results in code which can run relatively efficiently on either a
293468020/68881 or a 68030 or a 68040. The generated code does use the
293568881 instructions that are emulated on the 68060.
2936
74291a4b
MM
2937@item -mfpa
2938Generate output containing Sun FPA instructions for floating point.
2939
2940@item -msoft-float
2941Generate output containing library calls for floating point.
2942@strong{Warning:} the requisite libraries are not available for all m68k
2943targets. Normally the facilities of the machine's usual C compiler are
2944used, but this can't be done directly in cross-compilation. You must
2945make your own arrangements to provide suitable library functions for
2946cross-compilation. The embedded targets @samp{m68k-*-aout} and
2947@samp{m68k-*-coff} do provide software floating point support.
2948
2949@item -mshort
2950Consider type @code{int} to be 16 bits wide, like @code{short int}.
2951
2952@item -mnobitfield
2953Do not use the bit-field instructions. The @samp{-m68000} option
2954implies @w{@samp{-mnobitfield}}.
2955
2956@item -mbitfield
2957Do use the bit-field instructions. The @samp{-m68020} option implies
2958@samp{-mbitfield}. This is the default if you use a configuration
2959designed for a 68020.
2960
2961@item -mrtd
2962Use a different function-calling convention, in which functions
2963that take a fixed number of arguments return with the @code{rtd}
2964instruction, which pops their arguments while returning. This
2965saves one instruction in the caller since there is no need to pop
2966the arguments there.
2967
2968This calling convention is incompatible with the one normally
2969used on Unix, so you cannot use it if you need to call libraries
2970compiled with the Unix compiler.
2971
2972Also, you must provide function prototypes for all functions that
2973take variable numbers of arguments (including @code{printf});
2974otherwise incorrect code will be generated for calls to those
2975functions.
2976
2977In addition, seriously incorrect code will result if you call a
2978function with too many arguments. (Normally, extra arguments are
2979harmlessly ignored.)
2980
2981The @code{rtd} instruction is supported by the 68010, 68020, 68030,
298268040, and 68060 processors, but not by the 68000 or 5200.
861bb6c1
JL
2983
2984@item -malign-int
2985@itemx -mno-align-int
2986Control whether GNU CC aligns @code{int}, @code{long}, @code{long long},
2987@code{float}, @code{double}, and @code{long double} variables on a 32-bit
2988boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-mno-align-int}).
2989Aligning variables on 32-bit boundaries produces code that runs somewhat
2990faster on processors with 32-bit busses at the expense of more memory.
2991
2992@strong{Warning:} if you use the @samp{-malign-int} switch, GNU CC will
2993align structures containing the above types differently than
2994most published application binary interface specifications for the m68k.
2995
74291a4b
MM
2996@end table
2997
2998@node VAX Options
2999@subsection VAX Options
3000@cindex VAX options
3001
3002These @samp{-m} options are defined for the Vax:
3003
3004@table @code
3005@item -munix
3006Do not output certain jump instructions (@code{aobleq} and so on)
3007that the Unix assembler for the Vax cannot handle across long
3008ranges.
3009
3010@item -mgnu
3011Do output those jump instructions, on the assumption that you
3012will assemble with the GNU assembler.
3013
3014@item -mg
3015Output code for g-format floating point numbers instead of d-format.
3016@end table
3017
3018@node SPARC Options
3019@subsection SPARC Options
3020@cindex SPARC options
3021
3022These @samp{-m} switches are supported on the SPARC:
3023
3024@table @code
3025@item -mno-app-regs
3026@itemx -mapp-regs
3027Specify @samp{-mapp-regs} to generate output using the global registers
30282 through 4, which the SPARC SVR4 ABI reserves for applications. This
3029is the default.
3030
3031To be fully SVR4 ABI compliant at the cost of some performance loss,
3032specify @samp{-mno-app-regs}. You should compile libraries and system
3033software with this option.
3034
3035@item -mfpu
3036@itemx -mhard-float
3037Generate output containing floating point instructions. This is the
3038default.
3039
3040@item -mno-fpu
3041@itemx -msoft-float
3042Generate output containing library calls for floating point.
3043@strong{Warning:} the requisite libraries are not available for all SPARC
3044targets. Normally the facilities of the machine's usual C compiler are
3045used, but this cannot be done directly in cross-compilation. You must make
3046your own arrangements to provide suitable library functions for
3047cross-compilation. The embedded targets @samp{sparc-*-aout} and
3048@samp{sparclite-*-*} do provide software floating point support.
3049
3050@samp{-msoft-float} changes the calling convention in the output file;
3051therefore, it is only useful if you compile @emph{all} of a program with
3052this option. In particular, you need to compile @file{libgcc.a}, the
3053library that comes with GNU CC, with @samp{-msoft-float} in order for
3054this to work.
3055
3056@item -mhard-quad-float
3057Generate output containing quad-word (long double) floating point
3058instructions.
3059
3060@item -msoft-quad-float
3061Generate output containing library calls for quad-word (long double)
3062floating point instructions. The functions called are those specified
3063in the SPARC ABI. This is the default.
3064
3065As of this writing, there are no sparc implementations that have hardware
3066support for the quad-word floating point instructions. They all invoke
3067a trap handler for one of these instructions, and then the trap handler
3068emulates the effect of the instruction. Because of the trap handler overhead,
3069this is much slower than calling the ABI library routines. Thus the
3070@samp{-msoft-quad-float} option is the default.
3071
3072@item -mno-epilogue
3073@itemx -mepilogue
3074With @samp{-mepilogue} (the default), the compiler always emits code for
3075function exit at the end of each function. Any function exit in
3076the middle of the function (such as a return statement in C) will
3077generate a jump to the exit code at the end of the function.
3078
3079With @samp{-mno-epilogue}, the compiler tries to emit exit code inline
3080at every function exit.
3081
3082@item -mno-flat
3083@itemx -mflat
3084With @samp{-mflat}, the compiler does not generate save/restore instructions
3085and will use a "flat" or single register window calling convention.
3086This model uses %i7 as the frame pointer and is compatible with the normal
3087register window model. Code from either may be intermixed.
3088The local registers and the input registers (0-5) are still treated as
3089"call saved" registers and will be saved on the stack as necessary.
3090
3091With @samp{-mno-flat} (the default), the compiler emits save/restore
3092instructions (except for leaf functions) and is the normal mode of operation.
3093
3094@item -mno-unaligned-doubles
3095@itemx -munaligned-doubles
3096Assume that doubles have 8 byte alignment. This is the default.
3097
3098With @samp{-munaligned-doubles}, GNU CC assumes that doubles have 8 byte
3099alignment only if they are contained in another type, or if they have an
3100absolute address. Otherwise, it assumes they have 4 byte alignment.
3101Specifying this option avoids some rare compatibility problems with code
3102generated by other compilers. It is not the default because it results
3103in a performance loss, especially for floating point code.
3104
3105@item -mv8
3106@itemx -msparclite
3107These two options select variations on the SPARC architecture.
3108
3109By default (unless specifically configured for the Fujitsu SPARClite),
3110GCC generates code for the v7 variant of the SPARC architecture.
3111
3112@samp{-mv8} will give you SPARC v8 code. The only difference from v7
3113code is that the compiler emits the integer multiply and integer
3114divide instructions which exist in SPARC v8 but not in SPARC v7.
3115
3116@samp{-msparclite} will give you SPARClite code. This adds the integer
3117multiply, integer divide step and scan (@code{ffs}) instructions which
3118exist in SPARClite but not in SPARC v7.
3119
3120These options are deprecated and will be deleted in GNU CC 2.9.
3121They have been replaced with @samp{-mcpu=xxx}.
3122
3123@item -mcypress
3124@itemx -msupersparc
3125These two options select the processor for which the code is optimised.
3126
3127With @samp{-mcypress} (the default), the compiler optimizes code for the
3128Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series.
3129This is also appropriate for the older SparcStation 1, 2, IPX etc.
3130
3131With @samp{-msupersparc} the compiler optimizes code for the SuperSparc cpu, as
3132used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
3133of the full SPARC v8 instruction set.
3134
3135These options are deprecated and will be deleted in GNU CC 2.9.
3136They have been replaced with @samp{-mcpu=xxx}.
3137
3138@item -mcpu=@var{cpu_type}
c0498f43
DE
3139Set the instruction set, register set, and instruction scheduling parameters
3140for machine type @var{cpu_type}. Supported values for @var{cpu_type} are
3141@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
3142@samp{f930}, @samp{f934}, @samp{sparclet}, @samp{tsc701}, @samp{v9}, and
3143@samp{ultrasparc}.
3144
3145Default instruction scheduling parameters are used for values that select
3146an architecture and not an implementation. These are @samp{v7}, @samp{v8},
3147@samp{sparclite}, @samp{sparclet}, @samp{v9}.
3148
3149Here is a list of each supported architecture and their supported
3150implementations.
3151
3152@smallexample
3153 v7: cypress
3154 v8: supersparc
3155 sparclite: f930, f934
3156 sparclet: tsc701
3157 v9: ultrasparc
3158@end smallexample
74291a4b
MM
3159
3160@item -mtune=@var{cpu_type}
3161Set the instruction scheduling parameters for machine type
c0498f43
DE
3162@var{cpu_type}, but do not set the instruction set or register set that the
3163option @samp{-mcpu=}@var{cpu_type} would.
3164
3165The same values for @samp{-mcpu=}@var{cpu_type} are used for
3166@samp{-mtune=}@var{cpu_type}, though the only useful values are those that
3167select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
3168@samp{f930}, @samp{f934}, @samp{tsc701}, @samp{ultrasparc}.
74291a4b 3169
6d4312dd
DE
3170@item -malign-loops=@var{num}
3171Align loops to a 2 raised to a @var{num} byte boundary. If
3172@samp{-malign-loops} is not specified, the default is 2.
3173
3174@item -malign-jumps=@var{num}
3175Align instructions that are only jumped to to a 2 raised to a @var{num}
3176byte boundary. If @samp{-malign-jumps} is not specified, the default is 2.
3177
3178@item -malign-functions=@var{num}
3179Align the start of functions to a 2 raised to @var{num} byte boundary.
3180If @samp{-malign-functions} is not specified, the default is 2 if compiling
3181for 32 bit sparc, and 5 if compiling for 64 bit sparc.
3182
74291a4b
MM
3183@end table
3184
3185These @samp{-m} switches are supported in addition to the above
3186on the SPARCLET processor.
3187
3188@table @code
3189@item -mlittle-endian
3190Generate code for a processor running in little-endian mode.
3191
3192@item -mlive-g0
3193Treat register @code{%g0} as a normal register.
3194GCC will continue to clobber it as necessary but will not assume
3195it always reads as 0.
3196
3197@item -mbroken-saverestore
3198Generate code that does not use non-trivial forms of the @code{save} and
3199@code{restore} instructions. Early versions of the SPARCLET processor do
3200not correctly handle @code{save} and @code{restore} instructions used with
3201arguments. They correctly handle them used without arguments. A @code{save}
3202instruction used without arguments increments the current window pointer
3203but does not allocate a new stack frame. It is assumed that the window
3204overflow trap handler will properly handle this case as will interrupt
3205handlers.
3206@end table
3207
3208These @samp{-m} switches are supported in addition to the above
3209on SPARC V9 processors in 64 bit environments.
3210
3211@table @code
3212@item -mlittle-endian
3213Generate code for a processor running in little-endian mode.
3214
ded17aad
DE
3215@item -m32
3216@itemx -m64
3217Generate code for a 32 bit or 64 bit environment.
3218The 32 bit environment sets int, long and pointer to 32 bits.
3219The 64 bit environment sets int to 32 bits and long and pointer
3220to 64 bits.
3221
3222@item -mcmodel=medlow
3223Generate code for the Medium/Low code model: the program must be linked
3224in the low 32 bits of the address space. Pointers are 64 bits.
3225Programs can be statically or dynamically linked.
3226
3227@item -mcmodel=medmid
3228Generate code for the Medium/Middle code model: the program must be linked
3229in the low 44 bits of the address space, the text segment must be less than
32302G bytes, and data segment must be within 2G of the text segment.
3231Pointers are 64 bits.
3232
3233@item -mcmodel=medany
3234Generate code for the Medium/Anywhere code model: the program may be linked
3235anywhere in the address space, the text segment must be less than
32362G bytes, and data segment must be within 2G of the text segment.
3237Pointers are 64 bits.
3238
3239@item -mcmodel=embmedany
3240Generate code for the Medium/Anywhere code model for embedded systems:
3241assume a 32 bit text and a 32 bit data segment, both starting anywhere
3242(determined at link time). Register %g4 points to the base of the
3243data segment. Pointers still 64 bits.
3244Programs are statically linked, PIC is not supported.
74291a4b
MM
3245
3246@item -mstack-bias
3247@itemx -mno-stack-bias
3248With @samp{-mstack-bias}, GNU CC assumes that the stack pointer, and
3249frame pointer if present, are offset by -2047 which must be added back
3250when making stack frame references.
3251Otherwise, assume no such offset is present.
3252@end table
3253
3254@node Convex Options
3255@subsection Convex Options
3256@cindex Convex options
3257
3258These @samp{-m} options are defined for Convex:
3259
3260@table @code
3261@item -mc1
3262Generate output for C1. The code will run on any Convex machine.
3263The preprocessor symbol @code{__convex__c1__} is defined.
3264
3265@item -mc2
3266Generate output for C2. Uses instructions not available on C1.
3267Scheduling and other optimizations are chosen for max performance on C2.
3268The preprocessor symbol @code{__convex_c2__} is defined.
3269
3270@item -mc32
3271Generate output for C32xx. Uses instructions not available on C1.
3272Scheduling and other optimizations are chosen for max performance on C32.
3273The preprocessor symbol @code{__convex_c32__} is defined.
3274
3275@item -mc34
3276Generate output for C34xx. Uses instructions not available on C1.
3277Scheduling and other optimizations are chosen for max performance on C34.
3278The preprocessor symbol @code{__convex_c34__} is defined.
3279
3280@item -mc38
3281Generate output for C38xx. Uses instructions not available on C1.
3282Scheduling and other optimizations are chosen for max performance on C38.
3283The preprocessor symbol @code{__convex_c38__} is defined.
3284
3285@item -margcount
3286Generate code which puts an argument count in the word preceding each
3287argument list. This is compatible with regular CC, and a few programs
3288may need the argument count word. GDB and other source-level debuggers
3289do not need it; this info is in the symbol table.
3290
3291@item -mnoargcount
3292Omit the argument count word. This is the default.
3293
3294@item -mvolatile-cache
3295Allow volatile references to be cached. This is the default.
3296
3297@item -mvolatile-nocache
3298Volatile references bypass the data cache, going all the way to memory.
3299This is only needed for multi-processor code that does not use standard
3300synchronization instructions. Making non-volatile references to volatile
3301locations will not necessarily work.
3302
3303@item -mlong32
3304Type long is 32 bits, the same as type int. This is the default.
3305
3306@item -mlong64
3307Type long is 64 bits, the same as type long long. This option is useless,
3308because no library support exists for it.
3309@end table
3310
3311@node AMD29K Options
3312@subsection AMD29K Options
3313@cindex AMD29K options
3314
3315These @samp{-m} options are defined for the AMD Am29000:
3316
3317@table @code
3318@item -mdw
3319@kindex -mdw
3320@cindex DW bit (29k)
3321Generate code that assumes the @code{DW} bit is set, i.e., that byte and
3322halfword operations are directly supported by the hardware. This is the
3323default.
3324
3325@item -mndw
3326@kindex -mndw
3327Generate code that assumes the @code{DW} bit is not set.
3328
3329@item -mbw
3330@kindex -mbw
3331@cindex byte writes (29k)
3332Generate code that assumes the system supports byte and halfword write
3333operations. This is the default.
3334
3335@item -mnbw
3336@kindex -mnbw
3337Generate code that assumes the systems does not support byte and
3338halfword write operations. @samp{-mnbw} implies @samp{-mndw}.
3339
3340@item -msmall
3341@kindex -msmall
3342@cindex memory model (29k)
3343Use a small memory model that assumes that all function addresses are
3344either within a single 256 KB segment or at an absolute address of less
3345than 256k. This allows the @code{call} instruction to be used instead
3346of a @code{const}, @code{consth}, @code{calli} sequence.
3347
3348@item -mnormal
3349@kindex -mnormal
3350Use the normal memory model: Generate @code{call} instructions only when
3351calling functions in the same file and @code{calli} instructions
3352otherwise. This works if each file occupies less than 256 KB but allows
3353the entire executable to be larger than 256 KB. This is the default.
3354
3355@item -mlarge
3356Always use @code{calli} instructions. Specify this option if you expect
3357a single file to compile into more than 256 KB of code.
3358
3359@item -m29050
3360@kindex -m29050
3361@cindex processor selection (29k)
3362Generate code for the Am29050.
3363
3364@item -m29000
3365@kindex -m29000
3366Generate code for the Am29000. This is the default.
3367
3368@item -mkernel-registers
3369@kindex -mkernel-registers
3370@cindex kernel and user registers (29k)
3371Generate references to registers @code{gr64-gr95} instead of to
3372registers @code{gr96-gr127}. This option can be used when compiling
3373kernel code that wants a set of global registers disjoint from that used
3374by user-mode code.
3375
3376Note that when this option is used, register names in @samp{-f} flags
3377must use the normal, user-mode, names.
3378
3379@item -muser-registers
3380@kindex -muser-registers
3381Use the normal set of global registers, @code{gr96-gr127}. This is the
3382default.
3383
3384@item -mstack-check
3385@itemx -mno-stack-check
3386@kindex -mstack-check
3387@cindex stack checks (29k)
3388Insert (or do not insert) a call to @code{__msp_check} after each stack
3389adjustment. This is often used for kernel code.
3390
3391@item -mstorem-bug
3392@itemx -mno-storem-bug
3393@kindex -mstorem-bug
3394@cindex storem bug (29k)
3395@samp{-mstorem-bug} handles 29k processors which cannot handle the
3396separation of a mtsrim insn and a storem instruction (most 29000 chips
3397to date, but not the 29050).
3398
3399@item -mno-reuse-arg-regs
3400@itemx -mreuse-arg-regs
3401@kindex -mreuse-arg-regs
3402@samp{-mno-reuse-arg-regs} tells the compiler to only use incoming argument
3403registers for copying out arguments. This helps detect calling a function
3404with fewer arguments than it was declared with.
3405
861bb6c1
JL
3406@item -mno-impure-text
3407@itemx -mimpure-text
3408@kindex -mimpure-text
3409@samp{-mimpure-text}, used in addition to @samp{-shared}, tells the compiler to
3410not pass @samp{-assert pure-text} to the linker when linking a shared object.
3411
74291a4b
MM
3412@item -msoft-float
3413@kindex -msoft-float
3414Generate output containing library calls for floating point.
3415@strong{Warning:} the requisite libraries are not part of GNU CC.
3416Normally the facilities of the machine's usual C compiler are used, but
3417this can't be done directly in cross-compilation. You must make your
3418own arrangements to provide suitable library functions for
3419cross-compilation.
3420@end table
3421
3422@node ARM Options
3423@subsection ARM Options
3424@cindex ARM options
3425
3426These @samp{-m} options are defined for Advanced RISC Machines (ARM)
3427architectures:
3428
3429@table @code
3430@item -mapcs-frame
3431@kindex -mapcs-frame
3432Generate a stack frame that is compliant with the ARM Procedure Call
3433Standard for all functions, even if this is not strictly necessary for
3434correct execution of the code.
3435
3436@item -mapcs-26
3437@kindex -mapcs-26
3438Generate code for a processor running with a 26-bit program counter,
3439and conforming to the function calling standards for the APCS 26-bit
3440option. This option replaces the @samp{-m2} and @samp{-m3} options
3441of previous releases of the compiler.
3442
3443@item -mapcs-32
3444@kindex -mapcs-32
3445Generate code for a processor running with a 32-bit program counter,
3446and conforming to the function calling standards for the APCS 32-bit
3447option. This option replaces the @samp{-m6} option of previous releases
3448of the compiler.
3449
3450@item -mhard-float
3451Generate output containing floating point instructions. This is the
3452default.
3453
3454@item -msoft-float
3455Generate output containing library calls for floating point.
3456@strong{Warning:} the requisite libraries are not available for all ARM
3457targets. Normally the facilities of the machine's usual C compiler are
3458used, but this cannot be done directly in cross-compilation. You must make
3459your own arrangements to provide suitable library functions for
3460cross-compilation.
3461
3462@samp{-msoft-float} changes the calling convention in the output file;
3463therefore, it is only useful if you compile @emph{all} of a program with
3464this option. In particular, you need to compile @file{libgcc.a}, the
3465library that comes with GNU CC, with @samp{-msoft-float} in order for
3466this to work.
3467
3468@item -mlittle-endian
3469Generate code for a processor running in little-endian mode. This is
3470the default for all standard configurations.
3471
3472@item -mbig-endian
3473Generate code for a processor running in big-endian mode; the default is
3474to compile code for a little-endian processor.
3475
3476@item -mwords-little-endian
3477This option only applies when generating code for big-endian processors.
3478Generate code for a little-endian word order but a big-endian byte
3479order. That is, a byte order of the form @samp{32107654}. Note: this
3480option should only be used if you require compatibility with code for
3481big-endian ARM processors generated by versions of the compiler prior to
34822.8.
3483
3484@item -mshort-load-bytes
3485@kindex -mshort-load-bytes
3486Do not try to load half-words (eg @samp{short}s) by loading a word from
3487an unaligned address. For some targets the MMU is configured to trap
3488unaligned loads; use this option to generate code that is safe in these
3489environments.
3490
3491@item -mno-short-load-bytes
3492@kindex -mno-short-load-bytes
3493Use unaligned word loads to load half-words (eg @samp{short}s). This
3494option produces more efficient code, but the MMU is sometimes configured
3495to trap these instructions.
3496
3497@item -mbsd
3498@kindex -mbsd
3499This option only applies to RISC iX. Emulate the native BSD-mode
3500compiler. This is the default if @samp{-ansi} is not specified.
3501
3502@item -mxopen
3503@kindex -mxopen
3504This option only applies to RISC iX. Emulate the native X/Open-mode
3505compiler.
3506
3507@item -mno-symrename
3508@kindex -mno-symrename
3509This option only applies to RISC iX. Do not run the assembler
3510post-processor, @samp{symrename}, after code has been assembled.
3511Normally it is necessary to modify some of the standard symbols in
3512preparation for linking with the RISC iX C library; this option
3513suppresses this pass. The post-processor is never run when the
3514compiler is built for cross-compilation.
3515@end table
3516
6d6d0fa0
JL
3517@node MN10300 Options
3518@subsection MN10300 Options
3519@cindex MN10300 options
3520These @samp{-m} options are defined for Matsushita MN10300 architectures:
3521
3522@table @code
3523@item -mmult-bug
3524Generate code to avoid bugs in the multiply instructions for the MN10300
3525processors. This is the default.
3526
3527@item -mno-mult-bug
3528Do not generate code to avoid bugs in the multiply instructions for the
3529MN10300 processors.
3530@end table
3531
861bb6c1
JL
3532@node M32R/D Options
3533@subsection M32R/D Options
3534@cindex M32R/D options
3535
3536These @samp{-m} options are defined for Mitsubishi M32R/D architectures:
3537
3538@table @code
3539@item -mcode-model=small
3540Assume all objects live in the lower 16MB of memory (so that their addresses
3541can be loaded with the @code{ld24} instruction), and assume all subroutines
3542are reachable with the @code{bl} instruction.
3543This is the default.
3544
3545The addressability of a particular object can be set with the
3546@code{model} attribute.
3547
3548@item -mcode-model=medium
3549Assume objects may be anywhere in the 32 bit address space (the compiler
3550will generate @code{seth/add3} instructions to load their addresses), and
3551assume all subroutines are reachable with the @code{bl} instruction.
3552
3553@item -mcode-model=large
3554Assume objects may be anywhere in the 32 bit address space (the compiler
3555will generate @code{seth/add3} instructions to load their addresses), and
3556assume subroutines may not be reachable with the @code{bl} instruction
3557(the compiler will generate the much slower @code{seth/add3/jl}
3558instruction sequence).
3559
3560@item -msdata=none
3561Disable use of the small data area. Variables will be put into
3562one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
3563@code{section} attribute has been specified).
3564This is the default.
3565
3566The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
3567Objects may be explicitly put in the small data area with the
3568@code{section} attribute using one of these sections.
3569
3570@item -msdata=sdata
3571Put small global and static data in the small data area, but do not
3572generate special code to reference them.
3573
3574@item -msdata=use
3575Put small global and static data in the small data area, and generate
3576special instructions to reference them.
3577
3578@item -G @var{num}
3579@cindex smaller data references
3580Put global and static objects less than or equal to @var{num} bytes
3581into the small data or bss sections instead of the normal data or bss
3582sections. The default value of @var{num} is 8.
3583The @samp{-msdata} option must be set to one of @samp{sdata} or @samp{use}
3584for this option to have any effect.
3585
3586All modules should be compiled with the same @samp{-G @var{num}} value.
3587Compiling with different values of @var{num} may or may not work; if it
3588doesn't the linker will give an error message - incorrect code will not be
3589generated.
3590
3591@end table
3592
74291a4b
MM
3593@node M88K Options
3594@subsection M88K Options
3595@cindex M88k options
3596
3597These @samp{-m} options are defined for Motorola 88k architectures:
3598
3599@table @code
3600@item -m88000
3601@kindex -m88000
3602Generate code that works well on both the m88100 and the
3603m88110.
3604
3605@item -m88100
3606@kindex -m88100
3607Generate code that works best for the m88100, but that also
3608runs on the m88110.
3609
3610@item -m88110
3611@kindex -m88110
3612Generate code that works best for the m88110, and may not run
3613on the m88100.
3614
3615@item -mbig-pic
3616@kindex -mbig-pic
3617Obsolete option to be removed from the next revision.
3618Use @samp{-fPIC}.
3619
3620@item -midentify-revision
3621@kindex -midentify-revision
3622@kindex ident
3623@cindex identifying source, compiler (88k)
3624Include an @code{ident} directive in the assembler output recording the
3625source file name, compiler name and version, timestamp, and compilation
3626flags used.
3627
3628@item -mno-underscores
3629@kindex -mno-underscores
3630@cindex underscores, avoiding (88k)
3631In assembler output, emit symbol names without adding an underscore
3632character at the beginning of each name. The default is to use an
3633underscore as prefix on each name.
3634
3635@item -mocs-debug-info
3636@itemx -mno-ocs-debug-info
3637@kindex -mocs-debug-info
3638@kindex -mno-ocs-debug-info
3639@cindex OCS (88k)
3640@cindex debugging, 88k OCS
3641Include (or omit) additional debugging information (about registers used
3642in each stack frame) as specified in the 88open Object Compatibility
3643Standard, ``OCS''. This extra information allows debugging of code that
3644has had the frame pointer eliminated. The default for DG/UX, SVr4, and
3645Delta 88 SVr3.2 is to include this information; other 88k configurations
3646omit this information by default.
3647
3648@item -mocs-frame-position
3649@kindex -mocs-frame-position
3650@cindex register positions in frame (88k)
3651When emitting COFF debugging information for automatic variables and
3652parameters stored on the stack, use the offset from the canonical frame
3653address, which is the stack pointer (register 31) on entry to the
3654function. The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
3655@samp{-mocs-frame-position}; other 88k configurations have the default
3656@samp{-mno-ocs-frame-position}.
3657
3658@item -mno-ocs-frame-position
3659@kindex -mno-ocs-frame-position
3660@cindex register positions in frame (88k)
3661When emitting COFF debugging information for automatic variables and
3662parameters stored on the stack, use the offset from the frame pointer
3663register (register 30). When this option is in effect, the frame
3664pointer is not eliminated when debugging information is selected by the
3665-g switch.
3666
3667@item -moptimize-arg-area
3668@itemx -mno-optimize-arg-area
3669@kindex -moptimize-arg-area
3670@kindex -mno-optimize-arg-area
3671@cindex arguments in frame (88k)
3672Control how function arguments are stored in stack frames.
3673@samp{-moptimize-arg-area} saves space by optimizing them, but this
3674conflicts with the 88open specifications. The opposite alternative,
3675@samp{-mno-optimize-arg-area}, agrees with 88open standards. By default
3676GNU CC does not optimize the argument area.
3677
3678@item -mshort-data-@var{num}
3679@kindex -mshort-data-@var{num}
3680@cindex smaller data references (88k)
3681@cindex r0-relative references (88k)
3682Generate smaller data references by making them relative to @code{r0},
3683which allows loading a value using a single instruction (rather than the
3684usual two). You control which data references are affected by
3685specifying @var{num} with this option. For example, if you specify
3686@samp{-mshort-data-512}, then the data references affected are those
3687involving displacements of less than 512 bytes.
3688@samp{-mshort-data-@var{num}} is not effective for @var{num} greater
3689than 64k.
3690
3691@item -mserialize-volatile
3692@kindex -mserialize-volatile
3693@itemx -mno-serialize-volatile
3694@kindex -mno-serialize-volatile
3695@cindex sequential consistency on 88k
3696Do, or don't, generate code to guarantee sequential consistency
3697of volatile memory references. By default, consistency is
3698guaranteed.
3699
3700The order of memory references made by the MC88110 processor does
3701not always match the order of the instructions requesting those
3702references. In particular, a load instruction may execute before
3703a preceding store instruction. Such reordering violates
3704sequential consistency of volatile memory references, when there
3705are multiple processors. When consistency must be guaranteed,
3706GNU C generates special instructions, as needed, to force
3707execution in the proper order.
3708
3709The MC88100 processor does not reorder memory references and so
3710always provides sequential consistency. However, by default, GNU
3711C generates the special instructions to guarantee consistency
3712even when you use @samp{-m88100}, so that the code may be run on an
3713MC88110 processor. If you intend to run your code only on the
3714MC88100 processor, you may use @samp{-mno-serialize-volatile}.
3715
3716The extra code generated to guarantee consistency may affect the
3717performance of your application. If you know that you can safely
3718forgo this guarantee, you may use @samp{-mno-serialize-volatile}.
3719
3720@item -msvr4
3721@itemx -msvr3
3722@kindex -msvr4
3723@kindex -msvr3
3724@cindex assembler syntax, 88k
3725@cindex SVr4
3726Turn on (@samp{-msvr4}) or off (@samp{-msvr3}) compiler extensions
3727related to System V release 4 (SVr4). This controls the following:
3728
3729@enumerate
3730@item
3731Which variant of the assembler syntax to emit.
3732@item
3733@samp{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
3734that is used on System V release 4.
3735@item
3736@samp{-msvr4} makes GNU CC issue additional declaration directives used in
3737SVr4.
3738@end enumerate
3739
3740@samp{-msvr4} is the default for the m88k-motorola-sysv4 and
3741m88k-dg-dgux m88k configurations. @samp{-msvr3} is the default for all
3742other m88k configurations.
3743
3744@item -mversion-03.00
3745@kindex -mversion-03.00
3746This option is obsolete, and is ignored.
3747@c ??? which asm syntax better for GAS? option there too?
3748
3749@item -mno-check-zero-division
3750@itemx -mcheck-zero-division
3751@kindex -mno-check-zero-division
3752@kindex -mcheck-zero-division
3753@cindex zero division on 88k
3754Do, or don't, generate code to guarantee that integer division by
3755zero will be detected. By default, detection is guaranteed.
3756
3757Some models of the MC88100 processor fail to trap upon integer
3758division by zero under certain conditions. By default, when
3759compiling code that might be run on such a processor, GNU C
3760generates code that explicitly checks for zero-valued divisors
3761and traps with exception number 503 when one is detected. Use of
3762mno-check-zero-division suppresses such checking for code
3763generated to run on an MC88100 processor.
3764
3765GNU C assumes that the MC88110 processor correctly detects all
3766instances of integer division by zero. When @samp{-m88110} is
3767specified, both @samp{-mcheck-zero-division} and
3768@samp{-mno-check-zero-division} are ignored, and no explicit checks for
3769zero-valued divisors are generated.
3770
3771@item -muse-div-instruction
3772@kindex -muse-div-instruction
3773@cindex divide instruction, 88k
3774Use the div instruction for signed integer division on the
3775MC88100 processor. By default, the div instruction is not used.
3776
3777On the MC88100 processor the signed integer division instruction
3778div) traps to the operating system on a negative operand. The
3779operating system transparently completes the operation, but at a
3780large cost in execution time. By default, when compiling code
3781that might be run on an MC88100 processor, GNU C emulates signed
3782integer division using the unsigned integer division instruction
3783divu), thereby avoiding the large penalty of a trap to the
3784operating system. Such emulation has its own, smaller, execution
3785cost in both time and space. To the extent that your code's
3786important signed integer division operations are performed on two
3787nonnegative operands, it may be desirable to use the div
3788instruction directly.
3789
3790On the MC88110 processor the div instruction (also known as the
3791divs instruction) processes negative operands without trapping to
3792the operating system. When @samp{-m88110} is specified,
3793@samp{-muse-div-instruction} is ignored, and the div instruction is used
3794for signed integer division.
3795
3796Note that the result of dividing INT_MIN by -1 is undefined. In
3797particular, the behavior of such a division with and without
3798@samp{-muse-div-instruction} may differ.
3799
3800@item -mtrap-large-shift
3801@itemx -mhandle-large-shift
3802@kindex -mtrap-large-shift
3803@kindex -mhandle-large-shift
3804@cindex bit shift overflow (88k)
3805@cindex large bit shifts (88k)
3806Include code to detect bit-shifts of more than 31 bits; respectively,
3807trap such shifts or emit code to handle them properly. By default GNU CC
3808makes no special provision for large bit shifts.
3809
3810@item -mwarn-passed-structs
3811@kindex -mwarn-passed-structs
3812@cindex structure passing (88k)
3813Warn when a function passes a struct as an argument or result.
3814Structure-passing conventions have changed during the evolution of the C
3815language, and are often the source of portability problems. By default,
3816GNU CC issues no such warning.
3817@end table
3818
3819@node RS/6000 and PowerPC Options
3820@subsection IBM RS/6000 and PowerPC Options
3821@cindex RS/6000 and PowerPC Options
3822@cindex IBM RS/6000 and PowerPC Options
3823
3824These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
3825@table @code
3826@item -mpower
3827@itemx -mno-power
3828@itemx -mpower2
3829@itemx -mno-power2
3830@itemx -mpowerpc
3831@itemx -mno-powerpc
3832@itemx -mpowerpc-gpopt
3833@itemx -mno-powerpc-gpopt
3834@itemx -mpowerpc-gfxopt
3835@itemx -mno-powerpc-gfxopt
3836@kindex -mpower
3837@kindex -mpower2
3838@kindex -mpowerpc
3839@kindex -mpowerpc-gpopt
3840@kindex -mpowerpc-gfxopt
3841GNU CC supports two related instruction set architectures for the
3842RS/6000 and PowerPC. The @dfn{POWER} instruction set are those
3843instructions supported by the @samp{rios} chip set used in the original
3844RS/6000 systems and the @dfn{PowerPC} instruction set is the
3845architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
861bb6c1 3846the IBM 4xx microprocessors.
74291a4b
MM
3847
3848Neither architecture is a subset of the other. However there is a
3849large common subset of instructions supported by both. An MQ
3850register is included in processors supporting the POWER architecture.
3851
3852You use these options to specify which instructions are available on the
3853processor you are using. The default value of these options is
3854determined when configuring GNU CC. Specifying the
3855@samp{-mcpu=@var{cpu_type}} overrides the specification of these
3856options. We recommend you use the @samp{-mcpu=@var{cpu_type}} option
3857rather than the options listed above.
3858
3859The @samp{-mpower} option allows GNU CC to generate instructions that
3860are found only in the POWER architecture and to use the MQ register.
3861Specifying @samp{-mpower2} implies @samp{-power} and also allows GNU CC
3862to generate instructions that are present in the POWER2 architecture but
3863not the original POWER architecture.
3864
3865The @samp{-mpowerpc} option allows GNU CC to generate instructions that
3866are found only in the 32-bit subset of the PowerPC architecture.
3867Specifying @samp{-mpowerpc-gpopt} implies @samp{-mpowerpc} and also allows
3868GNU CC to use the optional PowerPC architecture instructions in the
3869General Purpose group, including floating-point square root. Specifying
3870@samp{-mpowerpc-gfxopt} implies @samp{-mpowerpc} and also allows GNU CC to
3871use the optional PowerPC architecture instructions in the Graphics
3872group, including floating-point select.
3873
3874If you specify both @samp{-mno-power} and @samp{-mno-powerpc}, GNU CC
3875will use only the instructions in the common subset of both
3876architectures plus some special AIX common-mode calls, and will not use
3877the MQ register. Specifying both @samp{-mpower} and @samp{-mpowerpc}
3878permits GNU CC to use any instruction from either architecture and to
3879allow use of the MQ register; specify this for the Motorola MPC601.
3880
3881@item -mnew-mnemonics
3882@itemx -mold-mnemonics
3883@kindex -mnew-mnemonics
3884@kindex -mold-mnemonics
3885Select which mnemonics to use in the generated assembler code.
3886@samp{-mnew-mnemonics} requests output that uses the assembler mnemonics
3887defined for the PowerPC architecture, while @samp{-mold-mnemonics}
3888requests the assembler mnemonics defined for the POWER architecture.
3889Instructions defined in only one architecture have only one mnemonic;
3890GNU CC uses that mnemonic irrespective of which of these options is
3891specified.
3892
3893PowerPC assemblers support both the old and new mnemonics, as will later
3894POWER assemblers. Current POWER assemblers only support the old
3895mnemonics. Specify @samp{-mnew-mnemonics} if you have an assembler that
3896supports them, otherwise specify @samp{-mold-mnemonics}.
3897
3898The default value of these options depends on how GNU CC was configured.
3899Specifying @samp{-mcpu=@var{cpu_type}} sometimes overrides the value of
3900these option. Unless you are building a cross-compiler, you should
3901normally not specify either @samp{-mnew-mnemonics} or
3902@samp{-mold-mnemonics}, but should instead accept the default.
3903
3904@item -mcpu=@var{cpu_type}
3905Set architecture type, register usage, choice of mnemonics, and
3906instruction scheduling parameters for machine type @var{cpu_type}.
3907Supported values for @var{cpu_type} are @samp{rs6000}, @samp{rios1},
3908@samp{rios2}, @samp{rsc}, @samp{601}, @samp{602}, @samp{603},
861bb6c1
JL
3909@samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{power},
3910@samp{power2}, @samp{powerpc}, @samp{403}, @samp{505}, @samp{801},
3911@samp{821}, @samp{823}, and @samp{860} and @samp{common}.
3912@samp{-mcpu=power}, @samp{-mcpu=power2}, and @samp{-mcpu=powerpc}
3913specify generic POWER, POWER2 and pure PowerPC (i.e., not MPC601)
3914architecture machine types, with an appropriate, generic processor model
3915assumed for scheduling purposes.@refill
74291a4b
MM
3916
3917@c overfull hbox here --bob 22 jul96
3918@c original text between ignore ... end ignore
3919@ignore
861bb6c1
JL
3920Specifying any of the @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
3921@samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} options
3922enables the @samp{-mpower} option and disables the @samp{-mpowerpc}
3923option; @samp{-mcpu=601} enables both the @samp{-mpower} and
3924@samp{-mpowerpc} options; all of @samp{-mcpu=602}, @samp{-mcpu=603},
3925@samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=604e},
3926@samp{-mcpu=620}, @samp{-mcpu=403}, @samp{-mcpu=505}, @samp{-mcpu=801},
3927@samp{-mcpu=821}, @samp{-mcpu=823}, @samp{-mcpu=860} and
3928@samp{-mcpu=powerpc} enable the @samp{-mpowerpc} option and disable the
3929@samp{-mpower} option; @samp{-mcpu=common} disables both the
3930@samp{-mpower} and @samp{-mpowerpc} options.@refill
74291a4b
MM
3931@end ignore
3932@c changed paragraph
3933Specifying any of the following options:
3934@samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
3935@samp{-mcpu=power}, or @samp{-mcpu=power2}
3936enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option;
3937@samp{-mcpu=601} enables both the @samp{-mpower} and @samp{-mpowerpc} options.
3938All of @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e},
3939@samp{-mcpu=604}, @samp{-mcpu=620},
3940enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
3941Exactly similarly, all of @samp{-mcpu=403},
3942@samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc}
3943enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
3944@samp{-mcpu=common} disables both the
3945@samp{-mpower} and @samp{-mpowerpc} options.@refill
3946@c end changes to prevent overfull hboxes
3947
3948AIX versions 4 or greater selects @samp{-mcpu=common} by default, so
3949that code will operate on all members of the RS/6000 and PowerPC
3950families. In that case, GNU CC will use only the instructions in the
3951common subset of both architectures plus some special AIX common-mode
3952calls, and will not use the MQ register. GNU CC assumes a generic
3953processor model for scheduling purposes.
3954
3955Specifying any of the options @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
3956@samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} also
3957disables the @samp{new-mnemonics} option. Specifying @samp{-mcpu=601},
3958@samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e}, @samp{-mcpu=604},
3959@samp{620}, @samp{403}, or @samp{-mcpu=powerpc} also enables the
3960@samp{new-mnemonics} option.@refill
3961
3962Specifying @samp{-mcpu=403}, @samp{-mcpu=821}, or @samp{-mcpu=860} also
3963enables the @samp{-msoft-float} option.
3964
3965@item -mtune=@var{cpu_type}
3966Set the instruction scheduling parameters for machine type
3967@var{cpu_type}, but do not set the architecture type, register usage,
3968choice of mnemonics like @samp{-mcpu=}@var{cpu_type} would. The same
3969values for @var{cpu_type} are used for @samp{-mtune=}@var{cpu_type} as
3970for @samp{-mcpu=}@var{cpu_type}. The @samp{-mtune=}@var{cpu_type}
3971option overrides the @samp{-mcpu=}@var{cpu_type} option in terms of
3972instruction scheduling parameters.
3973
3974@item -mfull-toc
3975@itemx -mno-fp-in-toc
3976@itemx -mno-sum-in-toc
3977@itemx -mminimal-toc
3978Modify generation of the TOC (Table Of Contents), which is created for
3979every executable file. The @samp{-mfull-toc} option is selected by
3980default. In that case, GNU CC will allocate at least one TOC entry for
3981each unique non-automatic variable reference in your program. GNU CC
3982will also place floating-point constants in the TOC. However, only
398316,384 entries are available in the TOC.
3984
3985If you receive a linker error message that saying you have overflowed
3986the available TOC space, you can reduce the amount of TOC space used
3987with the @samp{-mno-fp-in-toc} and @samp{-mno-sum-in-toc} options.
3988@samp{-mno-fp-in-toc} prevents GNU CC from putting floating-point
3989constants in the TOC and @samp{-mno-sum-in-toc} forces GNU CC to
3990generate code to calculate the sum of an address and a constant at
3991run-time instead of putting that sum into the TOC. You may specify one
3992or both of these options. Each causes GNU CC to produce very slightly
3993slower and larger code at the expense of conserving TOC space.
3994
3995If you still run out of space in the TOC even when you specify both of
3996these options, specify @samp{-mminimal-toc} instead. This option causes
3997GNU CC to make only one TOC entry for every file. When you specify this
3998option, GNU CC will produce code that is slower and larger but which
3999uses extremely little TOC space. You may wish to use this option
4000only on files that contain less frequently executed code. @refill
4001
4002@item -mxl-call
4003@itemx -mno-xl-call
4004On AIX, pass floating-point arguments to prototyped functions beyond the
4005register save area (RSA) on the stack in addition to argument FPRs. The
4006AIX calling convention was extended but not initially documented to
4007handle an obscure K&R C case of calling a function that takes the
4008address of its arguments with fewer arguments than declared. AIX XL
4009compilers assume that floating point arguments which do not fit in the
4010RSA are on the stack when they compile a subroutine without
4011optimization. Because always storing floating-point arguments on the
4012stack is inefficient and rarely needed, this option is not enabled by
4013default and only is necessary when calling subroutines compiled by AIX
4014XL compilers without optimization.
4015
861bb6c1
JL
4016@item -mthreads
4017Support @dfn{AIX Threads}. Link an application written to use
4018@dfn{pthreads} with special libraries and startup code to enable the
4019application to run.
4020
4021@item -mpe
4022Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE). Link an
4023application written to use message passing with special startup code to
4024enable the application to run. The system must have PE installed in the
4025standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
4026must be overridden with the @samp{-specs=} option to specify the
4027appropriate directory location. The Parallel Environment does not
4028support threads, so the @samp{-mpe} option and the @samp{-mthreads}
4029option are incompatible.
4030
74291a4b
MM
4031@item -msoft-float
4032@itemx -mhard-float
4033Generate code that does not use (uses) the floating-point register set.
4034Software floating point emulation is provided if you use the
4035@samp{-msoft-float} option, and pass the option to GNU CC when linking.
4036
4037@item -mmultiple
4038@itemx -mno-multiple
4039Generate code that uses (does not use) the load multiple word
4040instructions and the store multiple word instructions. These
4041instructions are generated by default on POWER systems, and not
4042generated on PowerPC systems. Do not use @samp{-mmultiple} on little
4043endian PowerPC systems, since those instructions do not work when the
4044processor is in little endian mode.
4045
4046@item -mstring
4047@itemx -mno-string
4048Generate code that uses (does not use) the load string instructions and the
4049store string word instructions to save multiple registers and do small block
861bb6c1 4050moves. These instructions are generated by default on POWER systems, and not
74291a4b
MM
4051generated on PowerPC systems. Do not use @samp{-mstring} on little endian
4052PowerPC systems, since those instructions do not work when the processor is in
4053little endian mode.
4054
861bb6c1
JL
4055@item -mupdate
4056@itemx -mno-update
4057Generate code that uses (does not use) the load or store instructions
4058that update the base register to the address of the calculated memory
4059location. These instructions are generated by default. If you use
4060@samp{-mno-update}, there is a small window between the time that the
4061stack pointer is updated and the address of the previous frame is
4062stored, which means code that walks the stack frame across interrupts or
4063signals may get corrupted data.
4064
4065@item -mfused-madd
4066@itemx -mno-fused-madd
4067Generate code that uses (does not use) the floating point multiply and
4068accumulate instructions. These instructions are generated by default if
4069hardware floating is used.
4070
74291a4b
MM
4071@item -mno-bit-align
4072@itemx -mbit-align
4073On System V.4 and embedded PowerPC systems do not (do) force structures
4074and unions that contain bit fields to be aligned to the base type of the
4075bit field.
4076
4077For example, by default a structure containing nothing but 8
4078@code{unsigned} bitfields of length 1 would be aligned to a 4 byte
4079boundary and have a size of 4 bytes. By using @samp{-mno-bit-align},
4080the structure would be aligned to a 1 byte boundary and be one byte in
4081size.
4082
4083@item -mno-strict-align
4084@itemx -mstrict-align
4085On System V.4 and embedded PowerPC systems do not (do) assume that
4086unaligned memory references will be handled by the system.
4087
4088@item -mrelocatable
4089@itemx -mno-relocatable
4090On embedded PowerPC systems generate code that allows (does not allow)
4091the program to be relocated to a different address at runtime. If you
4092use @samp{-mrelocatable} on any module, all objects linked together must
4093be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}.
4094
4095@item -mrelocatable-lib
4096@itemx -mno-relocatable-lib
4097On embedded PowerPC systems generate code that allows (does not allow)
4098the program to be relocated to a different address at runtime. Modules
4099compiled with @samp{-mreloctable-lib} can be linked with either modules
4100compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or
4101with modules compiled with the @samp{-mrelocatable} options.
4102
4103@item -mno-toc
4104@itemx -mtoc
4105On System V.4 and embedded PowerPC systems do not (do) assume that
4106register 2 contains a pointer to a global area pointing to the addresses
4107used in the program.
4108
4109@item -mno-traceback
4110@itemx -mtraceback
4111On embedded PowerPC systems do not (do) generate a traceback tag before
4112the start of the function. This tag can be used by the debugger to
4113identify where the start of a function is.
4114
4115@item -mlittle
4116@itemx -mlittle-endian
4117On System V.4 and embedded PowerPC systems compile code for the
4118processor in little endian mode. The @samp{-mlittle-endian} option is
4119the same as @samp{-mlittle}.
4120
4121@item -mbig
4122@itemx -mbig-endian
4123On System V.4 and embedded PowerPC systems compile code for the
4124processor in big endian mode. The @samp{-mbig-endian} option is
4125the same as @samp{-mbig}.
4126
4127@item -mcall-sysv
4128On System V.4 and embedded PowerPC systems compile code using calling
4129conventions that adheres to the March 1995 draft of the System V
4130Application Binary Interface, PowerPC processor supplement. This is the
4131default unless you configured GCC using @samp{powerpc-*-eabiaix}.
4132
4133@item -mcall-sysv-eabi
4134Specify both @samp{-mcall-sysv} and @samp{-meabi} options.
4135
4136@item -mcall-sysv-noeabi
4137Specify both @samp{-mcall-sysv} and @samp{-mno-eabi} options.
4138
4139@item -mcall-aix
4140On System V.4 and embedded PowerPC systems compile code using calling
4141conventions that are similar to those used on AIX. This is the
4142default if you configured GCC using @samp{powerpc-*-eabiaix}.
4143
4144@item -mcall-solaris
4145On System V.4 and embedded PowerPC systems compile code for the Solaris
4146operating system.
4147
4148@item -mcall-linux
861bb6c1
JL
4149On System V.4 and embedded PowerPC systems compile code for the
4150Linux-based GNU system.
74291a4b
MM
4151
4152@item -mprototype
e9a25f70 4153@itemx -mno-prototype
74291a4b
MM
4154On System V.4 and embedded PowerPC systems assume that all calls to
4155variable argument functions are properly prototyped. Otherwise, the
4156compiler must insert an instruction before every non prototyped call to
4157set or clear bit 6 of the condition code register (@var{CR}) to
4158indicate whether floating point values were passed in the floating point
4159registers in case the function takes a variable arguments. With
4160@samp{-mprototype}, only calls to prototyped variable argument functions
4161will set or clear the bit.
4162
4163@item -msim
4164On embedded PowerPC systems, assume that the startup module is called
4165@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
4166@file{libc.a}. This is the default for @samp{powerpc-*-eabisim}.
4167configurations.
4168
4169@item -mmvme
4170On embedded PowerPC systems, assume that the startup module is called
e9a25f70
JL
4171@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
4172@file{libc.a}.
4173
4174@item -mads
4175On embedded PowerPC systems, assume that the startup module is called
4176@file{crt0.o} and the standard C libraries are @file{libads.a} and
4177@file{libc.a}.
4178
4179@item -myellowknife
4180On embedded PowerPC systems, assume that the startup module is called
4181@file{crt0.o} and the standard C libraries are @file{libyk.a} and
74291a4b
MM
4182@file{libc.a}.
4183
4184@item -memb
4185On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
4186header to indicate that @samp{eabi} extended relocations are used.
4187
4188@item -meabi
4189@itemx -mno-eabi
4190On System V.4 and embedded PowerPC systems do (do not) adhere to the
4191Embedded Applications Binary Interface (eabi) which is a set of
4192modifications to the System V.4 specifications. Selecting @code{-meabi}
4193means that the stack is aligned to an 8 byte boundary, a function
4194@code{__eabi} is called to from @code{main} to set up the eabi
4195environment, and the @samp{-msdata} option can use both @code{r2} and
4196@code{r13} to point to two separate small data areas. Selecting
4197@code{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
4198do not call an initialization function from @code{main}, and the
4199@samp{-msdata} option will only use @code{r13} to point to a single
4200small data area. The @samp{-meabi} option is on by default if you
4201configured GCC using one of the @samp{powerpc*-*-eabi*} options.
4202
4203@item -msdata=eabi
4204On System V.4 and embedded PowerPC systems, put small initialized
4205@code{const} global and static data in the @samp{.sdata2} section, which
4206is pointed to by register @code{r2}. Put small initialized
4207non-@code{const} global and static data in the @samp{.sdata} section,
4208which is pointed to by register @code{r13}. Put small uninitialized
4209global and static data in the @samp{.sbss} section, which is adjacent to
4210the @samp{.sdata} section. The @samp{-msdata=eabi} option is
4211incompatible with the @samp{-mrelocatable} option. The
4212@samp{-msdata=eabi} option also sets the @samp{-memb} option.
4213
4214@item -msdata=sysv
4215On System V.4 and embedded PowerPC systems, put small global and static
4216data in the @samp{.sdata} section, which is pointed to by register
4217@code{r13}. Put small uninitialized global and static data in the
4218@samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
4219The @samp{-msdata=sysv} option is incompatible with the
4220@samp{-mrelocatable} option.
4221
4222@item -msdata=default
4223@itemx -msdata
4224On System V.4 and embedded PowerPC systems, if @samp{-meabi} is used,
4225compile code the same as @samp{-msdata=eabi}, otherwise compile code the
4226same as @samp{-msdata=sysv}.
4227
4228@item -msdata-data
4229On System V.4 and embedded PowerPC systems, put small global and static
4230data in the @samp{.sdata} section. Put small uninitialized global and
4231static data in the @samp{.sbss} section. Do not use register @code{r13}
4232to address small data however. This is the default behavior unless
4233other @samp{-msdata} options are used.
4234
4235@item -msdata=none
4236@itemx -mno-sdata
4237On embedded PowerPC systems, put all initialized global and static data
4238in the @samp{.data} section, and all uninitialized data in the
4239@samp{.bss} section.
4240
4241@item -G @var{num}
4242@cindex smaller data references (PowerPC)
4243@cindex .sdata/.sdata2 references (PowerPC)
4244On embbeded PowerPC systems, put global and static items less than or
4245equal to @var{num} bytes into the small data or bss sections instead of
4246the normal data or bss section. By default, @var{num} is 8. The
4247@samp{-G @var{num}} switch is also passed to the linker.
4248All modules should be compiled with the same @samp{-G @var{num}} value.
4249
4250@item -mregnames
4251@itemx -mno-regnames
4252On System V.4 and embedded PowerPC systems do (do not) emit register
4253names in the assembly language output using symbolic forms.
4254@end table
4255@node RT Options
4256@subsection IBM RT Options
4257@cindex RT options
4258@cindex IBM RT options
4259
4260These @samp{-m} options are defined for the IBM RT PC:
4261
4262@table @code
4263@item -min-line-mul
4264Use an in-line code sequence for integer multiplies. This is the
4265default.
4266
4267@item -mcall-lib-mul
4268Call @code{lmul$$} for integer multiples.
4269
4270@item -mfull-fp-blocks
4271Generate full-size floating point data blocks, including the minimum
4272amount of scratch space recommended by IBM. This is the default.
4273
4274@item -mminimum-fp-blocks
4275Do not include extra scratch space in floating point data blocks. This
4276results in smaller code, but slower execution, since scratch space must
4277be allocated dynamically.
4278
4279@cindex @file{varargs.h} and RT PC
4280@cindex @file{stdarg.h} and RT PC
4281@item -mfp-arg-in-fpregs
4282Use a calling sequence incompatible with the IBM calling convention in
4283which floating point arguments are passed in floating point registers.
4284Note that @code{varargs.h} and @code{stdargs.h} will not work with
4285floating point operands if this option is specified.
4286
4287@item -mfp-arg-in-gregs
4288Use the normal calling convention for floating point arguments. This is
4289the default.
4290
4291@item -mhc-struct-return
4292Return structures of more than one word in memory, rather than in a
4293register. This provides compatibility with the MetaWare HighC (hc)
4294compiler. Use the option @samp{-fpcc-struct-return} for compatibility
4295with the Portable C Compiler (pcc).
4296
4297@item -mnohc-struct-return
4298Return some structures of more than one word in registers, when
4299convenient. This is the default. For compatibility with the
4300IBM-supplied compilers, use the option @samp{-fpcc-struct-return} or the
4301option @samp{-mhc-struct-return}.
4302@end table
4303
4304@node MIPS Options
4305@subsection MIPS Options
4306@cindex MIPS options
4307
4308These @samp{-m} options are defined for the MIPS family of computers:
4309
4310@table @code
4311@item -mcpu=@var{cpu type}
4312Assume the defaults for the machine type @var{cpu type} when scheduling
4313instructions. The choices for @var{cpu type} are @samp{r2000}, @samp{r3000},
4314@samp{r4000}, @samp{r4400}, @samp{r4600}, and @samp{r6000}. While picking a
4315specific @var{cpu type} will schedule things appropriately for that
4316particular chip, the compiler will not generate any code that does not
4317meet level 1 of the MIPS ISA (instruction set architecture) without
4318the @samp{-mips2} or @samp{-mips3} switches being used.
4319
4320@item -mips1
4321Issue instructions from level 1 of the MIPS ISA. This is the default.
4322@samp{r3000} is the default @var{cpu type} at this ISA level.
4323
4324@item -mips2
4325Issue instructions from level 2 of the MIPS ISA (branch likely, square
4326root instructions). @samp{r6000} is the default @var{cpu type} at this
4327ISA level.
4328
4329@item -mips3
4330Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
4331@samp{r4000} is the default @var{cpu type} at this ISA level.
4332This option does not change the sizes of any of the C data types.
4333
4334@item -mfp32
4335Assume that 32 32-bit floating point registers are available. This is
4336the default.
4337
4338@item -mfp64
4339Assume that 32 64-bit floating point registers are available. This is
4340the default when the @samp{-mips3} option is used.
4341
4342@item -mgp32
4343Assume that 32 32-bit general purpose registers are available. This is
4344the default.
4345
4346@item -mgp64
4347Assume that 32 64-bit general purpose registers are available. This is
4348the default when the @samp{-mips3} option is used.
4349
4350@item -mint64
4351Types long, int, and pointer are 64 bits. This works only if @samp{-mips3}
4352is also specified.
4353
4354@item -mlong64
4355Types long and pointer are 64 bits, and type int is 32 bits.
4356This works only if @samp{-mips3} is also specified.
4357
4358@item -mmips-as
4359Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
4360add normal debug information. This is the default for all
4361platforms except for the OSF/1 reference platform, using the OSF/rose
4362object format. If the either of the @samp{-gstabs} or @samp{-gstabs+}
4363switches are used, the @file{mips-tfile} program will encapsulate the
4364stabs within MIPS ECOFF.
4365
4366@item -mgas
4367Generate code for the GNU assembler. This is the default on the OSF/1
861bb6c1
JL
4368reference platform, using the OSF/rose object format. Also, this is
4369the default if the configure option @samp{--with-gnu-as} is used.
4370
4371@item -msplit-addresses
4372@itemx -mno-split-addresses
4373Generate code to load the high and low parts of address constants separately.
4374This allows @code{gcc} to optimize away redundant loads of the high order
4375bits of addresses. This optimization requires GNU as and GNU ld.
4376This optimization is enabled by default for some embedded targets where
4377GNU as and GNU ld are standard.
74291a4b
MM
4378
4379@item -mrnames
4380@itemx -mno-rnames
4381The @samp{-mrnames} switch says to output code using the MIPS software
4382names for the registers, instead of the hardware names (ie, @var{a0}
4383instead of @var{$4}). The only known assembler that supports this option
4384is the Algorithmics assembler.
4385
4386@item -mgpopt
4387@itemx -mno-gpopt
4388The @samp{-mgpopt} switch says to write all of the data declarations
4389before the instructions in the text section, this allows the MIPS
4390assembler to generate one word memory references instead of using two
4391words for short global or static data items. This is on by default if
4392optimization is selected.
4393
4394@item -mstats
4395@itemx -mno-stats
4396For each non-inline function processed, the @samp{-mstats} switch
4397causes the compiler to emit one line to the standard error file to
4398print statistics about the program (number of registers saved, stack
4399size, etc.).
4400
4401@item -mmemcpy
4402@itemx -mno-memcpy
4403The @samp{-mmemcpy} switch makes all block moves call the appropriate
4404string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
4405generating inline code.
4406
4407@item -mmips-tfile
4408@itemx -mno-mips-tfile
4409The @samp{-mno-mips-tfile} switch causes the compiler not
4410postprocess the object file with the @file{mips-tfile} program,
4411after the MIPS assembler has generated it to add debug support. If
4412@file{mips-tfile} is not run, then no local variables will be
4413available to the debugger. In addition, @file{stage2} and
4414@file{stage3} objects will have the temporary file names passed to the
4415assembler embedded in the object file, which means the objects will
4416not compare the same. The @samp{-mno-mips-tfile} switch should only
4417be used when there are bugs in the @file{mips-tfile} program that
4418prevents compilation.
4419
4420@item -msoft-float
4421Generate output containing library calls for floating point.
4422@strong{Warning:} the requisite libraries are not part of GNU CC.
4423Normally the facilities of the machine's usual C compiler are used, but
4424this can't be done directly in cross-compilation. You must make your
4425own arrangements to provide suitable library functions for
4426cross-compilation.
4427
4428@item -mhard-float
4429Generate output containing floating point instructions. This is the
4430default if you use the unmodified sources.
4431
4432@item -mabicalls
4433@itemx -mno-abicalls
4434Emit (or do not emit) the pseudo operations @samp{.abicalls},
4435@samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for
4436position independent code.
4437
4438@item -mlong-calls
4439@itemx -mno-long-calls
4440Do all calls with the @samp{JALR} instruction, which requires
4441loading up a function's address into a register before the call.
4442You need to use this switch, if you call outside of the current
4443512 megabyte segment to functions that are not through pointers.
4444
4445@item -mhalf-pic
4446@itemx -mno-half-pic
4447Put pointers to extern references into the data section and load them
4448up, rather than put the references in the text section.
4449
4450@item -membedded-pic
4451@itemx -mno-embedded-pic
4452Generate PIC code suitable for some embedded systems. All calls are made
4453using PC relative address, and all data is addressed using the $gp register.
4454This requires GNU as and GNU ld which do most of the work.
4455
4456@item -membedded-data
4457@itemx -mno-embedded-data
4458Allocate variables to the read-only data section first if possible, then
4459next in the small data section if possible, otherwise in data. This gives
4460slightly slower code than the default, but reduces the amount of RAM required
4461when executing, and thus may be preferred for some embedded systems.
4462
4463@item -msingle-float
4464@itemx -mdouble-float
4465The @samp{-msingle-float} switch tells gcc to assume that the floating
4466point coprocessor only supports single precision operations, as on the
4467@samp{r4650} chip. The @samp{-mdouble-float} switch permits gcc to use
4468double precision operations. This is the default.
4469
4470@item -mmad
4471@itemx -mno-mad
4472Permit use of the @samp{mad}, @samp{madu} and @samp{mul} instructions,
4473as on the @samp{r4650} chip.
4474
4475@item -m4650
4476Turns on @samp{-msingle-float}, @samp{-mmad}, and, at least for now,
4477@samp{-mcpu=r4650}.
4478
4479@item -EL
4480Compile code for the processor in little endian mode.
4481The requisite libraries are assumed to exist.
4482
4483@item -EB
4484Compile code for the processor in big endian mode.
4485The requisite libraries are assumed to exist.
4486
4487@item -G @var{num}
4488@cindex smaller data references (MIPS)
4489@cindex gp-relative references (MIPS)
4490Put global and static items less than or equal to @var{num} bytes into
4491the small data or bss sections instead of the normal data or bss
4492section. This allows the assembler to emit one word memory reference
4493instructions based on the global pointer (@var{gp} or @var{$28}),
4494instead of the normal two words used. By default, @var{num} is 8 when
4495the MIPS assembler is used, and 0 when the GNU assembler is used. The
4496@samp{-G @var{num}} switch is also passed to the assembler and linker.
4497All modules should be compiled with the same @samp{-G @var{num}}
4498value.
4499
4500@item -nocpp
4501Tell the MIPS assembler to not run it's preprocessor over user
4502assembler files (with a @samp{.s} suffix) when assembling them.
4503@end table
4504
4505@ifset INTERNALS
4506These options are defined by the macro
4507@code{TARGET_SWITCHES} in the machine description. The default for the
4508options is also defined by that macro, which enables you to change the
4509defaults.
4510@end ifset
4511
4512@node i386 Options
4513@subsection Intel 386 Options
4514@cindex i386 Options
4515@cindex Intel 386 Options
4516
4517These @samp{-m} options are defined for the i386 family of computers:
4518
4519@table @code
4520@item -m486
4521@itemx -m386
4522Control whether or not code is optimized for a 486 instead of an
4523386. Code generated for an 486 will run on a 386 and vice versa.
4524
4525@item -mieee-fp
4526@itemx -mno-ieee-fp
4527Control whether or not the compiler uses IEEE floating point
4528comparisons. These handle correctly the case where the result of a
4529comparison is unordered.
4530
4531@item -msoft-float
4532Generate output containing library calls for floating point.
4533@strong{Warning:} the requisite libraries are not part of GNU CC.
4534Normally the facilities of the machine's usual C compiler are used, but
4535this can't be done directly in cross-compilation. You must make your
4536own arrangements to provide suitable library functions for
4537cross-compilation.
4538
4539On machines where a function returns floating point results in the 80387
4540register stack, some floating point opcodes may be emitted even if
4541@samp{-msoft-float} is used.
4542
4543@item -mno-fp-ret-in-387
4544Do not use the FPU registers for return values of functions.
4545
4546The usual calling convention has functions return values of types
4547@code{float} and @code{double} in an FPU register, even if there
4548is no FPU. The idea is that the operating system should emulate
4549an FPU.
4550
4551The option @samp{-mno-fp-ret-in-387} causes such values to be returned
4552in ordinary CPU registers instead.
4553
4554@item -mno-fancy-math-387
4555Some 387 emulators do not support the @code{sin}, @code{cos} and
4556@code{sqrt} instructions for the 387. Specify this option to avoid
4557generating those instructions. This option is the default on FreeBSD.
4558As of revision 2.6.1, these instructions are not generated unless you
4559also use the @samp{-ffast-math} switch.
4560
4561@item -malign-double
4562@itemx -mno-align-double
4563Control whether GNU CC aligns @code{double}, @code{long double}, and
4564@code{long long} variables on a two word boundary or a one word
4565boundary. Aligning @code{double} variables on a two word boundary will
4566produce code that runs somewhat faster on a @samp{Pentium} at the
4567expense of more memory.
4568
4569@strong{Warning:} if you use the @samp{-malign-double} switch,
4570structures containing the above types will be aligned differently than
4571the published application binary interface specifications for the 386.
4572
4573@item -msvr3-shlib
4574@itemx -mno-svr3-shlib
4575Control whether GNU CC places uninitialized locals into @code{bss} or
4576@code{data}. @samp{-msvr3-shlib} places these locals into @code{bss}.
4577These options are meaningful only on System V Release 3.
4578
4579@item -mno-wide-multiply
4580@itemx -mwide-multiply
4581Control whether GNU CC uses the @code{mul} and @code{imul} that produce
458264 bit results in @code{eax:edx} from 32 bit operands to do @code{long
4583long} multiplies and 32-bit division by constants.
4584
4585@item -mrtd
4586Use a different function-calling convention, in which functions that
4587take a fixed number of arguments return with the @code{ret} @var{num}
4588instruction, which pops their arguments while returning. This saves one
4589instruction in the caller since there is no need to pop the arguments
4590there.
4591
4592You can specify that an individual function is called with this calling
4593sequence with the function attribute @samp{stdcall}. You can also
4594override the @samp{-mrtd} option by using the function attribute
4595@samp{cdecl}. @xref{Function Attributes}
4596
4597@strong{Warning:} this calling convention is incompatible with the one
4598normally used on Unix, so you cannot use it if you need to call
4599libraries compiled with the Unix compiler.
4600
4601Also, you must provide function prototypes for all functions that
4602take variable numbers of arguments (including @code{printf});
4603otherwise incorrect code will be generated for calls to those
4604functions.
4605
4606In addition, seriously incorrect code will result if you call a
4607function with too many arguments. (Normally, extra arguments are
4608harmlessly ignored.)
4609
4610@item -mreg-alloc=@var{regs}
4611Control the default allocation order of integer registers. The
4612string @var{regs} is a series of letters specifying a register. The
4613supported letters are: @code{a} allocate EAX; @code{b} allocate EBX;
4614@code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI;
4615@code{D} allocate EDI; @code{B} allocate EBP.
4616
4617@item -mregparm=@var{num}
4618Control how many registers are used to pass integer arguments. By
4619default, no registers are used to pass arguments, and at most 3
4620registers can be used. You can control this behavior for a specific
4621function by using the function attribute @samp{regparm}. @xref{Function Attributes}
4622
4623@strong{Warning:} if you use this switch, and
4624@var{num} is nonzero, then you must build all modules with the same
4625value, including any libraries. This includes the system libraries and
4626startup modules.
4627
4628@item -malign-loops=@var{num}
4629Align loops to a 2 raised to a @var{num} byte boundary. If
4630@samp{-malign-loops} is not specified, the default is 2.
4631
4632@item -malign-jumps=@var{num}
4633Align instructions that are only jumped to to a 2 raised to a @var{num}
4634byte boundary. If @samp{-malign-jumps} is not specified, the default is
46352 if optimizing for a 386, and 4 if optimizing for a 486.
4636
4637@item -malign-functions=@var{num}
4638Align the start of functions to a 2 raised to @var{num} byte boundary.
6d4312dd 4639If @samp{-malign-functions} is not specified, the default is 2 if optimizing
74291a4b
MM
4640for a 386, and 4 if optimizing for a 486.
4641@end table
4642
4643@node HPPA Options
4644@subsection HPPA Options
4645@cindex HPPA Options
4646
4647These @samp{-m} options are defined for the HPPA family of computers:
4648
4649@table @code
4650@item -mpa-risc-1-0
4651Generate code for a PA 1.0 processor.
4652
4653@item -mpa-risc-1-1
4654Generate code for a PA 1.1 processor.
4655
861bb6c1
JL
4656@item -mbig-switch
4657Generate code suitable for big switch tables. Use this option only if
4658the assembler/linker complain about out of range branches within a switch
4659table.
4660
74291a4b
MM
4661@item -mjump-in-delay
4662Fill delay slots of function calls with unconditional jump instructions
4663by modifying the return pointer for the function call to be the target
4664of the conditional jump.
4665
4666@item -mdisable-fpregs
4667Prevent floating point registers from being used in any manner. This is
4668necessary for compiling kernels which perform lazy context switching of
4669floating point registers. If you use this option and attempt to perform
4670floating point operations, the compiler will abort.
4671
4672@item -mdisable-indexing
4673Prevent the compiler from using indexing address modes. This avoids some
4674rather obscure problems when compiling MIG generated code under MACH.
4675
4676@item -mno-space-regs
4677Generate code that assumes the target has no space registers. This allows
4678GCC to generate faster indirect calls and use unscaled index address modes.
4679
4680Such code is suitable for level 0 PA systems and kernels.
4681
4682@item -mfast-indirect-calls
4683Generate code that assumes calls never cross space boundaries. This
4684allows GCC to emit code which performs faster indirect calls.
4685
4686This option will not work in the presense of shared libraries or nested
4687functions.
4688
4689@item -mspace
4690Optimize for space rather than execution time. Currently this only
4691enables out of line function prologues and epilogues. This option is
4692incompatable with PIC code generation and profiling.
4693
4694@item -mlong-load-store
4695Generate 3-instruction load and store sequences as sometimes required by
4696the HP-UX 10 linker. This is equivalent to the @samp{+k} option to
4697the HP compilers.
4698
4699@item -mportable-runtime
4700Use the portable calling conventions proposed by HP for ELF systems.
4701
4702@item -mgas
4703Enable the use of assembler directives only GAS understands.
4704
4705@item -mschedule=@var{cpu type}
4706Schedule code according to the constraints for the machine type
4707@var{cpu type}. The choices for @var{cpu type} are @samp{700} for
47087@var{n}0 machines, @samp{7100} for 7@var{n}5 machines, and @samp{7100}
4709for 7@var{n}2 machines. @samp{7100} is the default for @var{cpu type}.
4710
4711Note the @samp{7100LC} scheduling information is incomplete and using
4712@samp{7100LC} often leads to bad schedules. For now it's probably best
4713to use @samp{7100} instead of @samp{7100LC} for the 7@var{n}2 machines.
4714
4715@item -mlinker-opt
4716Enable the optimization pass in the HPUX linker. Note this makes symbolic
4717debugging impossible. It also triggers a bug in the HPUX 8 and HPUX 9 linkers
4718in which they give bogus error messages when linking some programs.
4719
4720@item -msoft-float
4721Generate output containing library calls for floating point.
4722@strong{Warning:} the requisite libraries are not available for all HPPA
4723targets. Normally the facilities of the machine's usual C compiler are
4724used, but this cannot be done directly in cross-compilation. You must make
4725your own arrangements to provide suitable library functions for
4726cross-compilation. The embedded target @samp{hppa1.1-*-pro}
4727does provide software floating point support.
4728
4729@samp{-msoft-float} changes the calling convention in the output file;
4730therefore, it is only useful if you compile @emph{all} of a program with
4731this option. In particular, you need to compile @file{libgcc.a}, the
4732library that comes with GNU CC, with @samp{-msoft-float} in order for
4733this to work.
4734@end table
4735
4736@node Intel 960 Options
4737@subsection Intel 960 Options
4738
4739These @samp{-m} options are defined for the Intel 960 implementations:
4740
4741@table @code
4742@item -m@var{cpu type}
4743Assume the defaults for the machine type @var{cpu type} for some of
4744the other options, including instruction scheduling, floating point
4745support, and addressing modes. The choices for @var{cpu type} are
4746@samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
4747@samp{sa}, and @samp{sb}.
4748The default is
4749@samp{kb}.
4750
4751@item -mnumerics
4752@itemx -msoft-float
4753The @samp{-mnumerics} option indicates that the processor does support
4754floating-point instructions. The @samp{-msoft-float} option indicates
4755that floating-point support should not be assumed.
4756
4757@item -mleaf-procedures
4758@itemx -mno-leaf-procedures
4759Do (or do not) attempt to alter leaf procedures to be callable with the
4760@code{bal} instruction as well as @code{call}. This will result in more
4761efficient code for explicit calls when the @code{bal} instruction can be
4762substituted by the assembler or linker, but less efficient code in other
4763cases, such as calls via function pointers, or using a linker that doesn't
4764support this optimization.
4765
4766@item -mtail-call
4767@itemx -mno-tail-call
4768Do (or do not) make additional attempts (beyond those of the
4769machine-independent portions of the compiler) to optimize tail-recursive
4770calls into branches. You may not want to do this because the detection of
4771cases where this is not valid is not totally complete. The default is
4772@samp{-mno-tail-call}.
4773
4774@item -mcomplex-addr
4775@itemx -mno-complex-addr
4776Assume (or do not assume) that the use of a complex addressing mode is a
4777win on this implementation of the i960. Complex addressing modes may not
4778be worthwhile on the K-series, but they definitely are on the C-series.
4779The default is currently @samp{-mcomplex-addr} for all processors except
4780the CB and CC.
4781
4782@item -mcode-align
4783@itemx -mno-code-align
4784Align code to 8-byte boundaries for faster fetching (or don't bother).
4785Currently turned on by default for C-series implementations only.
4786
4787@ignore
4788@item -mclean-linkage
4789@itemx -mno-clean-linkage
4790These options are not fully implemented.
4791@end ignore
4792
4793@item -mic-compat
4794@itemx -mic2.0-compat
4795@itemx -mic3.0-compat
4796Enable compatibility with iC960 v2.0 or v3.0.
4797
4798@item -masm-compat
4799@itemx -mintel-asm
4800Enable compatibility with the iC960 assembler.
4801
4802@item -mstrict-align
4803@itemx -mno-strict-align
4804Do not permit (do permit) unaligned accesses.
4805
4806@item -mold-align
4807Enable structure-alignment compatibility with Intel's gcc release version
861bb6c1 48081.3 (based on gcc 1.37). This option implies @samp{-mstrict-align}.
74291a4b
MM
4809@end table
4810
4811@node DEC Alpha Options
4812@subsection DEC Alpha Options
4813
4814These @samp{-m} options are defined for the DEC Alpha implementations:
4815
4816@table @code
4817@item -mno-soft-float
4818@itemx -msoft-float
4819Use (do not use) the hardware floating-point instructions for
4820floating-point operations. When @code{-msoft-float} is specified,
4821functions in @file{libgcc1.c} will be used to perform floating-point
4822operations. Unless they are replaced by routines that emulate the
4823floating-point operations, or compiled in such a way as to call such
4824emulations routines, these routines will issue floating-point
4825operations. If you are compiling for an Alpha without floating-point
4826operations, you must ensure that the library is built so as not to call
4827them.
4828
4829Note that Alpha implementations without floating-point operations are
4830required to have floating-point registers.
4831
4832@item -mfp-reg
4833@itemx -mno-fp-regs
4834Generate code that uses (does not use) the floating-point register set.
4835@code{-mno-fp-regs} implies @code{-msoft-float}. If the floating-point
4836register set is not used, floating point operands are passed in integer
4837registers as if they were integers and floating-point results are passed
4838in $0 instead of $f0. This is a non-standard calling sequence, so any
4839function with a floating-point argument or return value called by code
4840compiled with @code{-mno-fp-regs} must also be compiled with that
4841option.
4842
4843A typical use of this option is building a kernel that does not use,
4844and hence need not save and restore, any floating-point registers.
4845
4846@item -mieee
4847The Alpha architecture implements floating-point hardware optimized for
4848maximum performance. It is mostly compliant with the IEEE floating
4849point standard. However, for full compliance, software assistance is
4850required. This option generates code fully IEEE compliant code
4851@emph{except} that the @var{inexact flag} is not maintained (see below).
4852If this option is turned on, the CPP macro @code{_IEEE_FP} is defined
4853during compilation. The option is a shorthand for: @samp{-D_IEEE_FP
4854-mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}. The resulting
4855code is less efficient but is able to correctly support denormalized
4856numbers and exceptional IEEE values such as not-a-number and plus/minus
4857infinity. Other Alpha compilers call this option
4858@code{-ieee_with_no_inexact}.
4859
4860@item -mieee-with-inexact
4861@c overfull hbox here --bob 22 jul96
4862@c original text between ignore ... end ignore
4863@ignore
4864This is like @samp{-mieee} except the generated code also maintains the
4865IEEE @var{inexact flag}. Turning on this option causes the generated
4866code to implement fully-compliant IEEE math. The option is a shorthand
4867for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @samp{-mieee-conformant},
4868@samp{-mfp-trap-mode=sui}, and @samp{-mtrap-precision=i}. On some Alpha
4869implementations the resulting code may execute significantly slower than
4870the code generated by default. Since there is very little code that
4871depends on the @var{inexact flag}, you should normally not specify this
4872option. Other Alpha compilers call this option
4873@samp{-ieee_with_inexact}.
4874@end ignore
4875@c changed paragraph
4876This is like @samp{-mieee} except the generated code also maintains the
4877IEEE @var{inexact flag}. Turning on this option causes the generated
4878code to implement fully-compliant IEEE math. The option is a shorthand
4879for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
4880@samp{-mieee-conformant},
4881@samp{-mfp-trap-mode=sui},
4882and @samp{-mtrap-precision=i}.
4883On some Alpha implementations the resulting code may execute
4884significantly slower than the code generated by default. Since there
4885is very little code that depends on the @var{inexact flag}, you should
4886normally not specify this option. Other Alpha compilers call this
4887option @samp{-ieee_with_inexact}.
4888@c end changes to prevent overfull hboxes
4889
4890@item -mfp-trap-mode=@var{trap mode}
4891This option controls what floating-point related traps are enabled.
4892Other Alpha compilers call this option @samp{-fptm }@var{trap mode}.
4893The trap mode can be set to one of four values:
4894
4895@table @samp
4896@item n
4897This is the default (normal) setting. The only traps that are enabled
4898are the ones that cannot be disabled in software (e.g., division by zero
4899trap).
4900
4901@item u
4902In addition to the traps enabled by @samp{n}, underflow traps are enabled
4903as well.
4904
4905@item su
4906Like @samp{su}, but the instructions are marked to be safe for software
4907completion (see Alpha architecture manual for details).
4908
4909@item sui
4910Like @samp{su}, but inexact traps are enabled as well.
4911@end table
4912
4913@item -mfp-rounding-mode=@var{rounding mode}
4914Selects the IEEE rounding mode. Other Alpha compilers call this option
4915@samp{-fprm }@var{rounding mode}. The @var{rounding mode} can be one
4916of:
4917
4918@table @samp
4919@item n
4920Normal IEEE rounding mode. Floating point numbers are rounded towards
4921the nearest machine number or towards the even machine number in case
4922of a tie.
4923
4924@item m
4925Round towards minus infinity.
4926
4927@item c
4928Chopped rounding mode. Floating point numbers are rounded towards zero.
4929
4930@item d
4931Dynamic rounding mode. A field in the floating point control register
4932(@var{fpcr}, see Alpha architecture reference manual) controls the
4933rounding mode in effect. The C library initializes this register for
4934rounding towards plus infinity. Thus, unless your program modifies the
4935@var{fpcr}, @samp{d} corresponds to round towards plus infinity.@end table
4936
4937@item -mtrap-precision=@var{trap precision}
4938In the Alpha architecture, floating point traps are imprecise. This
4939means without software assistance it is impossible to recover from a
4940floating trap and program execution normally needs to be terminated.
4941GNU CC can generate code that can assist operating system trap handlers
4942in determining the exact location that caused a floating point trap.
4943Depending on the requirements of an application, different levels of
4944precisions can be selected:
4945
4946@table @samp
4947@item p
4948Program precision. This option is the default and means a trap handler
4949can only identify which program caused a floating point exception.
4950
4951@item f
4952Function precision. The trap handler can determine the function that
4953caused a floating point exception.
4954
4955@item i
4956Instruction precision. The trap handler can determine the exact
4957instruction that caused a floating point exception.
4958@end table
4959
4960Other Alpha compilers provide the equivalent options called
4961@samp{-scope_safe} and @samp{-resumption_safe}.
4962
4963@item -mieee-conformant
4964This option marks the generated code as IEEE conformant. You must not
4965use this option unless you also specify @samp{-mtrap-precision=i} and either
4966@samp{-mfp-trap-mode=su} or @samp{-mfp-trap-mode=sui}. Its only effect
4967is to emit the line @samp{.eflag 48} in the function prologue of the
4968generated assembly file. Under DEC Unix, this has the effect that
4969IEEE-conformant math library routines will be linked in.
4970
4971@item -mbuild-constants
4972Normally GNU CC examines a 32- or 64-bit integer constant to
4973see if it can construct it from smaller constants in two or three
4974instructions. If it cannot, it will output the constant as a literal and
4975generate code to load it from the data segement at runtime.
4976
4977Use this option to require GNU CC to construct @emph{all} integer constants
4978using code, even if it takes more instructions (the maximum is six).
4979
4980You would typically use this option to build a shared library dynamic
4981loader. Itself a shared library, it must relocate itself in memory
4982before it can find the variables and constants in its own data segment.
4983@end table
4984
4985@node Clipper Options
4986@subsection Clipper Options
4987
4988These @samp{-m} options are defined for the Clipper implementations:
4989
4990@table @code
4991@item -mc300
4992Produce code for a C300 Clipper processor. This is the default.
4993
4994@itemx -mc400
4995Produce code for a C400 Clipper processor i.e. use floating point
4996registers f8..f15.
4997@end table
4998
4999@node H8/300 Options
5000@subsection H8/300 Options
5001
5002These @samp{-m} options are defined for the H8/300 implementations:
5003
5004@table @code
5005@item -mrelax
5006Shorten some address references at link time, when possible; uses the
5007linker option @samp{-relax}. @xref{H8/300,, @code{ld} and the H8/300,
5008ld.info, Using ld}, for a fuller description.
5009
5010@item -mh
5011Generate code for the H8/300H.
5012
dcb9d1f0
JL
5013@item -ms
5014Generate code for the H8/S.
5015
74291a4b
MM
5016@item -mint32
5017Make @code{int} data 32 bits by default.
5018
5019@item -malign-300
5020On the h8/300h, use the same alignment rules as for the h8/300.
5021The default for the h8/300h is to align longs and floats on 4 byte boundaries.
5022@samp{-malign-300} causes them to be aligned on 2 byte boundaries.
5023This option has no effect on the h8/300.
5024@end table
5025
5026@node SH Options
5027@subsection SH Options
5028
5029These @samp{-m} options are defined for the SH implementations:
5030
5031@table @code
5032@item -m1
5033Generate code for the SH1.
5034
5035@item -m2
5036Generate code for the SH2.
5037
5038@item -m3
5039Generate code for the SH3.
5040
5041@item -m3e
5042Generate code for the SH3e.
5043
5044@item -mb
5045Compile code for the processor in big endian mode.
5046
5047@item -ml
5048Compile code for the processor in little endian mode.
5049
5050@item -mrelax
5051Shorten some address references at link time, when possible; uses the
5052linker option @samp{-relax}.
5053@end table
5054
5055@node System V Options
5056@subsection Options for System V
5057
5058These additional options are available on System V Release 4 for
5059compatibility with other compilers on those systems:
5060
5061@table @code
5062@item -G
5063Create a shared object.
5064It is recommended that @samp{-symbolic} or @samp{-shared} be used instead.
5065
5066@item -Qy
5067Identify the versions of each tool used by the compiler, in a
5068@code{.ident} assembler directive in the output.
5069
5070@item -Qn
5071Refrain from adding @code{.ident} directives to the output file (this is
5072the default).
5073
5074@item -YP,@var{dirs}
5075Search the directories @var{dirs}, and no others, for libraries
5076specified with @samp{-l}.
5077
5078@item -Ym,@var{dir}
5079Look in the directory @var{dir} to find the M4 preprocessor.
5080The assembler uses this option.
5081@c This is supposed to go with a -Yd for predefined M4 macro files, but
5082@c the generic assembler that comes with Solaris takes just -Ym.
5083@end table
5084
f84271d9
JL
5085@node V850 Options
5086@subsection V850 Options
5087@cindex V850 Options
5088
5089These @samp{-m} options are defined for V850 implementations:
5090
5091@table @code
5092@item -mlong-calls
5093@itemx -mno-long-calls
5094Treat all calls as being far away (near). If calls are assumed to be
5095far away, the compiler will always load the functions address up into a
5096register, and call indirect through the pointer.
5097
5098@item -mno-ep
5099@item -mep
5100Do not optimize (do optimize) basic blocks that use the same index
5101pointer 4 or more times to copy pointer into the @code{ep} register, and
5102use the shorter @code{sld} and @code{sst} instructions. The @samp{-mep}
5103option is on by default if you optimize.
5104
5105@item -mno-prolog-function
5106@itemx -mprolog-function
5107Do not use (do use) external functions to save and restore registers at
5108the prolog and epilog of a function. The external functions are slower,
5109but use less code space if more than one function saves the same number
5110of registers. The @samp{-mprolog-function} option is on by default if
5111you optimize.
5112
5113@item -mspace
5114Try to make the code as small as possible. At present, this just turns
5115on the @samp{-mep} and @samp{-mprolog-function} options.
5116
5117@item -mtda=@var{n}
5118Put static or global variables whose size is @var{n} bytes or less into
5119the tiny data area that register @code{ep} points to. The tiny data
5120area can hold up to 256 bytes in total (128 bytes for byte references).
5121
5122@item -msda=@var{n}
5123Put static or global variables whose size is @var{n} bytes or less into
5124the small data area that register @code{gp} points to. The small data
5125area can hold up to 64 kilobytes.
5126
5127@item -mzda=@var{n}
5128Put static or global variables whose size is @var{n} bytes or less into
5129the first 32 kilobytes of memory.
e9a25f70 5130
48f0be1b
SC
5131@item -mv850
5132Specify that the target processor is the V850.
5133
e9a25f70
JL
5134@item -mbig-switch
5135Generate code suitable for big switch tables. Use this option only if
5136the assembler/linker complain about out of range branches within a switch
5137table.
f84271d9
JL
5138@end table
5139
74291a4b
MM
5140@node Code Gen Options
5141@section Options for Code Generation Conventions
5142@cindex code generation conventions
5143@cindex options, code generation
5144@cindex run-time options
5145
5146These machine-independent options control the interface conventions
5147used in code generation.
5148
5149Most of them have both positive and negative forms; the negative form
5150of @samp{-ffoo} would be @samp{-fno-foo}. In the table below, only
5151one of the forms is listed---the one which is not the default. You
5152can figure out the other form by either removing @samp{no-} or adding
5153it.
5154
5155@table @code
5156@item -fpcc-struct-return
5157Return ``short'' @code{struct} and @code{union} values in memory like
5158longer ones, rather than in registers. This convention is less
5159efficient, but it has the advantage of allowing intercallability between
5160GNU CC-compiled files and files compiled with other compilers.
5161
5162The precise convention for returning structures in memory depends
5163on the target configuration macros.
5164
5165Short structures and unions are those whose size and alignment match
5166that of some integer type.
5167
5168@item -freg-struct-return
5169Use the convention that @code{struct} and @code{union} values are
5170returned in registers when possible. This is more efficient for small
5171structures than @samp{-fpcc-struct-return}.
5172
5173If you specify neither @samp{-fpcc-struct-return} nor its contrary
5174@samp{-freg-struct-return}, GNU CC defaults to whichever convention is
5175standard for the target. If there is no standard convention, GNU CC
5176defaults to @samp{-fpcc-struct-return}, except on targets where GNU CC
5177is the principal compiler. In those cases, we can choose the standard,
5178and we chose the more efficient register return alternative.
5179
5180@item -fshort-enums
5181Allocate to an @code{enum} type only as many bytes as it needs for the
5182declared range of possible values. Specifically, the @code{enum} type
5183will be equivalent to the smallest integer type which has enough room.
5184
5185@item -fshort-double
5186Use the same size for @code{double} as for @code{float}.
5187
5188@item -fshared-data
5189Requests that the data and non-@code{const} variables of this
5190compilation be shared data rather than private data. The distinction
5191makes sense only on certain operating systems, where shared data is
5192shared between processes running the same program, while private data
5193exists in one copy per process.
5194
5195@item -fno-common
5196Allocate even uninitialized global variables in the bss section of the
5197object file, rather than generating them as common blocks. This has the
5198effect that if the same variable is declared (without @code{extern}) in
5199two different compilations, you will get an error when you link them.
5200The only reason this might be useful is if you wish to verify that the
5201program will work on other systems which always work this way.
5202
5203@item -fno-ident
5204Ignore the @samp{#ident} directive.
5205
5206@item -fno-gnu-linker
5207Do not output global initializations (such as C++ constructors and
5208destructors) in the form used by the GNU linker (on systems where the GNU
5209linker is the standard method of handling them). Use this option when
5210you want to use a non-GNU linker, which also requires using the
5211@code{collect2} program to make sure the system linker includes
5212constructors and destructors. (@code{collect2} is included in the GNU CC
5213distribution.) For systems which @emph{must} use @code{collect2}, the
5214compiler driver @code{gcc} is configured to do this automatically.
5215
5216@item -finhibit-size-directive
5217Don't output a @code{.size} assembler directive, or anything else that
5218would cause trouble if the function is split in the middle, and the
5219two halves are placed at locations far apart in memory. This option is
5220used when compiling @file{crtstuff.c}; you should not need to use it
5221for anything else.
5222
5223@item -fverbose-asm
5224Put extra commentary information in the generated assembly code to
5225make it more readable. This option is generally only of use to those
5226who actually need to read the generated assembly code (perhaps while
5227debugging the compiler itself).
5228
5229@samp{-fverbose-asm} is the default. @samp{-fno-verbose-asm} causes the
5230extra information to be omitted and is useful when comparing two assembler
5231files.
5232
5233@item -fvolatile
5234Consider all memory references through pointers to be volatile.
5235
5236@item -fvolatile-global
5237Consider all memory references to extern and global data items to
5238be volatile.
5239
5240@item -fpic
5241@cindex global offset table
5242@cindex PIC
5243Generate position-independent code (PIC) suitable for use in a shared
5244library, if supported for the target machine. Such code accesses all
861bb6c1
JL
5245constant addresses through a global offset table (GOT). The dynamic
5246loader resolves the GOT entries when the program starts (the dynamic
5247loader is not part of GNU CC; it is part of the operating system). If
5248the GOT size for the linked executable exceeds a machine-specific
5249maximum size, you get an error message from the linker indicating that
5250@samp{-fpic} does not work; in that case, recompile with @samp{-fPIC}
5251instead. (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
5252on the m68k and RS/6000. The 386 has no such limit.)
74291a4b
MM
5253
5254Position-independent code requires special support, and therefore works
5255only on certain machines. For the 386, GNU CC supports PIC for System V
5256but not for the Sun 386i. Code generated for the IBM RS/6000 is always
5257position-independent.
5258
74291a4b
MM
5259@item -fPIC
5260If supported for the target machine, emit position-independent code,
5261suitable for dynamic linking and avoiding any limit on the size of the
5262global offset table. This option makes a difference on the m68k, m88k,
5263and the Sparc.
5264
5265Position-independent code requires special support, and therefore works
5266only on certain machines.
5267
5268@item -ffixed-@var{reg}
5269Treat the register named @var{reg} as a fixed register; generated code
5270should never refer to it (except perhaps as a stack pointer, frame
5271pointer or in some other fixed role).
5272
5273@var{reg} must be the name of a register. The register names accepted
5274are machine-specific and are defined in the @code{REGISTER_NAMES}
5275macro in the machine description macro file.
5276
5277This flag does not have a negative form, because it specifies a
5278three-way choice.
5279
5280@item -fcall-used-@var{reg}
5281Treat the register named @var{reg} as an allocatable register that is
5282clobbered by function calls. It may be allocated for temporaries or
5283variables that do not live across a call. Functions compiled this way
5284will not save and restore the register @var{reg}.
5285
5286Use of this flag for a register that has a fixed pervasive role in the
5287machine's execution model, such as the stack pointer or frame pointer,
5288will produce disastrous results.
5289
5290This flag does not have a negative form, because it specifies a
5291three-way choice.
5292
5293@item -fcall-saved-@var{reg}
5294Treat the register named @var{reg} as an allocatable register saved by
5295functions. It may be allocated even for temporaries or variables that
5296live across a call. Functions compiled this way will save and restore
5297the register @var{reg} if they use it.
5298
5299Use of this flag for a register that has a fixed pervasive role in the
5300machine's execution model, such as the stack pointer or frame pointer,
5301will produce disastrous results.
5302
5303A different sort of disaster will result from the use of this flag for
5304a register in which function values may be returned.
5305
5306This flag does not have a negative form, because it specifies a
5307three-way choice.
5308
5309@item -fpack-struct
5310Pack all structure members together without holes. Usually you would
5311not want to use this option, since it makes the code suboptimal, and
5312the offsets of structure members won't agree with system libraries.
5313
861bb6c1
JL
5314@item -fcheck-memory-usage
5315Generate extra code to check each memory access. GNU CC will generate
5316code that is suitable for a detector of bad memory accesses such as
5317@file{Checker}. If you specify this option, you can not use the
5318@code{asm} or @code{__asm__} keywords.
5319
5320You must also specify this option when you compile functions you call that
5321have side effects. If you do not, you may get erronous messages from
5322the detector. Normally, you should compile all your code with this option.
5323If you use functions from a library that have side-effects (such as
5324@code{read}), you may not be able to recompile the library and
5325specify this option. In that case, you can enable the
5326@samp{-fprefix-function-name} option, which requests GNU CC to encapsulate
5327your code and make other functions look as if they were compiled with
5328@samp{-fcheck-memory-usage}. This is done by calling ``stubs'',
5329which are provided by the detector. If you cannot find or build
5330stubs for every function you call, you may have to specify
5331@samp{-fcheck-memory-usage} without @samp{-fprefix-function-name}.
5332
5333@item -fprefix-function-name
5334Request GNU CC to add a prefix to the symbols generated for function names.
5335GNU CC adds a prefix to the names of functions defined as well as
5336functions called. Code compiled with this option and code compiled
5337without the option can't be linked together, unless or stubs are used.
5338
5339If you compile the following code with @samp{-fprefix-function-name}
5340@example
5341extern void bar (int);
5342void
5343foo (int a)
5344@{
5345 return bar (a + 5);
5346
5347@}
5348@end example
5349
5350@noindent
5351GNU CC will compile the code as if it was written:
5352@example
5353extern void prefix_bar (int);
5354void
5355prefix_foo (int a)
5356@{
5357 return prefix_bar (a + 5);
5358@}
5359@end example
5360This option is designed to be used with @samp{-fcheck-memory-usage}.
5361
5362@item -fstack-check
5363Generate code to verify that you do not go beyond the boundary of the
5364stack. You should specify this flag if you are running in an
5365environment with multiple threads, but only rarely need to specify it in
5366a single-threaded environment since stack overflow is automatically
5367detected on nearly all systems if there is only one stack.
5368
74291a4b
MM
5369@item +e0
5370@itemx +e1
5371Control whether virtual function definitions in classes are used to
5372generate code, or only to define interfaces for their callers. (C++
5373only).
5374
5375These options are provided for compatibility with @code{cfront} 1.x
5376usage; the recommended alternative GNU C++ usage is in flux. @xref{C++
5377Interface,,Declarations and Definitions in One Header}.
5378
5379With @samp{+e0}, virtual function definitions in classes are declared
5380@code{extern}; the declaration is used only as an interface
5381specification, not to generate code for the virtual functions (in this
5382compilation).
5383
5384With @samp{+e1}, G++ actually generates the code implementing virtual
5385functions defined in the code, and makes them publicly visible.
e5eb27e5
JL
5386
5387@cindex aliasing of parameters
5388@cindex parameters, aliased
5389@item -fargument-alias
5390@item -fargument-noalias
5391@item -fargument-noalias-global
5392Specify the possible relationships among parameters and between
5393parameters and global data.
5394
5395@samp{-fargument-alias} specifies that arguments (parameters) may
5396alias each other and may alias global storage.
5397@samp{-fargument-noalias} specifies that arguments do not alias
5398each other, but may alias global storage.
5399@samp{-fargument-noalias-global} specifies that arguments do not
5400alias each other and do not alias global storage.
5401
5402Each language will automatically use whatever option is required by
5403the language standard. You should not need to use these options yourself.
74291a4b
MM
5404@end table
5405
5406@node Environment Variables
5407@section Environment Variables Affecting GNU CC
5408@cindex environment variables
5409
5410This section describes several environment variables that affect how GNU
5411CC operates. They work by specifying directories or prefixes to use
5412when searching for various kinds of files.
5413
5414@ifclear INTERNALS
5415Note that you can also specify places to search using options such as
5416@samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
5417take precedence over places specified using environment variables, which
5418in turn take precedence over those specified by the configuration of GNU
5419CC.
5420@end ifclear
5421@ifset INTERNALS
5422Note that you can also specify places to search using options such as
5423@samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
5424take precedence over places specified using environment variables, which
5425in turn take precedence over those specified by the configuration of GNU
5426CC. @xref{Driver}.
5427@end ifset
5428
5429@table @code
5430@item TMPDIR
5431@findex TMPDIR
5432If @code{TMPDIR} is set, it specifies the directory to use for temporary
5433files. GNU CC uses temporary files to hold the output of one stage of
5434compilation which is to be used as input to the next stage: for example,
5435the output of the preprocessor, which is the input to the compiler
5436proper.
5437
5438@item GCC_EXEC_PREFIX
5439@findex GCC_EXEC_PREFIX
5440If @code{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
5441names of the subprograms executed by the compiler. No slash is added
5442when this prefix is combined with the name of a subprogram, but you can
5443specify a prefix that ends with a slash if you wish.
5444
5445If GNU CC cannot find the subprogram using the specified prefix, it
5446tries looking in the usual places for the subprogram.
5447
5448The default value of @code{GCC_EXEC_PREFIX} is
5449@file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
5450of @code{prefix} when you ran the @file{configure} script.
5451
5452Other prefixes specified with @samp{-B} take precedence over this prefix.
5453
5454This prefix is also used for finding files such as @file{crt0.o} that are
5455used for linking.
5456
5457In addition, the prefix is used in an unusual way in finding the
5458directories to search for header files. For each of the standard
5459directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
5460(more precisely, with the value of @code{GCC_INCLUDE_DIR}), GNU CC tries
5461replacing that beginning with the specified prefix to produce an
5462alternate directory name. Thus, with @samp{-Bfoo/}, GNU CC will search
5463@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
5464These alternate directories are searched first; the standard directories
5465come next.
5466
5467@item COMPILER_PATH
5468@findex COMPILER_PATH
5469The value of @code{COMPILER_PATH} is a colon-separated list of
5470directories, much like @code{PATH}. GNU CC tries the directories thus
5471specified when searching for subprograms, if it can't find the
5472subprograms using @code{GCC_EXEC_PREFIX}.
5473
5474@item LIBRARY_PATH
5475@findex LIBRARY_PATH
5476The value of @code{LIBRARY_PATH} is a colon-separated list of
5477directories, much like @code{PATH}. When configured as a native compiler,
5478GNU CC tries the directories thus specified when searching for special
5479linker files, if it can't find them using @code{GCC_EXEC_PREFIX}. Linking
5480using GNU CC also uses these directories when searching for ordinary
5481libraries for the @samp{-l} option (but directories specified with
5482@samp{-L} come first).
5483
5484@item C_INCLUDE_PATH
5485@itemx CPLUS_INCLUDE_PATH
5486@itemx OBJC_INCLUDE_PATH
5487@findex C_INCLUDE_PATH
5488@findex CPLUS_INCLUDE_PATH
5489@findex OBJC_INCLUDE_PATH
5490@c @itemx OBJCPLUS_INCLUDE_PATH
5491These environment variables pertain to particular languages. Each
5492variable's value is a colon-separated list of directories, much like
5493@code{PATH}. When GNU CC searches for header files, it tries the
5494directories listed in the variable for the language you are using, after
5495the directories specified with @samp{-I} but before the standard header
5496file directories.
5497
5498@item DEPENDENCIES_OUTPUT
5499@findex DEPENDENCIES_OUTPUT
5500@cindex dependencies for make as output
5501If this variable is set, its value specifies how to output dependencies
5502for Make based on the header files processed by the compiler. This
5503output looks much like the output from the @samp{-M} option
5504(@pxref{Preprocessor Options}), but it goes to a separate file, and is
5505in addition to the usual results of compilation.
5506
5507The value of @code{DEPENDENCIES_OUTPUT} can be just a file name, in
5508which case the Make rules are written to that file, guessing the target
5509name from the source file name. Or the value can have the form
5510@samp{@var{file} @var{target}}, in which case the rules are written to
5511file @var{file} using @var{target} as the target name.
5512@end table
5513
5514@node Running Protoize
5515@section Running Protoize
5516
5517The program @code{protoize} is an optional part of GNU C. You can use
5518it to add prototypes to a program, thus converting the program to ANSI
5519C in one respect. The companion program @code{unprotoize} does the
5520reverse: it removes argument types from any prototypes that are found.
5521
5522When you run these programs, you must specify a set of source files as
5523command line arguments. The conversion programs start out by compiling
5524these files to see what functions they define. The information gathered
5525about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
5526
5527After scanning comes actual conversion. The specified files are all
5528eligible to be converted; any files they include (whether sources or
5529just headers) are eligible as well.
5530
5531But not all the eligible files are converted. By default,
5532@code{protoize} and @code{unprotoize} convert only source and header
5533files in the current directory. You can specify additional directories
5534whose files should be converted with the @samp{-d @var{directory}}
5535option. You can also specify particular files to exclude with the
5536@samp{-x @var{file}} option. A file is converted if it is eligible, its
5537directory name matches one of the specified directory names, and its
5538name within the directory has not been excluded.
5539
5540Basic conversion with @code{protoize} consists of rewriting most
5541function definitions and function declarations to specify the types of
5542the arguments. The only ones not rewritten are those for varargs
5543functions.
5544
5545@code{protoize} optionally inserts prototype declarations at the
5546beginning of the source file, to make them available for any calls that
5547precede the function's definition. Or it can insert prototype
5548declarations with block scope in the blocks where undeclared functions
5549are called.
5550
5551Basic conversion with @code{unprotoize} consists of rewriting most
5552function declarations to remove any argument types, and rewriting
5553function definitions to the old-style pre-ANSI form.
5554
5555Both conversion programs print a warning for any function declaration or
5556definition that they can't convert. You can suppress these warnings
5557with @samp{-q}.
5558
5559The output from @code{protoize} or @code{unprotoize} replaces the
5560original source file. The original file is renamed to a name ending
5561with @samp{.save}. If the @samp{.save} file already exists, then
5562the source file is simply discarded.
5563
5564@code{protoize} and @code{unprotoize} both depend on GNU CC itself to
5565scan the program and collect information about the functions it uses.
5566So neither of these programs will work until GNU CC is installed.
5567
5568Here is a table of the options you can use with @code{protoize} and
5569@code{unprotoize}. Each option works with both programs unless
5570otherwise stated.
5571
5572@table @code
5573@item -B @var{directory}
5574Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
5575usual directory (normally @file{/usr/local/lib}). This file contains
5576prototype information about standard system functions. This option
5577applies only to @code{protoize}.
5578
5579@item -c @var{compilation-options}
5580Use @var{compilation-options} as the options when running @code{gcc} to
5581produce the @samp{.X} files. The special option @samp{-aux-info} is
5582always passed in addition, to tell @code{gcc} to write a @samp{.X} file.
5583
5584Note that the compilation options must be given as a single argument to
5585@code{protoize} or @code{unprotoize}. If you want to specify several
5586@code{gcc} options, you must quote the entire set of compilation options
5587to make them a single word in the shell.
5588
5589There are certain @code{gcc} arguments that you cannot use, because they
5590would produce the wrong kind of output. These include @samp{-g},
5591@samp{-O}, @samp{-c}, @samp{-S}, and @samp{-o} If you include these in
5592the @var{compilation-options}, they are ignored.
5593
5594@item -C
5595Rename files to end in @samp{.C} instead of @samp{.c}.
5596This is convenient if you are converting a C program to C++.
5597This option applies only to @code{protoize}.
5598
5599@item -g
5600Add explicit global declarations. This means inserting explicit
5601declarations at the beginning of each source file for each function
5602that is called in the file and was not declared. These declarations
5603precede the first function definition that contains a call to an
5604undeclared function. This option applies only to @code{protoize}.
5605
5606@item -i @var{string}
5607Indent old-style parameter declarations with the string @var{string}.
5608This option applies only to @code{protoize}.
5609
5610@code{unprotoize} converts prototyped function definitions to old-style
5611function definitions, where the arguments are declared between the
5612argument list and the initial @samp{@{}. By default, @code{unprotoize}
5613uses five spaces as the indentation. If you want to indent with just
5614one space instead, use @samp{-i " "}.
5615
5616@item -k
5617Keep the @samp{.X} files. Normally, they are deleted after conversion
5618is finished.
5619
5620@item -l
5621Add explicit local declarations. @code{protoize} with @samp{-l} inserts
5622a prototype declaration for each function in each block which calls the
5623function without any declaration. This option applies only to
5624@code{protoize}.
5625
5626@item -n
5627Make no real changes. This mode just prints information about the conversions
5628that would have been done without @samp{-n}.
5629
5630@item -N
5631Make no @samp{.save} files. The original files are simply deleted.
5632Use this option with caution.
5633
5634@item -p @var{program}
5635Use the program @var{program} as the compiler. Normally, the name
5636@file{gcc} is used.
5637
5638@item -q
5639Work quietly. Most warnings are suppressed.
5640
5641@item -v
5642Print the version number, just like @samp{-v} for @code{gcc}.
5643@end table
5644
5645If you need special compiler options to compile one of your program's
5646source files, then you should generate that file's @samp{.X} file
5647specially, by running @code{gcc} on that source file with the
5648appropriate options and the option @samp{-aux-info}. Then run
5649@code{protoize} on the entire set of files. @code{protoize} will use
5650the existing @samp{.X} file because it is newer than the source file.
5651For example:
5652
5653@example
5654gcc -Dfoo=bar file1.c -aux-info
5655protoize *.c
5656@end example
5657
5658@noindent
5659You need to include the special files along with the rest in the
5660@code{protoize} command, even though their @samp{.X} files already
5661exist, because otherwise they won't get converted.
5662
5663@xref{Protoize Caveats}, for more information on how to use
5664@code{protoize} successfully.
5665