1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
6 @chapter GCC Command Options
7 @cindex GCC command options
8 @cindex command options
9 @cindex options, GCC command
11 When you invoke GCC, it normally does preprocessing, compilation,
12 assembly and linking. The ``overall options'' allow you to stop this
13 process at an intermediate stage. For example, the @samp{-c} option
14 says not to run the linker. Then the output consists of object files
15 output by the assembler.
17 Other options are passed on to one stage of processing. Some options
18 control the preprocessor and others the compiler itself. Yet other
19 options control the assembler and linker; most of these are not
20 documented here, since you rarely need to use any of them.
22 @cindex C compilation options
23 Most of the command line options that you can use with GCC are useful
24 for C programs; when an option is only useful with another language
25 (usually C++), the explanation says so explicitly. If the description
26 for a particular option does not mention a source language, you can use
27 that option with all supported languages.
29 @cindex C++ compilation options
30 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
31 options for compiling C++ programs.
33 @cindex grouping options
34 @cindex options, grouping
35 The @code{gcc} program accepts options and file names as operands. Many
36 options have multiletter names; therefore multiple single-letter options
37 may @emph{not} be grouped: @samp{-dr} is very different from @w{@samp{-d
40 @cindex order of options
41 @cindex options, order
42 You can mix options and other arguments. For the most part, the order
43 you use doesn't matter. Order does matter when you use several options
44 of the same kind; for example, if you specify @samp{-L} more than once,
45 the directories are searched in the order specified.
47 Many 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
50 these have both positive and negative forms; the negative form of
51 @samp{-ffoo} would be @samp{-fno-foo}. This manual documents
52 only one of these two forms, whichever one is not the default.
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 * Spec Files:: How to pass switches to sub-processes.
72 * Target Options:: Running a cross-compiler, or an old version of GCC.
73 * Submodel Options:: Specifying minor hardware or convention variations,
74 such as 68010 vs 68020.
75 * Code Gen Options:: Specifying conventions for function calls, data layout
77 * Environment Variables:: Env vars that affect GCC.
78 * Running Protoize:: Automatically adding or removing function prototypes.
82 @section Option Summary
84 Here is a summary of all the options, grouped by type. Explanations are
85 in the following sections.
89 @xref{Overall Options,,Options Controlling the Kind of Output}.
91 -c -S -E -o @var{file} -pipe -pass-exit-codes -v --help -x @var{language}
94 @item C Language Options
95 @xref{C Dialect Options,,Options Controlling C Dialect}.
97 -ansi -fstd -fallow-single-precision -fcond-mismatch -fno-asm
98 -fno-builtin -ffreestanding -fhosted -fsigned-bitfields -fsigned-char
99 -funsigned-bitfields -funsigned-char -fwritable-strings
100 -traditional -traditional-cpp -trigraphs
103 @item C++ Language Options
104 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
106 -fno-access-control -fcheck-new -fconserve-space -fdollars-in-identifiers
107 -fno-elide-constructors -fexternal-templates -ffor-scope
108 -fno-for-scope -fno-gnu-keywords -fguiding-decls
109 -fhonor-std -fhuge-objects -fno-implicit-templates -finit-priority
110 -fno-implement-inlines -fname-mangling-version-@var{n} -fno-default-inline
111 -foperator-names -fno-optional-diags -fpermissive -frepo -fstrict-prototype
112 -fsquangle -ftemplate-depth-@var{n} -fuse-cxa-atexit -fvtable-thunks
113 -nostdinc++ -Wctor-dtor-privacy -Wno-deprecated -Weffc++
114 -Wno-non-template-friend
115 -Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual
116 -Wno-pmf-conversions -Wreorder -Wsign-promo -Wsynth
119 @item Warning Options
120 @xref{Warning Options,,Options to Request or Suppress Warnings}.
122 -fsyntax-only -pedantic -pedantic-errors
123 -w -W -Wall -Waggregate-return
124 -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment
125 -Wconversion -Werror -Wformat
126 -Wid-clash-@var{len} -Wimplicit -Wimplicit-int
127 -Wimplicit-function-declaration -Wimport
128 -Werror-implicit-function-declaration -Wfloat-equal -Winline
129 -Wlarger-than-@var{len} -Wlong-long
130 -Wmain -Wmissing-declarations -Wmissing-noreturn
131 -Wmultichar -Wno-import -Wpacked -Wpadded
132 -Wparentheses -Wpointer-arith -Wredundant-decls
133 -Wreturn-type -Wshadow -Wsign-compare -Wswitch
134 -Wtrigraphs -Wundef -Wuninitialized -Wunknown-pragmas -Wunreachable-code
135 -Wunused -Wwrite-strings
138 @item C-only Warning Options
140 -Wbad-function-cast -Wmissing-prototypes -Wnested-externs
141 -Wstrict-prototypes -Wtraditional
144 @item Debugging Options
145 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
147 -a -ax -d@var{letters} -fdump-unnumbered -fdump-translation-unit-@var{file}
148 -fpretend-float -fprofile-arcs -ftest-coverage
149 -g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2
150 -ggdb -gstabs -gstabs+ -gxcoff -gxcoff+
151 -p -pg -print-file-name=@var{library} -print-libgcc-file-name
152 -print-prog-name=@var{program} -print-search-dirs -save-temps -time
155 @item Optimization Options
156 @xref{Optimize Options,,Options that Control Optimization}.
158 -falign-functions=@var{n} -falign-labels=@var{n} -falign-loops=@var{n}
159 -falign-jumps=@var{n} -fbranch-probabilities
160 -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
161 -fdelayed-branch -fdelete-null-pointer-checks -fexpensive-optimizations
162 -ffast-math -ffloat-store -fforce-addr -fforce-mem -fno-math-errno
163 -fdata-sections -ffunction-sections -fgcse
164 -finline-functions -finline-limit=@var{n} -fkeep-inline-functions
165 -fmove-all-movables -fno-default-inline -fno-defer-pop
166 -fno-function-cse -fno-inline -fno-peephole
167 -fomit-frame-pointer -foptimize-register-moves -foptimize-sibling-calls
168 -fregmove -frerun-cse-after-loop -frerun-loop-opt -freduce-all-givs
169 -fschedule-insns -fschedule-insns2 -fstrength-reduce
170 -fstrict-aliasing -fthread-jumps -funroll-all-loops
172 -O -O0 -O1 -O2 -O3 -Os
175 @item Preprocessor Options
176 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
178 -A@var{question}(@var{answer}) -C -dD -dM -dN
179 -D@var{macro}@r{[}=@var{defn}@r{]} -E -H
181 -include @var{file} -imacros @var{file}
182 -iprefix @var{file} -iwithprefix @var{dir}
183 -iwithprefixbefore @var{dir} -isystem @var{dir} -isystem-c++ @var{dir}
184 -M -MD -MM -MMD -MG -nostdinc -P -trigraphs
185 -undef -U@var{macro} -Wp,@var{option}
188 @item Assembler Option
189 @xref{Assembler Options,,Passing Options to the Assembler}.
195 @xref{Link Options,,Options for Linking}.
197 @var{object-file-name} -l@var{library}
198 -nostartfiles -nodefaultlibs -nostdlib
199 -s -static -shared -symbolic
200 -Wl,@var{option} -Xlinker @var{option}
204 @item Directory Options
205 @xref{Directory Options,,Options for Directory Search}.
207 -B@var{prefix} -I@var{dir} -I- -L@var{dir} -specs=@var{file}
211 @c I wrote this xref this way to avoid overfull hbox. -- rms
212 @xref{Target Options}.
214 -b @var{machine} -V @var{version}
217 @item Machine Dependent Options
218 @xref{Submodel Options,,Hardware Models and Configurations}.
220 @emph{M680x0 Options}
221 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040
222 -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020
223 -mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel
224 -malign-int -mstrict-align
231 -mtune=@var{cpu type}
232 -mcmodel=@var{code model}
234 -mapp-regs -mbroken-saverestore -mcypress
235 -mepilogue -mfaster-structs -mflat
236 -mfpu -mhard-float -mhard-quad-float
237 -mimpure-text -mlive-g0 -mno-app-regs
238 -mno-epilogue -mno-faster-structs -mno-flat -mno-fpu
239 -mno-impure-text -mno-stack-bias -mno-unaligned-doubles
240 -msoft-float -msoft-quad-float -msparclite -mstack-bias
241 -msupersparc -munaligned-doubles -mv8
243 @emph{Convex Options}
244 -mc1 -mc2 -mc32 -mc34 -mc38
245 -margcount -mnoargcount
247 -mvolatile-cache -mvolatile-nocache
249 @emph{AMD29K Options}
250 -m29000 -m29050 -mbw -mnbw -mdw -mndw
251 -mlarge -mnormal -msmall
252 -mkernel-registers -mno-reuse-arg-regs
253 -mno-stack-check -mno-storem-bug
254 -mreuse-arg-regs -msoft-float -mstack-check
255 -mstorem-bug -muser-registers
258 -mapcs-frame -mno-apcs-frame
260 -mapcs-stack-check -mno-apcs-stack-check
261 -mapcs-float -mno-apcs-float
262 -mapcs-reentrant -mno-apcs-reentrant
263 -msched-prolog -mno-sched-prolog
264 -mlittle-endian -mbig-endian -mwords-little-endian
265 -malignment-traps -mno-alignment-traps
266 -msoft-float -mhard-float -mfpe
267 -mthumb-interwork -mno-thumb-interwork
268 -mcpu= -march= -mfpe=
269 -mstructure-size-boundary=
270 -mbsd -mxopen -mno-symrename
272 -mlong-calls -mno-long-calls
273 -mnop-fun-dllimport -mno-nop-fun-dllimport
274 -msingle-pic-base -mno-single-pic-base
278 -mtpcs-frame -mno-tpcs-frame
279 -mtpcs-leaf-frame -mno-tpcs-leaf-frame
280 -mlittle-endian -mbig-endian
281 -mthumb-interwork -mno-thumb-interwork
282 -mstructure-size-boundary=
283 -mnop-fun-dllimport -mno-nop-fun-dllimport
284 -mcallee-super-interworking -mno-callee-super-interworking
285 -mcaller-super-interworking -mno-caller-super-interworking
286 -msingle-pic-base -mno-single-pic-base
289 @emph{MN10200 Options}
292 @emph{MN10300 Options}
299 @emph{M32R/D Options}
300 -mcode-model=@var{model type} -msdata=@var{sdata type}
304 -m88000 -m88100 -m88110 -mbig-pic
305 -mcheck-zero-division -mhandle-large-shift
306 -midentify-revision -mno-check-zero-division
307 -mno-ocs-debug-info -mno-ocs-frame-position
308 -mno-optimize-arg-area -mno-serialize-volatile
309 -mno-underscores -mocs-debug-info
310 -mocs-frame-position -moptimize-arg-area
311 -mserialize-volatile -mshort-data-@var{num} -msvr3
312 -msvr4 -mtrap-large-shift -muse-div-instruction
313 -mversion-03.00 -mwarn-passed-structs
315 @emph{RS/6000 and PowerPC Options}
317 -mtune=@var{cpu type}
318 -mpower -mno-power -mpower2 -mno-power2
319 -mpowerpc -mpowerpc64 -mno-powerpc
320 -mpowerpc-gpopt -mno-powerpc-gpopt
321 -mpowerpc-gfxopt -mno-powerpc-gfxopt
322 -mnew-mnemonics -mold-mnemonics
323 -mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc
324 -m64 -m32 -mxl-call -mno-xl-call -mthreads -mpe
325 -msoft-float -mhard-float -mmultiple -mno-multiple
326 -mstring -mno-string -mupdate -mno-update
327 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align
328 -mstrict-align -mno-strict-align -mrelocatable
329 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib
330 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian
331 -mcall-aix -mcall-sysv -mprototype -mno-prototype
332 -msim -mmvme -mads -myellowknife -memb -msdata
333 -msdata=@var{opt} -G @var{num}
336 -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
337 -mfull-fp-blocks -mhc-struct-return -min-line-mul
338 -mminimum-fp-blocks -mnohc-struct-return
341 -mabicalls -mcpu=@var{cpu type} -membedded-data -muninit-const-in-rodata
342 -membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64
343 -mgpopt -mhalf-pic -mhard-float -mint64 -mips1
344 -mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy
345 -mmips-as -mmips-tfile -mno-abicalls
346 -mno-embedded-data -mno-uninit-const-in-rodata -mno-embedded-pic
347 -mno-gpopt -mno-long-calls
348 -mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats
349 -mrnames -msoft-float
350 -m4650 -msingle-float -mmad
351 -mstats -EL -EB -G @var{num} -nocpp
352 -mabi=32 -mabi=n32 -mabi=64 -mabi=eabi
357 -march=@var{cpu type}
358 -mieee-fp -mno-fancy-math-387
359 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib
360 -mno-wide-multiply -mrtd -malign-double
361 -mreg-alloc=@var{list} -mregparm=@var{num}
362 -malign-jumps=@var{num} -malign-loops=@var{num}
363 -malign-functions=@var{num} -mpreferred-stack-boundary=@var{num}
364 -mthreads -mno-align-stringops -minline-all-stringops
365 -mpush-args -maccumulate-outgoing-args
368 -march=@var{architecture type}
369 -mbig-switch -mdisable-fpregs -mdisable-indexing
370 -mfast-indirect-calls -mgas -mjump-in-delay
371 -mlong-load-store -mno-big-switch -mno-disable-fpregs
372 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas
373 -mno-jump-in-delay -mno-long-load-store
374 -mno-portable-runtime -mno-soft-float
375 -mno-space-regs -msoft-float -mpa-risc-1-0
376 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime
377 -mschedule=@var{cpu type} -mspace-regs
379 @emph{Intel 960 Options}
380 -m@var{cpu type} -masm-compat -mclean-linkage
381 -mcode-align -mcomplex-addr -mleaf-procedures
382 -mic-compat -mic2.0-compat -mic3.0-compat
383 -mintel-asm -mno-clean-linkage -mno-code-align
384 -mno-complex-addr -mno-leaf-procedures
385 -mno-old-align -mno-strict-align -mno-tail-call
386 -mnumerics -mold-align -msoft-float -mstrict-align
389 @emph{DEC Alpha Options}
390 -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
392 -mieee -mieee-with-inexact -mieee-conformant
393 -mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode}
394 -mtrap-precision=@var{mode} -mbuild-constants
396 -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max
397 -mmemory-latency=@var{time}
399 @emph{Clipper Options}
402 @emph{H8/300 Options}
403 -mrelax -mh -ms -mint32 -malign-300
406 -m1 -m2 -m3 -m3e -mb -ml -mdalign -mrelax
408 @emph{System V Options}
409 -Qy -Qn -YP,@var{paths} -Ym,@var{dir}
413 -mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text section}
414 -mdata=@var{data section} -mrodata=@var{readonly data section}
416 @emph{TMS320C3x/C4x Options}
417 -mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm
418 -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload
419 -mrpts=@var{count} -mrptb -mdb -mloop-unsigned
420 -mparallel-insns -mparallel-mpy -mpreserve-float
423 -mlong-calls -mno-long-calls -mep -mno-ep
424 -mprolog-function -mno-prolog-function -mspace
425 -mtda=@var{n} -msda=@var{n} -mzda=@var{n}
429 -m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add
430 -msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb
431 -mbitfield -mnobitfield -mhimem -mnohimem
434 -mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts
438 -mhardlit, -mno-hardlit -mdiv -mno-div -mrelax-immediates
439 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields
440 -m4byte-functions -mno-4byte-functions -mcallgraph-data
441 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim
442 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment
445 @item Code Generation Options
446 @xref{Code Gen Options,,Options for Code Generation Conventions}.
448 -fcall-saved-@var{reg} -fcall-used-@var{reg}
449 -fexceptions -funwind-tables -ffixed-@var{reg} -finhibit-size-directive
450 -fcheck-memory-usage -fprefix-function-name
451 -fno-common -fno-ident -fno-gnu-linker
452 -fpcc-struct-return -fpic -fPIC
453 -freg-struct-return -fshared-data -fshort-enums
454 -fshort-double -fvolatile -fvolatile-global -fvolatile-static
455 -fverbose-asm -fpack-struct -fstack-check
456 -fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym}
457 -fargument-alias -fargument-noalias
458 -fargument-noalias-global
464 * Overall Options:: Controlling the kind of output:
465 an executable, object files, assembler files,
466 or preprocessed source.
467 * C Dialect Options:: Controlling the variant of C language compiled.
468 * C++ Dialect Options:: Variations on C++.
469 * Warning Options:: How picky should the compiler be?
470 * Debugging Options:: Symbol tables, measurements, and debugging dumps.
471 * Optimize Options:: How much optimization?
472 * Preprocessor Options:: Controlling header files and macro definitions.
473 Also, getting dependency information for Make.
474 * Assembler Options:: Passing options to the assembler.
475 * Link Options:: Specifying libraries and so on.
476 * Directory Options:: Where to find header files and libraries.
477 Where to find the compiler executable files.
478 * Spec Files:: How to pass switches to sub-processes.
479 * Target Options:: Running a cross-compiler, or an old version of GCC.
482 @node Overall Options
483 @section Options Controlling the Kind of Output
485 Compilation can involve up to four stages: preprocessing, compilation
486 proper, assembly and linking, always in that order. The first three
487 stages apply to an individual source file, and end by producing an
488 object file; linking combines all the object files (those newly
489 compiled, and those specified as input) into an executable file.
491 @cindex file name suffix
492 For any given input file, the file name suffix determines what kind of
497 C source code which must be preprocessed.
500 C source code which should not be preprocessed.
503 C++ source code which should not be preprocessed.
506 Objective-C source code. Note that you must link with the library
507 @file{libobjc.a} to make an Objective-C program work.
510 C header file (not to be compiled or linked).
513 @itemx @var{file}.cxx
514 @itemx @var{file}.cpp
516 C++ source code which must be preprocessed. Note that in @samp{.cxx},
517 the last two letters must both be literally @samp{x}. Likewise,
518 @samp{.C} refers to a literal capital C.
524 Assembler code which must be preprocessed.
527 An object file to be fed straight into linking.
528 Any file name with no recognized suffix is treated this way.
531 You can specify the input language explicitly with the @samp{-x} option:
534 @item -x @var{language}
535 Specify explicitly the @var{language} for the following input files
536 (rather than letting the compiler choose a default based on the file
537 name suffix). This option applies to all following input files until
538 the next @samp{-x} option. Possible values for @var{language} are:
541 c-header cpp-output c++-cpp-output
542 assembler assembler-with-cpp
546 Turn off any specification of a language, so that subsequent files are
547 handled according to their file name suffixes (as they are if @samp{-x}
548 has not been used at all).
550 @item -pass-exit-codes
551 Normally the @code{gcc} program will exit with the code of 1 if any
552 phase of the compiler returns a non-success return code. If you specify
553 @samp{-pass-exit-codes}, the @code{gcc} program will instead return with
554 numerically highest error produced by any phase that returned an error
558 If you only want some of the stages of compilation, you can use
559 @samp{-x} (or filename suffixes) to tell @code{gcc} where to start, and
560 one of the options @samp{-c}, @samp{-S}, or @samp{-E} to say where
561 @code{gcc} is to stop. Note that some combinations (for example,
562 @samp{-x cpp-output -E} instruct @code{gcc} to do nothing at all.
566 Compile or assemble the source files, but do not link. The linking
567 stage simply is not done. The ultimate output is in the form of an
568 object file for each source file.
570 By default, the object file name for a source file is made by replacing
571 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
573 Unrecognized input files, not requiring compilation or assembly, are
577 Stop after the stage of compilation proper; do not assemble. The output
578 is in the form of an assembler code file for each non-assembler input
581 By default, the assembler file name for a source file is made by
582 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
584 Input files that don't require compilation are ignored.
587 Stop after the preprocessing stage; do not run the compiler proper. The
588 output is in the form of preprocessed source code, which is sent to the
591 Input files which don't require preprocessing are ignored.
593 @cindex output file option
595 Place output in file @var{file}. This applies regardless to whatever
596 sort of output is being produced, whether it be an executable file,
597 an object file, an assembler file or preprocessed C code.
599 Since only one output file can be specified, it does not make sense to
600 use @samp{-o} when compiling more than one input file, unless you are
601 producing an executable file as output.
603 If @samp{-o} is not specified, the default is to put an executable file
604 in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
605 @file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
606 all preprocessed C source on standard output.@refill
609 Print (on standard error output) the commands executed to run the stages
610 of compilation. Also print the version number of the compiler driver
611 program and of the preprocessor and the compiler proper.
614 Use pipes rather than temporary files for communication between the
615 various stages of compilation. This fails to work on some systems where
616 the assembler is unable to read from a pipe; but the GNU assembler has
620 Print (on the standard output) a description of the command line options
621 understood by @code{gcc}. If the @code{-v} option is also specified
622 then @code{--help} will also be passed on to the various processes
623 invoked by @code{gcc}, so that they can display the command line options
624 they accept. If the @code{-W} option is also specified then command
625 line options which have no documentation associated with them will also
630 @section Compiling C++ Programs
632 @cindex suffixes for C++ source
633 @cindex C++ source file suffixes
634 C++ source files conventionally use one of the suffixes @samp{.C},
635 @samp{.cc}, @samp{.cpp}, @samp{.c++}, @samp{.cp}, or @samp{.cxx};
636 preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes
637 files with these names and compiles them as C++ programs even if you
638 call the compiler the same way as for compiling C programs (usually with
639 the name @code{gcc}).
643 However, C++ programs often require class libraries as well as a
644 compiler that understands the C++ language---and under some
645 circumstances, you might want to compile programs from standard input,
646 or otherwise without a suffix that flags them as C++ programs.
647 @code{g++} is a program that calls GCC with the default language
648 set to C++, and automatically specifies linking against the C++
649 library. On many systems, the script @code{g++} is also
650 installed with the name @code{c++}.
652 @cindex invoking @code{g++}
653 When you compile C++ programs, you may specify many of the same
654 command-line options that you use for compiling programs in any
655 language; or command-line options meaningful for C and related
656 languages; or options that are meaningful only for C++ programs.
657 @xref{C Dialect Options,,Options Controlling C Dialect}, for
658 explanations of options for languages related to C.
659 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
660 explanations of options that are meaningful only for C++ programs.
662 @node C Dialect Options
663 @section Options Controlling C Dialect
664 @cindex dialect options
665 @cindex language dialect options
666 @cindex options, dialect
668 The following options control the dialect of C (or languages derived
669 from C, such as C++ and Objective C) that the compiler accepts:
674 In C mode, support all ANSI standard C programs. In C++ mode,
675 remove GNU extensions that conflict with ANSI C++.
676 @c shouldn't we be saying "ISO"?
678 This turns off certain features of GCC that are incompatible with ANSI
679 C (when compiling C code), or of ANSI standard C++ (when compiling C++ code),
680 such as the @code{asm} and @code{typeof} keywords, and
681 predefined macros such as @code{unix} and @code{vax} that identify the
682 type of system you are using. It also enables the undesirable and
683 rarely used ANSI trigraph feature. For the C compiler,
684 it disables recognition of C++ style @samp{//} comments as well as
685 the @code{inline} keyword. For the C++ compiler,
686 @samp{-foperator-names} is enabled as well.
689 The alternate keywords @code{__asm__}, @code{__extension__},
690 @code{__inline__} and @code{__typeof__} continue to work despite
691 @samp{-ansi}. You would not want to use them in an ANSI C program, of
692 course, but it is useful to put them in header files that might be included
693 in compilations done with @samp{-ansi}. Alternate predefined macros
694 such as @code{__unix__} and @code{__vax__} are also available, with or
695 without @samp{-ansi}.
697 The @samp{-ansi} option does not cause non-ANSI programs to be
698 rejected gratuitously. For that, @samp{-pedantic} is required in
699 addition to @samp{-ansi}. @xref{Warning Options}.
701 The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
702 option is used. Some header files may notice this macro and refrain
703 from declaring certain functions or defining certain macros that the
704 ANSI standard doesn't call for; this is to avoid interfering with any
705 programs that might use these names for other things.
707 The functions @code{alloca}, @code{abort}, @code{exit}, and
708 @code{_exit} are not builtin functions when @samp{-ansi} is used.
711 Determine the language standard. A value for this option must be provided;
719 ISO C as modified in amend. 1
725 same as -std=iso9899:1990
728 same as -std=iso9899:199x
731 default, iso9899:1990 + gnu extensions
734 iso9899:199x + gnu extensions
737 Even when this option is not specified, you can still use some of the
738 features of newer standards in so far as they do not conflict with
739 previous C standards. For example, you may use @code{__restrict__} even
740 when -fstd=c9x is not specified.
743 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
744 keyword, so that code can use these words as identifiers. You can use
745 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
746 instead. @samp{-ansi} implies @samp{-fno-asm}.
748 In C++, this switch only affects the @code{typeof} keyword, since
749 @code{asm} and @code{inline} are standard keywords. You may want to
750 use the @samp{-fno-gnu-keywords} flag instead, as it also disables the
751 other, C++-specific, extension keywords such as @code{headof}.
754 @cindex builtin functions
780 Don't recognize builtin functions that do not begin with @samp{__builtin_}
781 as prefix. Currently, the functions affected include @code{abort},
782 @code{abs}, @code{alloca}, @code{cos}, @code{cosf}, @code{cosl},
783 @code{exit}, @code{_exit}, @code{fabs}, @code{fabsf}, @code{fabsl},
784 @code{ffs}, @code{labs}, @code{memcmp}, @code{memcpy}, @code{memset},
785 @code{sin}, @code{sinf}, @code{sinl}, @code{sqrt}, @code{sqrtf},
786 @code{sqrtl}, @code{strcmp}, @code{strcpy}, and @code{strlen}.
788 GCC normally generates special code to handle certain builtin functions
789 more efficiently; for instance, calls to @code{alloca} may become single
790 instructions that adjust the stack directly, and calls to @code{memcpy}
791 may become inline copy loops. The resulting code is often both smaller
792 and faster, but since the function calls no longer appear as such, you
793 cannot set a breakpoint on those calls, nor can you change the behavior
794 of the functions by linking with a different library.
796 The @samp{-ansi} option prevents @code{alloca}, @code{ffs} and @code{_exit}
797 from being builtin functions, since these functions do not have an ANSI
801 @cindex hosted environment
803 Assert that compilation takes place in a hosted environment. This implies
804 @samp{-fbuiltin}. A hosted environment is one in which the
805 entire standard library is available, and in which @code{main} has a return
806 type of @code{int}. Examples are nearly everything except a kernel.
807 This is equivalent to @samp{-fno-freestanding}.
810 @cindex hosted environment
812 Assert that compilation takes place in a freestanding environment. This
813 implies @samp{-fno-builtin}. A freestanding environment
814 is one in which the standard library may not exist, and program startup may
815 not necessarily be at @code{main}. The most obvious example is an OS kernel.
816 This is equivalent to @samp{-fno-hosted}.
819 Support ANSI C trigraphs. You don't want to know about this
820 brain-damage. The @samp{-ansi} option implies @samp{-trigraphs}.
822 @cindex traditional C language
823 @cindex C language, traditional
825 Attempt to support some aspects of traditional C compilers.
830 All @code{extern} declarations take effect globally even if they
831 are written inside of a function definition. This includes implicit
832 declarations of functions.
835 The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
836 and @code{volatile} are not recognized. (You can still use the
837 alternative keywords such as @code{__typeof__}, @code{__inline__}, and
841 Comparisons between pointers and integers are always allowed.
844 Integer types @code{unsigned short} and @code{unsigned char} promote
845 to @code{unsigned int}.
848 Out-of-range floating point literals are not an error.
851 Certain constructs which ANSI regards as a single invalid preprocessing
852 number, such as @samp{0xe-0xd}, are treated as expressions instead.
855 String ``constants'' are not necessarily constant; they are stored in
856 writable space, and identical looking constants are allocated
857 separately. (This is the same as the effect of
858 @samp{-fwritable-strings}.)
860 @cindex @code{longjmp} and automatic variables
862 All automatic variables not declared @code{register} are preserved by
863 @code{longjmp}. Ordinarily, GNU C follows ANSI C: automatic variables
864 not declared @code{volatile} may be clobbered.
869 @cindex escape sequences, traditional
870 The character escape sequences @samp{\x} and @samp{\a} evaluate as the
871 literal characters @samp{x} and @samp{a} respectively. Without
872 @w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal
873 representation of a character, and @samp{\a} produces a bell.
876 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
877 if your program uses names that are normally GNU C builtin functions for
878 other purposes of its own.
880 You cannot use @samp{-traditional} if you include any header files that
881 rely on ANSI C features. Some vendors are starting to ship systems with
882 ANSI C header files and you cannot use @samp{-traditional} on such
883 systems to compile files that include any system headers.
885 The @samp{-traditional} option also enables @samp{-traditional-cpp},
886 which is described next.
888 @item -traditional-cpp
889 Attempt to support some aspects of traditional C preprocessors.
894 Comments convert to nothing at all, rather than to a space. This allows
895 traditional token concatenation.
898 In a preprocessing directive, the @samp{#} symbol must appear as the first
902 Macro arguments are recognized within string constants in a macro
903 definition (and their values are stringified, though without additional
904 quote marks, when they appear in such a context). The preprocessor
905 always considers a string constant to end at a newline.
908 @cindex detecting @w{@samp{-traditional}}
909 The predefined macro @code{__STDC__} is not defined when you use
910 @samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions
911 which @code{__GNUC__} indicates are not affected by
912 @samp{-traditional}). If you need to write header files that work
913 differently depending on whether @samp{-traditional} is in use, by
914 testing both of these predefined macros you can distinguish four
915 situations: GNU C, traditional GNU C, other ANSI C compilers, and other
916 old C compilers. The predefined macro @code{__STDC_VERSION__} is also
917 not defined when you use @samp{-traditional}. @xref{Standard
918 Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
919 for more discussion of these and other predefined macros.
922 @cindex string constants vs newline
923 @cindex newline vs string constants
924 The preprocessor considers a string constant to end at a newline (unless
925 the newline is escaped with @samp{\}). (Without @w{@samp{-traditional}},
926 string constants can contain the newline character as typed.)
929 @item -fcond-mismatch
930 Allow conditional expressions with mismatched types in the second and
931 third arguments. The value of such an expression is void.
933 @item -funsigned-char
934 Let the type @code{char} be unsigned, like @code{unsigned char}.
936 Each kind of machine has a default for what @code{char} should
937 be. It is either like @code{unsigned char} by default or like
938 @code{signed char} by default.
940 Ideally, a portable program should always use @code{signed char} or
941 @code{unsigned char} when it depends on the signedness of an object.
942 But many programs have been written to use plain @code{char} and
943 expect it to be signed, or expect it to be unsigned, depending on the
944 machines they were written for. This option, and its inverse, let you
945 make such a program work with the opposite default.
947 The type @code{char} is always a distinct type from each of
948 @code{signed char} or @code{unsigned char}, even though its behavior
949 is always just like one of those two.
952 Let the type @code{char} be signed, like @code{signed char}.
954 Note that this is equivalent to @samp{-fno-unsigned-char}, which is
955 the negative form of @samp{-funsigned-char}. Likewise, the option
956 @samp{-fno-signed-char} is equivalent to @samp{-funsigned-char}.
958 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
959 if your program uses names that are normally GNU C builtin functions for
960 other purposes of its own.
962 You cannot use @samp{-traditional} if you include any header files that
963 rely on ANSI C features. Some vendors are starting to ship systems with
964 ANSI C header files and you cannot use @samp{-traditional} on such
965 systems to compile files that include any system headers.
967 @item -fsigned-bitfields
968 @itemx -funsigned-bitfields
969 @itemx -fno-signed-bitfields
970 @itemx -fno-unsigned-bitfields
971 These options control whether a bitfield is signed or unsigned, when the
972 declaration does not use either @code{signed} or @code{unsigned}. By
973 default, such a bitfield is signed, because this is consistent: the
974 basic integer types such as @code{int} are signed types.
976 However, when @samp{-traditional} is used, bitfields are all unsigned
979 @item -fwritable-strings
980 Store string constants in the writable data segment and don't uniquize
981 them. This is for compatibility with old programs which assume they can
982 write into string constants. The option @samp{-traditional} also has
985 Writing into string constants is a very bad idea; ``constants'' should
988 @item -fallow-single-precision
989 Do not promote single precision math operations to double precision,
990 even when compiling with @samp{-traditional}.
992 Traditional K&R C promotes all floating point operations to double
993 precision, regardless of the sizes of the operands. On the
994 architecture for which you are compiling, single precision may be faster
995 than double precision. If you must use @samp{-traditional}, but want
996 to use single precision operations when the operands are single
997 precision, use this option. This option has no effect when compiling
998 with ANSI or GNU C conventions (the default).
1001 Override the underlying type for @samp{wchar_t} to be @samp{short
1002 unsigned int} instead of the default for the target. This option is
1003 useful for building programs to run under WINE.
1006 @node C++ Dialect Options
1007 @section Options Controlling C++ Dialect
1009 @cindex compiler options, C++
1010 @cindex C++ options, command line
1011 @cindex options, C++
1012 This section describes the command-line options that are only meaningful
1013 for C++ programs; but you can also use most of the GNU compiler options
1014 regardless of what language your program is in. For example, you
1015 might compile a file @code{firstClass.C} like this:
1018 g++ -g -frepo -O -c firstClass.C
1022 In this example, only @samp{-frepo} is an option meant
1023 only for C++ programs; you can use the other options with any
1024 language supported by GCC.
1026 Here is a list of options that are @emph{only} for compiling C++ programs:
1029 @item -fno-access-control
1030 Turn off all access checking. This switch is mainly useful for working
1031 around bugs in the access control code.
1034 Check that the pointer returned by @code{operator new} is non-null
1035 before attempting to modify the storage allocated. The current Working
1036 Paper requires that @code{operator new} never return a null pointer, so
1037 this check is normally unnecessary.
1039 An alternative to using this option is to specify that your
1040 @code{operator new} does not throw any exceptions; if you declare it
1041 @samp{throw()}, g++ will check the return value. See also @samp{new
1044 @item -fconserve-space
1045 Put uninitialized or runtime-initialized global variables into the
1046 common segment, as C does. This saves space in the executable at the
1047 cost of not diagnosing duplicate definitions. If you compile with this
1048 flag and your program mysteriously crashes after @code{main()} has
1049 completed, you may have an object that is being destroyed twice because
1050 two definitions were merged.
1052 This option is no longer useful on most targets, now that support has
1053 been added for putting variables into BSS without making them common.
1055 @item -fdollars-in-identifiers
1056 Accept @samp{$} in identifiers. You can also explicitly prohibit use of
1057 @samp{$} with the option @samp{-fno-dollars-in-identifiers}. (GNU C allows
1058 @samp{$} by default on most target systems, but there are a few exceptions.)
1059 Traditional C allowed the character @samp{$} to form part of
1060 identifiers. However, ANSI C and C++ forbid @samp{$} in identifiers.
1062 @item -fno-elide-constructors
1063 The C++ standard allows an implementation to omit creating a temporary
1064 which is only used to initialize another object of the same type.
1065 Specifying this option disables that optimization, and forces g++ to
1066 call the copy constructor in all cases.
1068 @item -fno-enforce-eh-specs
1069 Don't check for violation of exception specifications at runtime. This
1070 option violates the C++ standard, but may be useful for reducing code
1071 size in production builds, much like defining @samp{NDEBUG}. The compiler
1072 will still optimize based on the exception specifications.
1074 @item -fexternal-templates
1075 Cause template instantiations to obey @samp{#pragma interface} and
1076 @samp{implementation}; template instances are emitted or not according
1077 to the location of the template definition. @xref{Template
1078 Instantiation}, for more information.
1080 This option is deprecated.
1082 @item -falt-external-templates
1083 Similar to -fexternal-templates, but template instances are emitted or
1084 not according to the place where they are first instantiated.
1085 @xref{Template Instantiation}, for more information.
1087 This option is deprecated.
1090 @itemx -fno-for-scope
1091 If -ffor-scope is specified, the scope of variables declared in
1092 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1093 as specified by the draft C++ standard.
1094 If -fno-for-scope is specified, the scope of variables declared in
1095 a @i{for-init-statement} extends to the end of the enclosing scope,
1096 as was the case in old versions of gcc, and other (traditional)
1097 implementations of C++.
1099 The default if neither flag is given to follow the standard,
1100 but to allow and give a warning for old-style code that would
1101 otherwise be invalid, or have different behavior.
1103 @item -fno-gnu-keywords
1104 Do not recognize @code{classof}, @code{headof}, or @code{typeof} as a
1105 keyword, so that code can use these words as identifiers. You can use
1106 the keywords @code{__classof__}, @code{__headof__}, and
1107 @code{__typeof__} instead. @samp{-ansi} implies
1108 @samp{-fno-gnu-keywords}.
1110 @item -fguiding-decls
1111 Treat a function declaration with the same type as a potential function
1112 template instantiation as though it declares that instantiation, not a
1113 normal function. If a definition is given for the function later in the
1114 translation unit (or another translation unit if the target supports
1115 weak symbols), that definition will be used; otherwise the template will
1116 be instantiated. This behavior reflects the C++ language prior to
1117 September 1996, when guiding declarations were removed.
1119 This option implies @samp{-fname-mangling-version-0}, and will not work
1120 with other name mangling versions. Like all options that change the
1121 ABI, all C++ code, @emph{including libgcc.a} must be built with the same
1122 setting of this option.
1125 Treat the @code{namespace std} as a namespace, instead of ignoring
1126 it. For compatibility with earlier versions of g++, the compiler will,
1127 by default, ignore @code{namespace-declarations},
1128 @code{using-declarations}, @code{using-directives}, and
1129 @code{namespace-names}, if they involve @code{std}.
1131 @item -fhuge-objects
1132 Support virtual function calls for objects that exceed the size
1133 representable by a @samp{short int}. Users should not use this flag by
1134 default; if you need to use it, the compiler will tell you so.
1136 This flag is not useful when compiling with -fvtable-thunks.
1138 Like all options that change the ABI, all C++ code, @emph{including
1139 libgcc} must be built with the same setting of this option.
1141 @item -fmessage-length=@var{n}
1142 Try to format error messages so that they fit on lines of about @var{n}
1143 characters. The default is 72 characters. If @var{n} is zero, then no
1144 line-wrapping will be done; each error message will appear on a single
1147 @item -fno-implicit-templates
1148 Never emit code for non-inline templates which are instantiated
1149 implicitly (i.e. by use); only emit code for explicit instantiations.
1150 @xref{Template Instantiation}, for more information.
1152 @item -fno-implicit-inline-templates
1153 Don't emit code for implicit instantiations of inline templates, either.
1154 The default is to handle inlines differently so that compiles with and
1155 without optimization will need the same set of explicit instantiations.
1157 @item -finit-priority
1158 Support @samp{__attribute__ ((init_priority (n)))} for controlling the
1159 order of initialization of file-scope objects. On ELF targets, this
1160 requires GNU ld 2.10 or later.
1162 @item -fno-implement-inlines
1163 To save space, do not emit out-of-line copies of inline functions
1164 controlled by @samp{#pragma implementation}. This will cause linker
1165 errors if these functions are not inlined everywhere they are called.
1167 @item -fms-extensions
1168 Disable pedwarns about constructs used in MFC, such as implicit int and
1169 getting a pointer to member function via non-standard syntax.
1171 @item -fname-mangling-version-@var{n}
1172 Control the way in which names are mangled. Version 0 is compatible
1173 with versions of g++ before 2.8. Version 1 is the default. Version 1
1174 will allow correct mangling of function templates. For example,
1175 version 0 mangling does not mangle foo<int, double> and foo<int, char>
1176 given this declaration:
1179 template <class T, class U> void foo(T t);
1182 Like all options that change the ABI, all C++ code, @emph{including
1183 libgcc} must be built with the same setting of this option.
1185 @item -foperator-names
1186 Recognize the operator name keywords @code{and}, @code{bitand},
1187 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1188 synonyms for the symbols they refer to. @samp{-ansi} implies
1189 @samp{-foperator-names}.
1191 @item -fno-optional-diags
1192 Disable diagnostics that the standard says a compiler does not need to
1193 issue. Currently, the only such diagnostic issued by g++ is the one for
1194 a name having multiple meanings within a class.
1197 Downgrade messages about nonconformant code from errors to warnings. By
1198 default, g++ effectively sets @samp{-pedantic-errors} without
1199 @samp{-pedantic}; this option reverses that. This behavior and this
1200 option are superseded by @samp{-pedantic}, which works as it does for GNU C.
1203 Enable automatic template instantiation. This option also implies
1204 @samp{-fno-implicit-templates}. @xref{Template Instantiation}, for more
1208 Disable generation of information about every class with virtual
1209 functions for use by the C++ runtime type identification features
1210 (@samp{dynamic_cast} and @samp{typeid}). If you don't use those parts
1211 of the language, you can save some space by using this flag. Note that
1212 exception handling uses the same information, but it will generate it as
1215 @item -fstrict-prototype
1216 Within an @samp{extern "C"} linkage specification, treat a function
1217 declaration with no arguments, such as @samp{int foo ();}, as declaring
1218 the function to take no arguments. Normally, such a declaration means
1219 that the function @code{foo} can take any combination of arguments, as
1220 in C. @samp{-pedantic} implies @samp{-fstrict-prototype} unless
1221 overridden with @samp{-fno-strict-prototype}.
1223 Specifying this option will also suppress implicit declarations of
1226 This flag no longer affects declarations with C++ linkage.
1229 @itemx -fno-squangle
1230 @samp{-fsquangle} will enable a compressed form of name mangling for
1231 identifiers. In particular, it helps to shorten very long names by recognizing
1232 types and class names which occur more than once, replacing them with special
1233 short ID codes. This option also requires any C++ libraries being used to
1234 be compiled with this option as well. The compiler has this disabled (the
1235 equivalent of @samp{-fno-squangle}) by default.
1237 Like all options that change the ABI, all C++ code, @emph{including
1238 libgcc.a} must be built with the same setting of this option.
1240 @item -ftemplate-depth-@var{n}
1241 Set the maximum instantiation depth for template classes to @var{n}.
1242 A limit on the template instantiation depth is needed to detect
1243 endless recursions during template class instantiation. ANSI/ISO C++
1244 conforming programs must not rely on a maximum depth greater than 17.
1246 @item -fuse-cxa-atexit
1247 Register destructors for objects with static storage duration with the
1248 @code{__cxa_atexit} function rather than the @code{atexit} function.
1249 This option is required for fully standards-compliant handling of static
1250 destructors, but will only work if your C library supports
1251 @code{__cxa_atexit}.
1253 @item -fvtable-thunks
1254 Use @samp{thunks} to implement the virtual function dispatch table
1255 (@samp{vtable}). The traditional (cfront-style) approach to
1256 implementing vtables was to store a pointer to the function and two
1257 offsets for adjusting the @samp{this} pointer at the call site. Newer
1258 implementations store a single pointer to a @samp{thunk} function which
1259 does any necessary adjustment and then calls the target function.
1261 This option also enables a heuristic for controlling emission of
1262 vtables; if a class has any non-inline virtual functions, the vtable
1263 will be emitted in the translation unit containing the first one of
1266 Like all options that change the ABI, all C++ code, @emph{including
1267 libgcc.a} must be built with the same setting of this option.
1270 Do not search for header files in the standard directories specific to
1271 C++, but do still search the other standard directories. (This option
1272 is used when building the C++ library.)
1275 In addition, these optimization, warning, and code generation options
1276 have meanings only for C++ programs:
1279 @item -fno-default-inline
1280 Do not assume @samp{inline} for functions defined inside a class scope.
1281 @xref{Optimize Options,,Options That Control Optimization}. Note that these
1282 functions will have linkage like inline functions; they just won't be
1285 @item -Wctor-dtor-privacy (C++ only)
1286 Warn when a class seems unusable, because all the constructors or
1287 destructors in a class are private and the class has no friends or
1288 public static member functions.
1290 @item -Wnon-virtual-dtor (C++ only)
1291 Warn when a class declares a non-virtual destructor that should probably
1292 be virtual, because it looks like the class will be used polymorphically.
1294 @item -Wreorder (C++ only)
1295 @cindex reordering, warning
1296 @cindex warning for reordering of member initializers
1297 Warn when the order of member initializers given in the code does not
1298 match the order in which they must be executed. For instance:
1304 A(): j (0), i (1) @{ @}
1308 Here the compiler will warn that the member initializers for @samp{i}
1309 and @samp{j} will be rearranged to match the declaration order of the
1313 The following @samp{-W@dots{}} options are not affected by @samp{-Wall}.
1316 @item -Weffc++ (C++ only)
1317 Warn about violations of various style guidelines from Scott Meyers'
1318 @cite{Effective C++} books. If you use this option, you should be aware
1319 that the standard library headers do not obey all of these guidelines;
1320 you can use @samp{grep -v} to filter out those warnings.
1322 @item -Wno-deprecated (C++ only)
1323 Do not warn about usage of deprecated features. @xref{Deprecated Features}.
1325 @item -Wno-non-template-friend (C++ only)
1326 Disable warnings when non-templatized friend functions are declared
1327 within a template. With the advent of explicit template specification
1328 support in g++, if the name of the friend is an unqualified-id (ie,
1329 @samp{friend foo(int)}), the C++ language specification demands that the
1330 friend declare or define an ordinary, nontemplate function. (Section
1331 14.5.3). Before g++ implemented explicit specification, unqualified-ids
1332 could be interpreted as a particular specialization of a templatized
1333 function. Because this non-conforming behavior is no longer the default
1334 behavior for g++, @samp{-Wnon-template-friend} allows the compiler to
1335 check existing code for potential trouble spots, and is on by default.
1336 This new compiler behavior can also be turned off with the flag
1337 @samp{-fguiding-decls}, which activates the older, non-specification
1338 compiler code, or with @samp{-Wno-non-template-friend} which keeps the
1339 conformant compiler code but disables the helpful warning.
1341 @item -Wold-style-cast (C++ only)
1342 Warn if an old-style (C-style) cast is used within a C++ program. The
1343 new-style casts (@samp{static_cast}, @samp{reinterpret_cast}, and
1344 @samp{const_cast}) are less vulnerable to unintended effects.
1346 @item -Woverloaded-virtual (C++ only)
1347 @cindex overloaded virtual fn, warning
1348 @cindex warning for overloaded virtual fn
1349 Warn when a derived class function declaration may be an error in
1350 defining a virtual function. In a derived class, the
1351 definitions of virtual functions must match the type signature of a
1352 virtual function declared in the base class. With this option, the
1353 compiler warns when you define a function with the same name as a
1354 virtual function, but with a type signature that does not match any
1355 declarations from the base class.
1357 @item -Wno-pmf-conversions (C++ only)
1358 Disable the diagnostic for converting a bound pointer to member function
1361 @item -Wsign-promo (C++ only)
1362 Warn when overload resolution chooses a promotion from unsigned or
1363 enumeral type to a signed type over a conversion to an unsigned type of
1364 the same size. Previous versions of g++ would try to preserve
1365 unsignedness, but the standard mandates the current behavior.
1367 @item -Wsynth (C++ only)
1368 @cindex warning for synthesized methods
1369 @cindex synthesized methods, warning
1370 Warn when g++'s synthesis behavior does not match that of cfront. For
1376 A& operator = (int);
1386 In this example, g++ will synthesize a default @samp{A& operator =
1387 (const A&);}, while cfront will use the user-defined @samp{operator =}.
1390 @node Warning Options
1391 @section Options to Request or Suppress Warnings
1392 @cindex options to control warnings
1393 @cindex warning messages
1394 @cindex messages, warning
1395 @cindex suppressing warnings
1397 Warnings are diagnostic messages that report constructions which
1398 are not inherently erroneous but which are risky or suggest there
1399 may have been an error.
1401 You can request many specific warnings with options beginning @samp{-W},
1402 for example @samp{-Wimplicit} to request warnings on implicit
1403 declarations. Each of these specific warning options also has a
1404 negative form beginning @samp{-Wno-} to turn off warnings;
1405 for example, @samp{-Wno-implicit}. This manual lists only one of the
1406 two forms, whichever is not the default.
1408 These options control the amount and kinds of warnings produced by GCC:
1411 @cindex syntax checking
1413 Check the code for syntax errors, but don't do anything beyond that.
1416 Issue all the warnings demanded by strict ANSI C and ISO C++;
1417 reject all programs that use forbidden extensions.
1419 Valid ANSI C and ISO C++ programs should compile properly with or without
1420 this option (though a rare few will require @samp{-ansi}). However,
1421 without this option, certain GNU extensions and traditional C and C++
1422 features are supported as well. With this option, they are rejected.
1424 @samp{-pedantic} does not cause warning messages for use of the
1425 alternate keywords whose names begin and end with @samp{__}. Pedantic
1426 warnings are also disabled in the expression that follows
1427 @code{__extension__}. However, only system header files should use
1428 these escape routes; application programs should avoid them.
1429 @xref{Alternate Keywords}.
1431 This option is not intended to be @i{useful}; it exists only to satisfy
1432 pedants who would otherwise claim that GCC fails to support the ANSI
1435 Some users try to use @samp{-pedantic} to check programs for strict ANSI
1436 C conformance. They soon find that it does not do quite what they want:
1437 it finds some non-ANSI practices, but not all---only those for which
1438 ANSI C @emph{requires} a diagnostic.
1440 A feature to report any failure to conform to ANSI C might be useful in
1441 some instances, but would require considerable additional work and would
1442 be quite different from @samp{-pedantic}. We don't have plans to
1443 support such a feature in the near future.
1445 @item -pedantic-errors
1446 Like @samp{-pedantic}, except that errors are produced rather than
1450 Inhibit all warning messages.
1453 Inhibit warning messages about the use of @samp{#import}.
1455 @item -Wchar-subscripts
1456 Warn if an array subscript has type @code{char}. This is a common cause
1457 of error, as programmers often forget that this type is signed on some
1461 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
1462 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
1465 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
1466 the arguments supplied have types appropriate to the format string
1469 @item -Wimplicit-int
1470 Warn when a declaration does not specify a type.
1472 @item -Wimplicit-function-declaration
1473 @itemx -Werror-implicit-function-declaration
1474 Give a warning (or error) whenever a function is used before being
1478 Same as @samp{-Wimplicit-int} and @samp{-Wimplicit-function-}@*
1482 Warn if the type of @samp{main} is suspicious. @samp{main} should be a
1483 function with external linkage, returning int, taking either zero
1484 arguments, two, or three arguments of appropriate types.
1487 Warn if a multicharacter constant (@samp{'FOOF'}) is used. Usually they
1488 indicate a typo in the user's code, as they have implementation-defined
1489 values, and should not be used in portable code.
1492 Warn if parentheses are omitted in certain contexts, such
1493 as when there is an assignment in a context where a truth value
1494 is expected, or when operators are nested whose precedence people
1495 often get confused about.
1497 Also warn about constructions where there may be confusion to which
1498 @code{if} statement an @code{else} branch belongs. Here is an example of
1511 In C, every @code{else} branch belongs to the innermost possible @code{if}
1512 statement, which in this example is @code{if (b)}. This is often not
1513 what the programmer expected, as illustrated in the above example by
1514 indentation the programmer chose. When there is the potential for this
1515 confusion, GNU C will issue a warning when this flag is specified.
1516 To eliminate the warning, add explicit braces around the innermost
1517 @code{if} statement so there is no way the @code{else} could belong to
1518 the enclosing @code{if}. The resulting code would look like this:
1533 Warn whenever a function is defined with a return-type that defaults
1534 to @code{int}. Also warn about any @code{return} statement with no
1535 return-value in a function whose return-type is not @code{void}.
1538 Warn whenever a @code{switch} statement has an index of enumeral type
1539 and lacks a @code{case} for one or more of the named codes of that
1540 enumeration. (The presence of a @code{default} label prevents this
1541 warning.) @code{case} labels outside the enumeration range also
1542 provoke warnings when this option is used.
1545 Warn if any trigraphs are encountered (assuming they are enabled).
1548 Warn whenever a variable is unused aside from its declaration,
1549 whenever a function is declared static but never defined, whenever a
1550 label is declared but not used, and whenever a statement computes a
1551 result that is explicitly not used.
1553 In order to get a warning about an unused function parameter, you must
1554 specify both @samp{-W} and @samp{-Wunused}.
1556 To suppress this warning for an expression, simply cast it to void. For
1557 unused variables, parameters and labels, use the @samp{unused} attribute
1558 (@pxref{Variable Attributes}).
1560 @item -Wuninitialized
1561 Warn if an automatic variable is used without first being initialized or
1562 if a variable may be clobbered by a @code{setjmp} call.
1564 These warnings are possible only in optimizing compilation,
1565 because they require data flow information that is computed only
1566 when optimizing. If you don't specify @samp{-O}, you simply won't
1569 These warnings occur only for variables that are candidates for
1570 register allocation. Therefore, they do not occur for a variable that
1571 is declared @code{volatile}, or whose address is taken, or whose size
1572 is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
1573 structures, unions or arrays, even when they are in registers.
1575 Note that there may be no warning about a variable that is used only
1576 to compute a value that itself is never used, because such
1577 computations may be deleted by data flow analysis before the warnings
1580 These warnings are made optional because GCC is not smart
1581 enough to see all the reasons why the code might be correct
1582 despite appearing to have an error. Here is one example of how
1601 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
1602 always initialized, but GCC doesn't know this. Here is
1603 another common case:
1608 if (change_y) save_y = y, y = new_y;
1610 if (change_y) y = save_y;
1615 This has no bug because @code{save_y} is used only if it is set.
1617 @cindex @code{longjmp} warnings
1618 This option also warns when a nonvolatile automatic variable might be
1619 changed by a call to @code{longjmp}. These warnings as well are possible
1620 only in optimizing compilation.
1622 The compiler sees only the calls to @code{setjmp}. It cannot know
1623 where @code{longjmp} will be called; in fact, a signal handler could
1624 call it at any point in the code. As a result, you may get a warning
1625 even when there is in fact no problem because @code{longjmp} cannot
1626 in fact be called at the place which would cause a problem.
1628 Some spurious warnings can be avoided if you declare all the functions
1629 you use that never return as @code{noreturn}. @xref{Function
1632 @item -Wreorder (C++ only)
1633 @cindex reordering, warning
1634 @cindex warning for reordering of member initializers
1635 Warn when the order of member initializers given in the code does not
1636 match the order in which they must be executed. For instance:
1638 @item -Wunknown-pragmas
1639 @cindex warning for unknown pragmas
1640 @cindex unknown pragmas, warning
1641 @cindex pragmas, warning of unknown
1642 Warn when a #pragma directive is encountered which is not understood by
1643 GCC. If this command line option is used, warnings will even be issued
1644 for unknown pragmas in system header files. This is not the case if
1645 the warnings were only enabled by the @samp{-Wall} command line option.
1648 All of the above @samp{-W} options combined. This enables all the
1649 warnings about constructions that some users consider questionable, and
1650 that are easy to avoid (or modify to prevent the warning), even in
1651 conjunction with macros.
1654 The following @samp{-W@dots{}} options are not implied by @samp{-Wall}.
1655 Some of them warn about constructions that users generally do not
1656 consider questionable, but which occasionally you might wish to check
1657 for; others warn about constructions that are necessary or hard to avoid
1658 in some cases, and there is no simple way to modify the code to suppress
1663 Print extra warning messages for these events:
1667 A function can return either with or without a value. (Falling
1668 off the end of the function body is considered returning without
1669 a value.) For example, this function would evoke such a
1683 An expression-statement or the left-hand side of a comma expression
1684 contains no side effects.
1685 To suppress the warning, cast the unused expression to void.
1686 For example, an expression such as @samp{x[i,j]} will cause a warning,
1687 but @samp{x[(void)i,j]} will not.
1690 An unsigned value is compared against zero with @samp{<} or @samp{<=}.
1693 A comparison like @samp{x<=y<=z} appears; this is equivalent to
1694 @samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
1695 that of ordinary mathematical notation.
1698 Storage-class specifiers like @code{static} are not the first things in
1699 a declaration. According to the C Standard, this usage is obsolescent.
1702 If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
1706 A comparison between signed and unsigned values could produce an
1707 incorrect result when the signed value is converted to unsigned.
1708 (But don't warn if @samp{-Wno-sign-compare} is also specified.)
1711 An aggregate has a partly bracketed initializer.
1712 For example, the following code would evoke such a warning,
1713 because braces are missing around the initializer for @code{x.h}:
1716 struct s @{ int f, g; @};
1717 struct t @{ struct s h; int i; @};
1718 struct t x = @{ 1, 2, 3 @};
1722 An aggregate has an initializer which does not initialize all members.
1723 For example, the following code would cause such a warning, because
1724 @code{x.h} would be implicitly initialized to zero:
1727 struct s @{ int f, g, h; @};
1728 struct s x = @{ 3, 4 @};
1733 Warn if floating point values are used in equality comparisons.
1735 The idea behind this is that sometimes it is convenient (for the
1736 programmer) to consider floating-point values as approximations to
1737 infinitely precise real numbers. If you are doing this, then you need
1738 to compute (by analysing the code, or in some other way) the maximum or
1739 likely maximum error that the computation introduces, and allow for it
1740 when performing comparisons (and when producing output, but that's a
1741 different problem). In particular, instead of testing for equality, you
1742 would check to see whether the two values have ranges that overlap; and
1743 this is done with the relational operators, so equality comparisons are
1746 @item -Wtraditional (C only)
1747 Warn about certain constructs that behave differently in traditional and
1752 Macro arguments occurring within string constants in the macro body.
1753 These would substitute the argument in traditional C, but are part of
1754 the constant in ANSI C.
1757 A function declared external in one block and then used after the end of
1761 A @code{switch} statement has an operand of type @code{long}.
1764 A non-@code{static} function declaration follows a @code{static} one.
1765 This construct is not accepted by some traditional C compilers.
1768 The ANSI type of an integer constant has a different width or
1769 signedness from its traditional type. This warning is only issued if
1770 the base of the constant is ten. I.e. hexadecimal or octal values, which
1771 typically represent bit patterns, are not warned about.
1774 Usage of ANSI string concatenation is detected.
1778 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
1781 Warn whenever a local variable shadows another local variable.
1783 @item -Wid-clash-@var{len}
1784 Warn whenever two distinct identifiers match in the first @var{len}
1785 characters. This may help you prepare a program that will compile
1786 with certain obsolete, brain-damaged compilers.
1788 @item -Wlarger-than-@var{len}
1789 Warn whenever an object of larger than @var{len} bytes is defined.
1791 @item -Wpointer-arith
1792 Warn about anything that depends on the ``size of'' a function type or
1793 of @code{void}. GNU C assigns these types a size of 1, for
1794 convenience in calculations with @code{void *} pointers and pointers
1797 @item -Wbad-function-cast (C only)
1798 Warn whenever a function call is cast to a non-matching type.
1799 For example, warn if @code{int malloc()} is cast to @code{anything *}.
1802 Warn whenever a pointer is cast so as to remove a type qualifier from
1803 the target type. For example, warn if a @code{const char *} is cast
1804 to an ordinary @code{char *}.
1807 Warn whenever a pointer is cast such that the required alignment of the
1808 target is increased. For example, warn if a @code{char *} is cast to
1809 an @code{int *} on machines where integers can only be accessed at
1810 two- or four-byte boundaries.
1812 @item -Wwrite-strings
1813 Give string constants the type @code{const char[@var{length}]} so that
1814 copying the address of one into a non-@code{const} @code{char *}
1815 pointer will get a warning. These warnings will help you find at
1816 compile time code that can try to write into a string constant, but
1817 only if you have been very careful about using @code{const} in
1818 declarations and prototypes. Otherwise, it will just be a nuisance;
1819 this is why we did not make @samp{-Wall} request these warnings.
1822 Warn if a prototype causes a type conversion that is different from what
1823 would happen to the same argument in the absence of a prototype. This
1824 includes conversions of fixed point to floating and vice versa, and
1825 conversions changing the width or signedness of a fixed point argument
1826 except when the same as the default promotion.
1828 Also, warn if a negative integer constant expression is implicitly
1829 converted to an unsigned type. For example, warn about the assignment
1830 @code{x = -1} if @code{x} is unsigned. But do not warn about explicit
1831 casts like @code{(unsigned) -1}.
1833 @item -Wsign-compare
1834 @cindex warning for comparison of signed and unsigned values
1835 @cindex comparison of signed and unsigned values, warning
1836 @cindex signed and unsigned values, comparison warning
1837 Warn when a comparison between signed and unsigned values could produce
1838 an incorrect result when the signed value is converted to unsigned.
1839 This warning is also enabled by @samp{-W}; to get the other warnings
1840 of @samp{-W} without this warning, use @samp{-W -Wno-sign-compare}.
1842 @item -Waggregate-return
1843 Warn if any functions that return structures or unions are defined or
1844 called. (In languages where you can return an array, this also elicits
1847 @item -Wstrict-prototypes (C only)
1848 Warn if a function is declared or defined without specifying the
1849 argument types. (An old-style function definition is permitted without
1850 a warning if preceded by a declaration which specifies the argument
1853 @item -Wmissing-prototypes (C only)
1854 Warn if a global function is defined without a previous prototype
1855 declaration. This warning is issued even if the definition itself
1856 provides a prototype. The aim is to detect global functions that fail
1857 to be declared in header files.
1859 @item -Wmissing-declarations
1860 Warn if a global function is defined without a previous declaration.
1861 Do so even if the definition itself provides a prototype.
1862 Use this option to detect global functions that are not declared in
1865 @item -Wmissing-noreturn
1866 Warn about functions which might be candidates for attribute @code{noreturn}.
1867 Note these are only possible candidates, not absolute ones. Care should
1868 be taken to manually verify functions actually do not ever return before
1869 adding the @code{noreturn} attribute, otherwise subtle code generation
1870 bugs could be introduced.
1873 Warn if a structure is given the packed attribute, but the packed
1874 attribute has no effect on the layout or size of the structure.
1875 Such structures may be mis-aligned for little benefit. For
1876 instance, in this code, the variable @code{f.x} in @code{struct bar}
1877 will be misaligned even though @code{struct bar} does not itself
1878 have the packed attribute:
1885 @} __attribute__((packed));
1894 Warn if padding is included in a structure, either to align an element
1895 of the structure or to align the whole structure. Sometimes when this
1896 happens it is possible to rearrange the fields of the structure to
1897 reduce the padding and so make the structure smaller.
1899 @item -Wredundant-decls
1900 Warn if anything is declared more than once in the same scope, even in
1901 cases where multiple declaration is valid and changes nothing.
1903 @item -Wnested-externs (C only)
1904 Warn if an @code{extern} declaration is encountered within a function.
1906 @item -Wunreachable-code
1907 Warn if the compiler detects that code will never be executed.
1909 This option is intended to warn when the compiler detects that at
1910 least a whole line of source code will never be executed, because
1911 some condition is never satisfied or because it is after a
1912 procedure that never returns.
1914 It is possible for this option to produce a warning even though there
1915 are circumstances under which part of the affected line can be executed,
1916 so care should be taken when removing apparently-unreachable code.
1918 For instance, when a function is inlined, a warning may mean that the
1919 line is unreachable in only one inlined copy of the function.
1921 This option is not made part of @samp{-Wall} because in a debugging
1922 version of a program there is often substantial code which checks
1923 correct functioning of the program and is, hopefully, unreachable
1924 because the program does work. Another common use of unreachable
1925 code is to provide behaviour which is selectable at compile-time.
1928 Warn if a function can not be inlined and it was declared as inline.
1931 Warn if @samp{long long} type is used. This is default. To inhibit
1932 the warning messages, use @samp{-Wno-long-long}. Flags
1933 @samp{-Wlong-long} and @samp{-Wno-long-long} are taken into account
1934 only when @samp{-pedantic} flag is used.
1937 Make all warnings into errors.
1940 @node Debugging Options
1941 @section Options for Debugging Your Program or GCC
1942 @cindex options, debugging
1943 @cindex debugging information options
1945 GCC has various special options that are used for debugging
1946 either your program or GCC:
1950 Produce debugging information in the operating system's native format
1951 (stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
1954 On most systems that use stabs format, @samp{-g} enables use of extra
1955 debugging information that only GDB can use; this extra information
1956 makes debugging work better in GDB but will probably make other debuggers
1958 refuse to read the program. If you want to control for certain whether
1959 to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
1960 @samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf-1+}, or @samp{-gdwarf-1}
1963 Unlike most other C compilers, GCC allows you to use @samp{-g} with
1964 @samp{-O}. The shortcuts taken by optimized code may occasionally
1965 produce surprising results: some variables you declared may not exist
1966 at all; flow of control may briefly move where you did not expect it;
1967 some statements may not be executed because they compute constant
1968 results or their values were already at hand; some statements may
1969 execute in different places because they were moved out of loops.
1971 Nevertheless it proves possible to debug optimized output. This makes
1972 it reasonable to use the optimizer for programs that might have bugs.
1974 The following options are useful when GCC is generated with the
1975 capability for more than one debugging format.
1978 Produce debugging information for use by GDB. This means to use the
1979 most expressive format available (DWARF 2, stabs, or the native format
1980 if neither of those are supported), including GDB extensions if at all
1984 Produce debugging information in stabs format (if that is supported),
1985 without GDB extensions. This is the format used by DBX on most BSD
1986 systems. On MIPS, Alpha and System V Release 4 systems this option
1987 produces stabs debugging output which is not understood by DBX or SDB.
1988 On System V Release 4 systems this option requires the GNU assembler.
1991 Produce debugging information in stabs format (if that is supported),
1992 using GNU extensions understood only by the GNU debugger (GDB). The
1993 use of these extensions is likely to make other debuggers crash or
1994 refuse to read the program.
1997 Produce debugging information in COFF format (if that is supported).
1998 This is the format used by SDB on most System V systems prior to
2002 Produce debugging information in XCOFF format (if that is supported).
2003 This is the format used by the DBX debugger on IBM RS/6000 systems.
2006 Produce debugging information in XCOFF format (if that is supported),
2007 using GNU extensions understood only by the GNU debugger (GDB). The
2008 use of these extensions is likely to make other debuggers crash or
2009 refuse to read the program, and may cause assemblers other than the GNU
2010 assembler (GAS) to fail with an error.
2013 Produce debugging information in DWARF version 1 format (if that is
2014 supported). This is the format used by SDB on most System V Release 4
2018 Produce debugging information in DWARF version 1 format (if that is
2019 supported), using GNU extensions understood only by the GNU debugger
2020 (GDB). The use of these extensions is likely to make other debuggers
2021 crash or refuse to read the program.
2024 Produce debugging information in DWARF version 2 format (if that is
2025 supported). This is the format used by DBX on IRIX 6.
2028 @itemx -ggdb@var{level}
2029 @itemx -gstabs@var{level}
2030 @itemx -gcoff@var{level}
2031 @itemx -gxcoff@var{level}
2032 @itemx -gdwarf@var{level}
2033 @itemx -gdwarf-2@var{level}
2034 Request debugging information and also use @var{level} to specify how
2035 much information. The default level is 2.
2037 Level 1 produces minimal information, enough for making backtraces in
2038 parts of the program that you don't plan to debug. This includes
2039 descriptions of functions and external variables, but no information
2040 about local variables and no line numbers.
2042 Level 3 includes extra information, such as all the macro definitions
2043 present in the program. Some debuggers support macro expansion when
2048 Generate extra code to write profile information suitable for the
2049 analysis program @code{prof}. You must use this option when compiling
2050 the source files you want data about, and you must also use it when
2053 @cindex @code{gprof}
2055 Generate extra code to write profile information suitable for the
2056 analysis program @code{gprof}. You must use this option when compiling
2057 the source files you want data about, and you must also use it when
2062 Generate extra code to write profile information for basic blocks, which will
2063 record the number of times each basic block is executed, the basic block start
2064 address, and the function name containing the basic block. If @samp{-g} is
2065 used, the line number and filename of the start of the basic block will also be
2066 recorded. If not overridden by the machine description, the default action is
2067 to append to the text file @file{bb.out}.
2069 This data could be analyzed by a program like @code{tcov}. Note,
2070 however, that the format of the data is not what @code{tcov} expects.
2071 Eventually GNU @code{gprof} should be extended to process this data.
2074 Makes the compiler print out each function name as it is compiled, and
2075 print some statistics about each pass when it finishes.
2078 Generate extra code to profile basic blocks. Your executable will
2079 produce output that is a superset of that produced when @samp{-a} is
2080 used. Additional output is the source and target address of the basic
2081 blocks where a jump takes place, the number of times a jump is executed,
2082 and (optionally) the complete sequence of basic blocks being executed.
2083 The output is appended to file @file{bb.out}.
2085 You can examine different profiling aspects without recompilation. Your
2086 executable will read a list of function names from file @file{bb.in}.
2087 Profiling starts when a function on the list is entered and stops when
2088 that invocation is exited. To exclude a function from profiling, prefix
2089 its name with `-'. If a function name is not unique, you can
2090 disambiguate it by writing it in the form
2091 @samp{/path/filename.d:functionname}. Your executable will write the
2092 available paths and filenames in file @file{bb.out}.
2094 Several function names have a special meaning:
2097 Write source, target and frequency of jumps to file @file{bb.out}.
2098 @item __bb_hidecall__
2099 Exclude function calls from frequency count.
2100 @item __bb_showret__
2101 Include function returns in frequency count.
2103 Write the sequence of basic blocks executed to file @file{bbtrace.gz}.
2104 The file will be compressed using the program @samp{gzip}, which must
2105 exist in your @code{PATH}. On systems without the @samp{popen}
2106 function, the file will be named @file{bbtrace} and will not be
2107 compressed. @strong{Profiling for even a few seconds on these systems
2108 will produce a very large file.} Note: @code{__bb_hidecall__} and
2109 @code{__bb_showret__} will not affect the sequence written to
2113 Here's a short example using different profiling parameters
2114 in file @file{bb.in}. Assume function @code{foo} consists of basic blocks
2115 1 and 2 and is called twice from block 3 of function @code{main}. After
2116 the calls, block 3 transfers control to block 4 of @code{main}.
2118 With @code{__bb_trace__} and @code{main} contained in file @file{bb.in},
2119 the following sequence of blocks is written to file @file{bbtrace.gz}:
2120 0 3 1 2 1 2 4. The return from block 2 to block 3 is not shown, because
2121 the return is to a point inside the block and not to the top. The
2122 block address 0 always indicates, that control is transferred
2123 to the trace from somewhere outside the observed functions. With
2124 @samp{-foo} added to @file{bb.in}, the blocks of function
2125 @code{foo} are removed from the trace, so only 0 3 4 remains.
2127 With @code{__bb_jumps__} and @code{main} contained in file @file{bb.in},
2128 jump frequencies will be written to file @file{bb.out}. The
2129 frequencies are obtained by constructing a trace of blocks
2130 and incrementing a counter for every neighbouring pair of blocks
2131 in the trace. The trace 0 3 1 2 1 2 4 displays the following
2135 Jump from block 0x0 to block 0x3 executed 1 time(s)
2136 Jump from block 0x3 to block 0x1 executed 1 time(s)
2137 Jump from block 0x1 to block 0x2 executed 2 time(s)
2138 Jump from block 0x2 to block 0x1 executed 1 time(s)
2139 Jump from block 0x2 to block 0x4 executed 1 time(s)
2142 With @code{__bb_hidecall__}, control transfer due to call instructions
2143 is removed from the trace, that is the trace is cut into three parts: 0
2144 3 4, 0 1 2 and 0 1 2. With @code{__bb_showret__}, control transfer due
2145 to return instructions is added to the trace. The trace becomes: 0 3 1
2146 2 3 1 2 3 4. Note, that this trace is not the same, as the sequence
2147 written to @file{bbtrace.gz}. It is solely used for counting jump
2150 @item -fprofile-arcs
2151 Instrument @dfn{arcs} during compilation. For each function of your
2152 program, GCC creates a program flow graph, then finds a spanning tree
2153 for the graph. Only arcs that are not on the spanning tree have to be
2154 instrumented: the compiler adds code to count the number of times that these
2155 arcs are executed. When an arc is the only exit or only entrance to a
2156 block, the instrumentation code can be added to the block; otherwise, a
2157 new basic block must be created to hold the instrumentation code.
2159 Since not every arc in the program must be instrumented, programs
2160 compiled with this option run faster than programs compiled with
2161 @samp{-a}, which adds instrumentation code to every basic block in the
2162 program. The tradeoff: since @code{gcov} does not have
2163 execution counts for all branches, it must start with the execution
2164 counts for the instrumented branches, and then iterate over the program
2165 flow graph until the entire graph has been solved. Hence, @code{gcov}
2166 runs a little more slowly than a program which uses information from
2169 @samp{-fprofile-arcs} also makes it possible to estimate branch
2170 probabilities, and to calculate basic block execution counts. In
2171 general, basic block execution counts do not give enough information to
2172 estimate all branch probabilities. When the compiled program exits, it
2173 saves the arc execution counts to a file called
2174 @file{@var{sourcename}.da}. Use the compiler option
2175 @samp{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
2176 Control Optimization}) when recompiling, to optimize using estimated
2177 branch probabilities.
2180 @item -ftest-coverage
2181 Create data files for the @code{gcov} code-coverage utility
2182 (@pxref{Gcov,, @code{gcov}: a GCC Test Coverage Program}).
2183 The data file names begin with the name of your source file:
2186 @item @var{sourcename}.bb
2187 A mapping from basic blocks to line numbers, which @code{gcov} uses to
2188 associate basic block execution counts with line numbers.
2190 @item @var{sourcename}.bbg
2191 A list of all arcs in the program flow graph. This allows @code{gcov}
2192 to reconstruct the program flow graph, so that it can compute all basic
2193 block and arc execution counts from the information in the
2194 @code{@var{sourcename}.da} file (this last file is the output from
2195 @samp{-fprofile-arcs}).
2198 @item -d@var{letters}
2199 Says to make debugging dumps during compilation at times specified by
2200 @var{letters}. This is used for debugging the compiler. The file names
2201 for most of the dumps are made by appending a pass number and a word to
2202 the source file name (e.g. @file{foo.c.00.rtl} or @file{foo.c.01.jump}).
2203 Here are the possible letters for use in @var{letters}, and their meanings:
2207 Annotate the assembler output with miscellaneous debugging information.
2209 Dump after computing branch probabilities, to @file{@var{file}.07.bp}.
2211 Dump after instruction combination, to the file @file{@var{file}.09.combine}.
2213 Dump after delayed branch scheduling, to @file{@var{file}.19.dbr}.
2215 Dump all macro definitions, at the end of preprocessing, in addition to
2218 Dump after purging ADDRESSOF, to @file{@var{file}.03.addressof}.
2220 Dump after flow analysis, to @file{@var{file}.08.flow}.
2222 Dump after global register allocation, to @file{@var{file}.13.greg}.
2224 Dump after GCSE, to @file{@var{file}.04.gcse}.
2226 Dump after first jump optimization, to @file{@var{file}.01.jump}.
2228 Dump after last jump optimization, to @file{@var{file}.17.jump2}.
2230 Dump after conversion from registers to stack, to @file{@var{file}.20.stack}.
2232 Dump after local register allocation, to @file{@var{file}.12.lreg}.
2234 Dump after loop optimization, to @file{@var{file}.05.loop}.
2236 Dump after performing the machine dependent reorganisation pass, to
2237 @file{@var{file}.18.mach}.
2239 Dump after the register move pass, to @file{@var{file}.10.regmove}.
2241 Dump after RTL generation, to @file{@var{file}.00.rtl}.
2243 Dump after the second instruction scheduling pass, to
2244 @file{@var{file}.16.sched2}.
2246 Dump after CSE (including the jump optimization that sometimes follows
2247 CSE), to @file{@var{file}.02.cse}.
2249 Dump after the first instruction scheduling pass, to
2250 @file{@var{file}.11.sched}.
2252 Dump after the second CSE pass (including the jump optimization that
2253 sometimes follows CSE), to @file{@var{file}.06.cse2}.
2255 Produce all the dumps listed above.
2257 Print statistics on memory usage, at the end of the run, to
2260 Annotate the assembler output with a comment indicating which
2261 pattern and alternative was used. The length of each instruction is
2264 For each of the other indicated dump files (except for
2265 @file{@var{file}.00.rtl}), dump a representation of the control flow graph
2266 suitible for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
2268 Dump after the second flow pass to @file{@var{file}.14.flow2}.
2270 Just generate RTL for a function instead of compiling it. Usually used
2273 Dump debugging information during parsing, to standard error.
2275 Dump after the peephole2 pass to @file{@var{file}.15.peephole2}.
2278 @item -fdump-unnumbered
2279 When doing debugging dumps (see -d option above), suppress instruction
2280 numbers and line number note output. This makes it more feasible to
2281 use diff on debugging dumps for compiler invokations with different
2282 options, in particular with and without -g.
2284 @item -fdump-translation-unit-@var{file} (C++ only)
2285 Dump a representation of the tree structure for the entire translation
2288 @item -fpretend-float
2289 When running a cross-compiler, pretend that the target machine uses the
2290 same floating point format as the host machine. This causes incorrect
2291 output of the actual floating constants, but the actual instruction
2292 sequence will probably be the same as GCC would make when running on
2296 Store the usual ``temporary'' intermediate files permanently; place them
2297 in the current directory and name them based on the source file. Thus,
2298 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
2299 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.
2302 Report the CPU time taken by each subprocess in the compilation
2303 sequence. For C source files, this is the preprocessor, compiler
2304 proper, and assembler. The output looks like this:
2312 The first number on each line is the ``user time,'' that is time spent
2313 executing the program itself. The second number is ``system time,''
2314 time spent executing operating system routines on behalf of the program.
2315 Both numbers are in seconds.
2317 @item -print-file-name=@var{library}
2318 Print the full absolute name of the library file @var{library} that
2319 would be used when linking---and don't do anything else. With this
2320 option, GCC does not compile or link anything; it just prints the
2323 @item -print-prog-name=@var{program}
2324 Like @samp{-print-file-name}, but searches for a program such as @samp{cpp}.
2326 @item -print-libgcc-file-name
2327 Same as @samp{-print-file-name=libgcc.a}.
2329 This is useful when you use @samp{-nostdlib} or @samp{-nodefaultlibs}
2330 but you do want to link with @file{libgcc.a}. You can do
2333 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
2336 @item -print-search-dirs
2337 Print the name of the configured installation directory and a list of
2338 program and library directories gcc will search---and don't do anything else.
2340 This is useful when gcc prints the error message
2341 @samp{installation problem, cannot exec cpp: No such file or directory}.
2342 To resolve this you either need to put @file{cpp} and the other compiler
2343 components where gcc expects to find them, or you can set the environment
2344 variable @code{GCC_EXEC_PREFIX} to the directory where you installed them.
2345 Don't forget the trailing '/'.
2346 @xref{Environment Variables}.
2349 @node Optimize Options
2350 @section Options That Control Optimization
2351 @cindex optimize options
2352 @cindex options, optimization
2354 These options control various sorts of optimizations:
2359 Optimize. Optimizing compilation takes somewhat more time, and a lot
2360 more memory for a large function.
2362 Without @samp{-O}, the compiler's goal is to reduce the cost of
2363 compilation and to make debugging produce the expected results.
2364 Statements are independent: if you stop the program with a breakpoint
2365 between statements, you can then assign a new value to any variable or
2366 change the program counter to any other statement in the function and
2367 get exactly the results you would expect from the source code.
2369 Without @samp{-O}, the compiler only allocates variables declared
2370 @code{register} in registers. The resulting compiled code is a little
2371 worse than produced by PCC without @samp{-O}.
2373 With @samp{-O}, the compiler tries to reduce code size and execution
2376 When you specify @samp{-O}, the compiler turns on @samp{-fthread-jumps}
2377 and @samp{-fdefer-pop} on all machines. The compiler turns on
2378 @samp{-fdelayed-branch} on machines that have delay slots, and
2379 @samp{-fomit-frame-pointer} on machines that can support debugging even
2380 without a frame pointer. On some machines the compiler also turns
2381 on other flags.@refill
2384 Optimize even more. GCC performs nearly all supported optimizations
2385 that do not involve a space-speed tradeoff. The compiler does not
2386 perform loop unrolling or function inlining when you specify @samp{-O2}.
2387 As compared to @samp{-O}, this option increases both compilation time
2388 and the performance of the generated code.
2390 @samp{-O2} turns on all optional optimizations except for loop unrolling
2391 and function inlining. It also turns on the @samp{-fforce-mem} option
2392 on all machines and frame pointer elimination on machines where doing so
2393 does not interfere with debugging.
2396 Optimize yet more. @samp{-O3} turns on all optimizations specified by
2397 @samp{-O2} and also turns on the @samp{inline-functions} option.
2403 Optimize for size. @samp{-Os} enables all @samp{-O2} optimizations that
2404 do not typically increase code size. It also performs further
2405 optimizations designed to reduce code size.
2407 If you use multiple @samp{-O} options, with or without level numbers,
2408 the last such option is the one that is effective.
2411 Options of the form @samp{-f@var{flag}} specify machine-independent
2412 flags. Most flags have both positive and negative forms; the negative
2413 form of @samp{-ffoo} would be @samp{-fno-foo}. In the table below,
2414 only one of the forms is listed---the one which is not the default.
2415 You can figure out the other form by either removing @samp{no-} or
2420 Do not store floating point variables in registers, and inhibit other
2421 options that might change whether a floating point value is taken from a
2424 @cindex floating point precision
2425 This option prevents undesirable excess precision on machines such as
2426 the 68000 where the floating registers (of the 68881) keep more
2427 precision than a @code{double} is supposed to have. Similarly for the
2428 x86 architecture. For most programs, the excess precision does only
2429 good, but a few programs rely on the precise definition of IEEE floating
2430 point. Use @samp{-ffloat-store} for such programs, after modifying
2431 them to store all pertinent intermediate computations into variables.
2433 @item -fno-default-inline
2434 Do not make member functions inline by default merely because they are
2435 defined inside the class scope (C++ only). Otherwise, when you specify
2436 @w{@samp{-O}}, member functions defined inside class scope are compiled
2437 inline by default; i.e., you don't need to add @samp{inline} in front of
2438 the member function name.
2440 @item -fno-defer-pop
2441 Always pop the arguments to each function call as soon as that function
2442 returns. For machines which must pop arguments after a function call,
2443 the compiler normally lets arguments accumulate on the stack for several
2444 function calls and pops them all at once.
2447 Force memory operands to be copied into registers before doing
2448 arithmetic on them. This produces better code by making all memory
2449 references potential common subexpressions. When they are not common
2450 subexpressions, instruction combination should eliminate the separate
2451 register-load. The @samp{-O2} option turns on this option.
2454 Force memory address constants to be copied into registers before
2455 doing arithmetic on them. This may produce better code just as
2456 @samp{-fforce-mem} may.
2458 @item -fomit-frame-pointer
2459 Don't keep the frame pointer in a register for functions that
2460 don't need one. This avoids the instructions to save, set up and
2461 restore frame pointers; it also makes an extra register available
2462 in many functions. @strong{It also makes debugging impossible on
2465 @item -foptimize-sibling-calls
2466 Optimize sibling and tail recursive calls.
2469 On some machines, such as the Vax, this flag has no effect, because
2470 the standard calling sequence automatically handles the frame pointer
2471 and nothing is saved by pretending it doesn't exist. The
2472 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2473 whether a target machine supports this flag. @xref{Registers}.@refill
2476 On some machines, such as the Vax, this flag has no effect, because
2477 the standard calling sequence automatically handles the frame pointer
2478 and nothing is saved by pretending it doesn't exist. The
2479 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2480 whether a target machine supports this flag. @xref{Registers,,Register
2481 Usage, gcc.info, Using and Porting GCC}.@refill
2485 Don't pay attention to the @code{inline} keyword. Normally this option
2486 is used to keep the compiler from expanding any functions inline.
2487 Note that if you are not optimizing, no functions can be expanded inline.
2489 @item -finline-functions
2490 Integrate all simple functions into their callers. The compiler
2491 heuristically decides which functions are simple enough to be worth
2492 integrating in this way.
2494 If all calls to a given function are integrated, and the function is
2495 declared @code{static}, then the function is normally not output as
2496 assembler code in its own right.
2498 @item -finline-limit=@var{n}
2499 By default, gcc limits the size of functions that can be inlined. This flag
2500 allows the control of this limit for functions that are explicitly marked as
2501 inline (ie marked with the inline keyword or defined within the class
2502 definition in c++). @var{n} is the size of functions that can be inlined in
2503 number of pseudo instructions (not counting parameter handling). The default
2504 value of n is 10000. Increasing this value can result in more inlined code at
2505 the cost of compilation time and memory consumption. Decreasing usually makes
2506 the compilation faster and less code will be inlined (which presumably
2507 means slower programs). This option is particularly useful for programs that
2508 use inlining heavily such as those based on recursive templates with c++.
2510 @emph{Note:} pseudo instruction represents, in this particular context, an
2511 abstract measurement of function's size. In no way, it represents a count
2512 of assembly instructions and as such its exact meaning might change from one
2513 release to an another.
2515 @item -fkeep-inline-functions
2516 Even if all calls to a given function are integrated, and the function
2517 is declared @code{static}, nevertheless output a separate run-time
2518 callable version of the function. This switch does not affect
2519 @code{extern inline} functions.
2521 @item -fkeep-static-consts
2522 Emit variables declared @code{static const} when optimization isn't turned
2523 on, even if the variables aren't referenced.
2525 GCC enables this option by default. If you want to force the compiler to
2526 check if the variable was referenced, regardless of whether or not
2527 optimization is turned on, use the @samp{-fno-keep-static-consts} option.
2529 @item -fno-function-cse
2530 Do not put function addresses in registers; make each instruction that
2531 calls a constant function contain the function's address explicitly.
2533 This option results in less efficient code, but some strange hacks
2534 that alter the assembler output may be confused by the optimizations
2535 performed when this option is not used.
2538 This option allows GCC to violate some ANSI or IEEE rules and/or
2539 specifications in the interest of optimizing code for speed. For
2540 example, it allows the compiler to assume arguments to the @code{sqrt}
2541 function are non-negative numbers and that no floating-point values
2544 This option should never be turned on by any @samp{-O} option since
2545 it can result in incorrect output for programs which depend on
2546 an exact implementation of IEEE or ANSI rules/specifications for
2549 @item -fno-math-errno
2550 Do not set ERRNO after calling math functions that are executed
2551 with a single instruction, e.g., sqrt. A program that relies on
2552 IEEE exceptions for math error handling may want to use this flag
2553 for speed while maintaining IEEE arithmetic compatibility.
2555 The default is @samp{-fmath-errno}. The @samp{-ffast-math} option
2556 sets @samp{-fno-math-errno}.
2559 @c following causes underfulls.. they don't look great, but we deal.
2561 The following options control specific optimizations. The @samp{-O2}
2562 option turns on all of these optimizations except @samp{-funroll-loops}
2563 and @samp{-funroll-all-loops}. On most machines, the @samp{-O} option
2564 turns on the @samp{-fthread-jumps} and @samp{-fdelayed-branch} options,
2565 but specific machines may handle it differently.
2567 You can use the following flags in the rare cases when ``fine-tuning''
2568 of optimizations to be performed is desired.
2571 @item -fstrength-reduce
2572 Perform the optimizations of loop strength reduction and
2573 elimination of iteration variables.
2575 @item -fthread-jumps
2576 Perform optimizations where we check to see if a jump branches to a
2577 location where another comparison subsumed by the first is found. If
2578 so, the first branch is redirected to either the destination of the
2579 second branch or a point immediately following it, depending on whether
2580 the condition is known to be true or false.
2582 @item -fcse-follow-jumps
2583 In common subexpression elimination, scan through jump instructions
2584 when the target of the jump is not reached by any other path. For
2585 example, when CSE encounters an @code{if} statement with an
2586 @code{else} clause, CSE will follow the jump when the condition
2589 @item -fcse-skip-blocks
2590 This is similar to @samp{-fcse-follow-jumps}, but causes CSE to
2591 follow jumps which conditionally skip over blocks. When CSE
2592 encounters a simple @code{if} statement with no else clause,
2593 @samp{-fcse-skip-blocks} causes CSE to follow the jump around the
2594 body of the @code{if}.
2596 @item -frerun-cse-after-loop
2597 Re-run common subexpression elimination after loop optimizations has been
2600 @item -frerun-loop-opt
2601 Run the loop optimizer twice.
2604 Perform a global common subexpression elimination pass.
2605 This pass also performs global constant and copy propagation.
2607 @item -fdelete-null-pointer-checks
2608 Use global dataflow analysis to identify and eliminate useless null
2609 pointer checks. Programs which rely on NULL pointer dereferences @emph{not}
2610 halting the program may not work properly with this option. Use
2611 -fno-delete-null-pointer-checks to disable this optimizing for programs
2612 which depend on that behavior.
2615 @item -fexpensive-optimizations
2616 Perform a number of minor optimizations that are relatively expensive.
2618 @item -foptimize-register-moves
2620 Attempt to reassign register numbers in move instructions and as
2621 operands of other simple instructions in order to maximize the amount of
2622 register tying. This is especially helpful on machines with two-operand
2623 instructions. GCC enables this optimization by default with @samp{-O2}
2626 Note @code{-fregmove} and @code{-foptimize-register-moves} are the same
2629 @item -fdelayed-branch
2630 If supported for the target machine, attempt to reorder instructions
2631 to exploit instruction slots available after delayed branch
2634 @item -fschedule-insns
2635 If supported for the target machine, attempt to reorder instructions to
2636 eliminate execution stalls due to required data being unavailable. This
2637 helps machines that have slow floating point or memory load instructions
2638 by allowing other instructions to be issued until the result of the load
2639 or floating point instruction is required.
2641 @item -fschedule-insns2
2642 Similar to @samp{-fschedule-insns}, but requests an additional pass of
2643 instruction scheduling after register allocation has been done. This is
2644 especially useful on machines with a relatively small number of
2645 registers and where memory load instructions take more than one cycle.
2647 @item -ffunction-sections
2648 @itemx -fdata-sections
2649 Place each function or data item into its own section in the output
2650 file if the target supports arbitrary sections. The name of the
2651 function or the name of the data item determines the section's name
2654 Use these options on systems where the linker can perform optimizations
2655 to improve locality of reference in the instruction space. HPPA
2656 processors running HP-UX and Sparc processors running Solaris 2 have
2657 linkers with such optimizations. Other systems using the ELF object format
2658 as well as AIX may have these optimizations in the future.
2660 Only use these options when there are significant benefits from doing
2661 so. When you specify these options, the assembler and linker will
2662 create larger object and executable files and will also be slower.
2663 You will not be able to use @code{gprof} on all systems if you
2664 specify this option and you may have problems with debugging if
2665 you specify both this option and @samp{-g}.
2667 @item -fcaller-saves
2668 Enable values to be allocated in registers that will be clobbered by
2669 function calls, by emitting extra instructions to save and restore the
2670 registers around such calls. Such allocation is done only when it
2671 seems to result in better code than would otherwise be produced.
2673 This option is always enabled by default on certain machines, usually
2674 those which have no call-preserved registers to use instead.
2676 For all machines, optimization level 2 and higher enables this flag by
2679 @item -funroll-loops
2680 Perform the optimization of loop unrolling. This is only done for loops
2681 whose number of iterations can be determined at compile time or run time.
2682 @samp{-funroll-loops} implies both @samp{-fstrength-reduce} and
2683 @samp{-frerun-cse-after-loop}.
2685 @item -funroll-all-loops
2686 Perform the optimization of loop unrolling. This is done for all loops
2687 and usually makes programs run more slowly. @samp{-funroll-all-loops}
2688 implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
2690 @item -fmove-all-movables
2691 Forces all invariant computations in loops to be moved
2694 @item -freduce-all-givs
2695 Forces all general-induction variables in loops to be
2698 @emph{Note:} When compiling programs written in Fortran,
2699 @samp{-fmove-all-movables} and @samp{-freduce-all-givs} are enabled
2700 by default when you use the optimizer.
2702 These options may generate better or worse code; results are highly
2703 dependent on the structure of loops within the source code.
2705 These two options are intended to be removed someday, once
2706 they have helped determine the efficacy of various
2707 approaches to improving loop optimizations.
2709 Please let us (@code{gcc@@gcc.gnu.org} and @code{fortran@@gnu.org})
2710 know how use of these options affects
2711 the performance of your production code.
2712 We're very interested in code that runs @emph{slower}
2713 when these options are @emph{enabled}.
2716 Disable any machine-specific peephole optimizations.
2718 @item -fbranch-probabilities
2719 After running a program compiled with @samp{-fprofile-arcs}
2720 (@pxref{Debugging Options,, Options for Debugging Your Program or
2721 @code{gcc}}), you can compile it a second time using
2722 @samp{-fbranch-probabilities}, to improve optimizations based on
2723 guessing the path a branch might take.
2726 With @samp{-fbranch-probabilities}, GCC puts a @samp{REG_EXEC_COUNT}
2727 note on the first instruction of each basic block, and a
2728 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
2729 These can be used to improve optimization. Currently, they are only
2730 used in one place: in @file{reorg.c}, instead of guessing which path a
2731 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
2732 exactly determine which path is taken more often.
2735 @item -fstrict-aliasing
2736 Allows the compiler to assume the strictest aliasing rules applicable to
2737 the language being compiled. For C (and C++), this activates
2738 optimizations based on the type of expressions. In particular, an
2739 object of one type is assumed never to reside at the same address as an
2740 object of a different type, unless the types are almost the same. For
2741 example, an @code{unsigned int} can alias an @code{int}, but not a
2742 @code{void*} or a @code{double}. A character type may alias any other
2745 Pay special attention to code like this:
2758 The practice of reading from a different union member than the one most
2759 recently written to (called ``type-punning'') is common. Even with
2760 @samp{-fstrict-aliasing}, type-punning is allowed, provided the memory
2761 is accessed through the union type. So, the code above will work as
2762 expected. However, this code might not:
2774 Every language that wishes to perform language-specific alias analysis
2775 should define a function that computes, given an @code{tree}
2776 node, an alias set for the node. Nodes in different alias sets are not
2777 allowed to alias. For an example, see the C front-end function
2778 @code{c_get_alias_set}.
2781 @item -falign-functions
2782 @itemx -falign-functions=@var{n}
2783 Align the start of functions to the next power-of-two greater than
2784 @var{n}, skipping up to @var{n} bytes. For instance,
2785 @samp{-falign-functions=32} aligns functions to the next 32-byte
2786 boundary, but @samp{-falign-functions=24} would align to the next
2787 32-byte boundary only if this can be done by skipping 23 bytes or less.
2789 @samp{-fno-align-functions} and @samp{-falign-functions=1} are
2790 equivalent and mean that functions will not be aligned.
2792 Some assemblers only support this flag when @var{n} is a power of two;
2793 in that case, it is rounded up.
2795 If @var{n} is not specified, use a machine-dependent default.
2797 @item -falign-labels
2798 @itemx -falign-labels=@var{n}
2799 Align all branch targets to a power-of-two boundary, skipping up to
2800 @var{n} bytes like @samp{-falign-functions}. This option can easily
2801 make code slower, because it must insert dummy operations for when the
2802 branch target is reached in the usual flow of the code.
2804 If @samp{-falign-loops} or @samp{-falign-jumps} are applicable and
2805 are greater than this value, then their values are used instead.
2807 If @var{n} is not specified, use a machine-dependent default which is
2808 very likely to be @samp{1}, meaning no alignment.
2811 @itemx -falign-loops=@var{n}
2812 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
2813 like @samp{-falign-functions}. The hope is that the loop will be
2814 executed many times, which will make up for any execution of the dummy
2817 If @var{n} is not specified, use a machine-dependent default.
2820 @itemx -falign-jumps=@var{n}
2821 Align branch targets to a power-of-two boundary, for branch targets
2822 where the targets can only be reached by jumping, skipping up to @var{n}
2823 bytes like @samp{-falign-functions}. In this case, no dummy operations
2826 If @var{n} is not specified, use a machine-dependent default.
2830 @node Preprocessor Options
2831 @section Options Controlling the Preprocessor
2832 @cindex preprocessor options
2833 @cindex options, preprocessor
2835 These options control the C preprocessor, which is run on each C source
2836 file before actual compilation.
2838 If you use the @samp{-E} option, nothing is done except preprocessing.
2839 Some of these options make sense only together with @samp{-E} because
2840 they cause the preprocessor output to be unsuitable for actual
2844 @item -include @var{file}
2845 Process @var{file} as input before processing the regular input file.
2846 In effect, the contents of @var{file} are compiled first. Any @samp{-D}
2847 and @samp{-U} options on the command line are always processed before
2848 @samp{-include @var{file}}, regardless of the order in which they are
2849 written. All the @samp{-include} and @samp{-imacros} options are
2850 processed in the order in which they are written.
2852 @item -imacros @var{file}
2853 Process @var{file} as input, discarding the resulting output, before
2854 processing the regular input file. Because the output generated from
2855 @var{file} is discarded, the only effect of @samp{-imacros @var{file}}
2856 is to make the macros defined in @var{file} available for use in the
2859 Any @samp{-D} and @samp{-U} options on the command line are always
2860 processed before @samp{-imacros @var{file}}, regardless of the order in
2861 which they are written. All the @samp{-include} and @samp{-imacros}
2862 options are processed in the order in which they are written.
2864 @item -idirafter @var{dir}
2865 @cindex second include path
2866 Add the directory @var{dir} to the second include path. The directories
2867 on the second include path are searched when a header file is not found
2868 in any of the directories in the main include path (the one that
2871 @item -iprefix @var{prefix}
2872 Specify @var{prefix} as the prefix for subsequent @samp{-iwithprefix}
2875 @item -iwithprefix @var{dir}
2876 Add a directory to the second include path. The directory's name is
2877 made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was
2878 specified previously with @samp{-iprefix}. If you have not specified a
2879 prefix yet, the directory containing the installed passes of the
2880 compiler is used as the default.
2882 @item -iwithprefixbefore @var{dir}
2883 Add a directory to the main include path. The directory's name is made
2884 by concatenating @var{prefix} and @var{dir}, as in the case of
2885 @samp{-iwithprefix}.
2887 @item -isystem @var{dir}
2888 Add a directory to the beginning of the second include path, marking it
2889 as a system directory, so that it gets the same special treatment as
2890 is applied to the standard system directories.
2893 Do not search the standard system directories for header files. Only
2894 the directories you have specified with @samp{-I} options (and the
2895 current directory, if appropriate) are searched. @xref{Directory
2896 Options}, for information on @samp{-I}.
2898 By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
2899 search path to only those directories you specify explicitly.
2902 Do not predefine any nonstandard macros. (Including architecture flags).
2905 Run only the C preprocessor. Preprocess all the C source files
2906 specified and output the results to standard output or to the
2907 specified output file.
2910 Tell the preprocessor not to discard comments. Used with the
2914 Tell the preprocessor not to generate @samp{#line} directives.
2915 Used with the @samp{-E} option.
2918 @cindex dependencies, make
2920 Tell the preprocessor to output a rule suitable for @code{make}
2921 describing the dependencies of each object file. For each source file,
2922 the preprocessor outputs one @code{make}-rule whose target is the object
2923 file name for that source file and whose dependencies are all the
2924 @code{#include} header files it uses. This rule may be a single line or
2925 may be continued with @samp{\}-newline if it is long. The list of rules
2926 is printed on standard output instead of the preprocessed C program.
2928 @samp{-M} implies @samp{-E}.
2930 Another way to specify output of a @code{make} rule is by setting
2931 the environment variable @code{DEPENDENCIES_OUTPUT} (@pxref{Environment
2935 Like @samp{-M} but the output mentions only the user header files
2936 included with @samp{#include "@var{file}"}. System header files
2937 included with @samp{#include <@var{file}>} are omitted.
2940 Like @samp{-M} but the dependency information is written to a file made by
2941 replacing ".c" with ".d" at the end of the input file names.
2942 This is in addition to compiling the file as specified---@samp{-MD} does
2943 not inhibit ordinary compilation the way @samp{-M} does.
2945 In Mach, you can use the utility @code{md} to merge multiple dependency
2946 files into a single dependency file suitable for using with the @samp{make}
2950 Like @samp{-MD} except mention only user header files, not system
2954 Treat missing header files as generated files and assume they live in the
2955 same directory as the source file. If you specify @samp{-MG}, you
2956 must also specify either @samp{-M} or @samp{-MM}. @samp{-MG} is not
2957 supported with @samp{-MD} or @samp{-MMD}.
2960 Print the name of each header file used, in addition to other normal
2963 @item -A@var{question}(@var{answer})
2964 Assert the answer @var{answer} for @var{question}, in case it is tested
2965 with a preprocessing conditional such as @samp{#if
2966 #@var{question}(@var{answer})}. @samp{-A-} disables the standard
2967 assertions that normally describe the target machine.
2970 Define macro @var{macro} with the string @samp{1} as its definition.
2972 @item -D@var{macro}=@var{defn}
2973 Define macro @var{macro} as @var{defn}. All instances of @samp{-D} on
2974 the command line are processed before any @samp{-U} options.
2977 Undefine macro @var{macro}. @samp{-U} options are evaluated after all
2978 @samp{-D} options, but before any @samp{-include} and @samp{-imacros}
2982 Tell the preprocessor to output only a list of the macro definitions
2983 that are in effect at the end of preprocessing. Used with the @samp{-E}
2987 Tell the preprocessing to pass all macro definitions into the output, in
2988 their proper sequence in the rest of the output.
2991 Like @samp{-dD} except that the macro arguments and contents are omitted.
2992 Only @samp{#define @var{name}} is included in the output.
2995 Support ANSI C trigraphs. The @samp{-ansi} option also has this effect.
2997 @item -Wp,@var{option}
2998 Pass @var{option} as an option to the preprocessor. If @var{option}
2999 contains commas, it is split into multiple options at the commas.
3002 @node Assembler Options
3003 @section Passing Options to the Assembler
3005 @c prevent bad page break with this line
3006 You can pass options to the assembler.
3009 @item -Wa,@var{option}
3010 Pass @var{option} as an option to the assembler. If @var{option}
3011 contains commas, it is split into multiple options at the commas.
3015 @section Options for Linking
3016 @cindex link options
3017 @cindex options, linking
3019 These options come into play when the compiler links object files into
3020 an executable output file. They are meaningless if the compiler is
3021 not doing a link step.
3025 @item @var{object-file-name}
3026 A file name that does not end in a special recognized suffix is
3027 considered to name an object file or library. (Object files are
3028 distinguished from libraries by the linker according to the file
3029 contents.) If linking is done, these object files are used as input
3035 If any of these options is used, then the linker is not run, and
3036 object file names should not be used as arguments. @xref{Overall
3040 @item -l@var{library}
3041 Search the library named @var{library} when linking.
3043 It makes a difference where in the command you write this option; the
3044 linker searches processes libraries and object files in the order they
3045 are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
3046 after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers
3047 to functions in @samp{z}, those functions may not be loaded.
3049 The linker searches a standard list of directories for the library,
3050 which is actually a file named @file{lib@var{library}.a}. The linker
3051 then uses this file as if it had been specified precisely by name.
3053 The directories searched include several standard system directories
3054 plus any that you specify with @samp{-L}.
3056 Normally the files found this way are library files---archive files
3057 whose members are object files. The linker handles an archive file by
3058 scanning through it for members which define symbols that have so far
3059 been referenced but not defined. But if the file that is found is an
3060 ordinary object file, it is linked in the usual fashion. The only
3061 difference between using an @samp{-l} option and specifying a file name
3062 is that @samp{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
3063 and searches several directories.
3066 You need this special case of the @samp{-l} option in order to
3067 link an Objective C program.
3070 Do not use the standard system startup files when linking.
3071 The standard system libraries are used normally, unless @code{-nostdlib}
3072 or @code{-nodefaultlibs} is used.
3074 @item -nodefaultlibs
3075 Do not use the standard system libraries when linking.
3076 Only the libraries you specify will be passed to the linker.
3077 The standard startup files are used normally, unless @code{-nostartfiles}
3078 is used. The compiler may generate calls to memcmp, memset, and memcpy
3079 for System V (and ANSI C) environments or to bcopy and bzero for
3080 BSD environments. These entries are usually resolved by entries in
3081 libc. These entry points should be supplied through some other
3082 mechanism when this option is specified.
3085 Do not use the standard system startup files or libraries when linking.
3086 No startup files and only the libraries you specify will be passed to
3087 the linker. The compiler may generate calls to memcmp, memset, and memcpy
3088 for System V (and ANSI C) environments or to bcopy and bzero for
3089 BSD environments. These entries are usually resolved by entries in
3090 libc. These entry points should be supplied through some other
3091 mechanism when this option is specified.
3093 @cindex @code{-lgcc}, use with @code{-nostdlib}
3094 @cindex @code{-nostdlib} and unresolved references
3095 @cindex unresolved references and @code{-nostdlib}
3096 @cindex @code{-lgcc}, use with @code{-nodefaultlibs}
3097 @cindex @code{-nodefaultlibs} and unresolved references
3098 @cindex unresolved references and @code{-nodefaultlibs}
3099 One of the standard libraries bypassed by @samp{-nostdlib} and
3100 @samp{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
3101 that GCC uses to overcome shortcomings of particular machines, or special
3102 needs for some languages.
3104 (@xref{Interface,,Interfacing to GCC Output}, for more discussion of
3108 (@xref{Interface,,Interfacing to GCC Output,gcc.info,Porting GCC},
3109 for more discussion of @file{libgcc.a}.)
3111 In most cases, you need @file{libgcc.a} even when you want to avoid
3112 other standard libraries. In other words, when you specify @samp{-nostdlib}
3113 or @samp{-nodefaultlibs} you should usually specify @samp{-lgcc} as well.
3114 This ensures that you have no unresolved references to internal GCC
3115 library subroutines. (For example, @samp{__main}, used to ensure C++
3116 constructors will be called; @pxref{Collect2,,@code{collect2}}.)
3119 Remove all symbol table and relocation information from the executable.
3122 On systems that support dynamic linking, this prevents linking with the shared
3123 libraries. On other systems, this option has no effect.
3126 Produce a shared object which can then be linked with other objects to
3127 form an executable. Not all systems support this option. You must
3128 also specify @samp{-fpic} or @samp{-fPIC} on some systems when
3129 you specify this option.
3132 Bind references to global symbols when building a shared object. Warn
3133 about any unresolved references (unless overridden by the link editor
3134 option @samp{-Xlinker -z -Xlinker defs}). Only a few systems support
3137 @item -Xlinker @var{option}
3138 Pass @var{option} as an option to the linker. You can use this to
3139 supply system-specific linker options which GCC does not know how to
3142 If you want to pass an option that takes an argument, you must use
3143 @samp{-Xlinker} twice, once for the option and once for the argument.
3144 For example, to pass @samp{-assert definitions}, you must write
3145 @samp{-Xlinker -assert -Xlinker definitions}. It does not work to write
3146 @samp{-Xlinker "-assert definitions"}, because this passes the entire
3147 string as a single argument, which is not what the linker expects.
3149 @item -Wl,@var{option}
3150 Pass @var{option} as an option to the linker. If @var{option} contains
3151 commas, it is split into multiple options at the commas.
3153 @item -u @var{symbol}
3154 Pretend the symbol @var{symbol} is undefined, to force linking of
3155 library modules to define it. You can use @samp{-u} multiple times with
3156 different symbols to force loading of additional library modules.
3159 @node Directory Options
3160 @section Options for Directory Search
3161 @cindex directory options
3162 @cindex options, directory search
3165 These options specify directories to search for header files, for
3166 libraries and for parts of the compiler:
3170 Add the directory @var{dir} to the head of the list of directories to be
3171 searched for header files. This can be used to override a system header
3172 file, substituting your own version, since these directories are
3173 searched before the system header file directories. If you use more
3174 than one @samp{-I} option, the directories are scanned in left-to-right
3175 order; the standard system directories come after.
3178 Any directories you specify with @samp{-I} options before the @samp{-I-}
3179 option are searched only for the case of @samp{#include "@var{file}"};
3180 they are not searched for @samp{#include <@var{file}>}.
3182 If additional directories are specified with @samp{-I} options after
3183 the @samp{-I-}, these directories are searched for all @samp{#include}
3184 directives. (Ordinarily @emph{all} @samp{-I} directories are used
3187 In addition, the @samp{-I-} option inhibits the use of the current
3188 directory (where the current input file came from) as the first search
3189 directory for @samp{#include "@var{file}"}. There is no way to
3190 override this effect of @samp{-I-}. With @samp{-I.} you can specify
3191 searching the directory which was current when the compiler was
3192 invoked. That is not exactly the same as what the preprocessor does
3193 by default, but it is often satisfactory.
3195 @samp{-I-} does not inhibit the use of the standard system directories
3196 for header files. Thus, @samp{-I-} and @samp{-nostdinc} are
3200 Add directory @var{dir} to the list of directories to be searched
3203 @item -B@var{prefix}
3204 This option specifies where to find the executables, libraries,
3205 include files, and data files of the compiler itself.
3207 The compiler driver program runs one or more of the subprograms
3208 @file{cpp}, @file{cc1}, @file{as} and @file{ld}. It tries
3209 @var{prefix} as a prefix for each program it tries to run, both with and
3210 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
3212 For each subprogram to be run, the compiler driver first tries the
3213 @samp{-B} prefix, if any. If that name is not found, or if @samp{-B}
3214 was not specified, the driver tries two standard prefixes, which are
3215 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}. If neither of
3216 those results in a file name that is found, the unmodified program
3217 name is searched for using the directories specified in your
3218 @samp{PATH} environment variable.
3220 @samp{-B} prefixes that effectively specify directory names also apply
3221 to libraries in the linker, because the compiler translates these
3222 options into @samp{-L} options for the linker. They also apply to
3223 includes files in the preprocessor, because the compiler translates these
3224 options into @samp{-isystem} options for the preprocessor. In this case,
3225 the compiler appends @samp{include} to the prefix.
3227 The run-time support file @file{libgcc.a} can also be searched for using
3228 the @samp{-B} prefix, if needed. If it is not found there, the two
3229 standard prefixes above are tried, and that is all. The file is left
3230 out of the link if it is not found by those means.
3232 Another way to specify a prefix much like the @samp{-B} prefix is to use
3233 the environment variable @code{GCC_EXEC_PREFIX}. @xref{Environment
3236 @item -specs=@var{file}
3237 Process @var{file} after the compiler reads in the standard @file{specs}
3238 file, in order to override the defaults that the @file{gcc} driver
3239 program uses when determining what switches to pass to @file{cc1},
3240 @file{cc1plus}, @file{as}, @file{ld}, etc. More than one
3241 @samp{-specs=}@var{file} can be specified on the command line, and they
3242 are processed in order, from left to right.
3246 @section Specifying subprocesses and the switches to pass to them
3248 @code{GCC} is a driver program. It performs its job by invoking a
3249 sequence of other programs to do the work of compiling, assembling and
3250 linking. GCC interprets its command-line parameters and uses these to
3251 deduce which programs it should invoke, and which command-line options
3252 it ought to place on their command lines. This behaviour is controlled
3253 by @dfn{spec strings}. In most cases there is one spec string for each
3254 program that GCC can invoke, but a few programs have multiple spec
3255 strings to control their behaviour. The spec strings built into GCC can
3256 be overridden by using the @samp{-specs=} command-line switch to specify
3259 @dfn{Spec files} are plaintext files that are used to construct spec
3260 strings. They consist of a sequence of directives separated by blank
3261 lines. The type of directive is determined by the first non-whitespace
3262 character on the line and it can be one of the following:
3265 @item %@var{command}
3266 Issues a @var{command} to the spec file processor. The commands that can
3270 @item %include <@var{file}>
3272 Search for @var{file} and insert its text at the current point in the
3275 @item %include_noerr <@var{file}>
3276 @cindex %include_noerr
3277 Just like @samp{%include}, but do not generate an error message if the include
3278 file cannot be found.
3280 @item %rename @var{old_name} @var{new_name}
3282 Rename the spec string @var{old_name} to @var{new_name}.
3286 @item *[@var{spec_name}]:
3287 This tells the compiler to create, override or delete the named spec
3288 string. All lines after this directive up to the next directive or
3289 blank line are considered to be the text for the spec string. If this
3290 results in an empty string then the spec will be deleted. (Or, if the
3291 spec did not exist, then nothing will happened.) Otherwise, if the spec
3292 does not currently exist a new spec will be created. If the spec does
3293 exist then its contents will be overridden by the text of this
3294 directive, unless the first character of that text is the @samp{+}
3295 character, in which case the text will be appended to the spec.
3297 @item [@var{suffix}]:
3298 Creates a new @samp{[@var{suffix}] spec} pair. All lines after this directive
3299 and up to the next directive or blank line are considered to make up the
3300 spec string for the indicated suffix. When the compiler encounters an
3301 input file with the named suffix, it will processes the spec string in
3302 order to work out how to compile that file. For example:
3309 This says that any input file whose name ends in @samp{.ZZ} should be
3310 passed to the program @samp{z-compile}, which should be invoked with the
3311 command-line switch @samp{-input} and with the result of performing the
3312 @samp{%i} substitution. (See below.)
3314 As an alternative to providing a spec string, the text that follows a
3315 suffix directive can be one of the following:
3318 @item @@@var{language}
3319 This says that the suffix is an alias for a known @var{language}. This is
3320 similar to using the @code{-x} command-line switch to GCC to specify a
3321 language explicitly. For example:
3328 Says that .ZZ files are, in fact, C++ source files.
3331 This causes an error messages saying:
3334 @var{name} compiler not installed on this system.
3338 GCC already has an extensive list of suffixes built into it.
3339 This directive will add an entry to the end of the list of suffixes, but
3340 since the list is searched from the end backwards, it is effectively
3341 possible to override earlier entries using this technique.
3345 GCC has the following spec strings built into it. Spec files can
3346 override these strings or create their own. Note that individual
3347 targets can also add their own spec strings to this list.
3350 asm Options to pass to the assembler
3351 asm_final Options to pass to the assembler post-processor
3352 cpp Options to pass to the C preprocessor
3353 cc1 Options to pass to the C compiler
3354 cc1plus Options to pass to the C++ compiler
3355 endfile Object files to include at the end of the link
3356 link Options to pass to the linker
3357 lib Libraries to include on the command line to the linker
3358 libgcc Decides which GCC support library to pass to the linker
3359 linker Sets the name of the linker
3360 predefines Defines to be passed to the C preprocessor
3361 signed_char Defines to pass to CPP to say whether @code{char} is signed by default
3362 startfile Object files to include at the start of the link
3365 Here is a small example of a spec file:
3371 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
3374 This example renames the spec called @samp{lib} to @samp{old_lib} and
3375 then overrides the previous definition of @samp{lib} with a new one.
3376 The new definition adds in some extra command-line options before
3377 including the text of the old definition.
3379 @dfn{Spec strings} are a list of command-line options to be passed to their
3380 corresponding program. In addition, the spec strings can contain
3381 @samp{%}-prefixed sequences to substitute variable text or to
3382 conditionally insert text into the command line. Using these constructs
3383 it is possible to generate quite complex command lines.
3385 Here is a table of all defined @samp{%}-sequences for spec
3386 strings. Note that spaces are not generated automatically around the
3387 results of expanding these sequences. Therefore you can concatenate them
3388 together or combine them with constant text in a single argument.
3392 Substitute one @samp{%} into the program name or argument.
3395 Substitute the name of the input file being processed.
3398 Substitute the basename of the input file being processed.
3399 This is the substring up to (and not including) the last period
3400 and not including the directory.
3403 Marks the argument containing or following the @samp{%d} as a
3404 temporary file name, so that that file will be deleted if GCC exits
3405 successfully. Unlike @samp{%g}, this contributes no text to the
3408 @item %g@var{suffix}
3409 Substitute a file name that has suffix @var{suffix} and is chosen
3410 once per compilation, and mark the argument in the same way as
3411 @samp{%d}. To reduce exposure to denial-of-service attacks, the file
3412 name is now chosen in a way that is hard to predict even when previously
3413 chosen file names are known. For example, @samp{%g.s ... %g.o ... %g.s}
3414 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}. @var{suffix} matches
3415 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
3416 treated exactly as if @samp{%O} had been preprocessed. Previously, @samp{%g}
3417 was simply substituted with a file name chosen once per compilation,
3418 without regard to any appended suffix (which was therefore treated
3419 just like ordinary text), making such attacks more likely to succeed.
3421 @item %u@var{suffix}
3422 Like @samp{%g}, but generates a new temporary file name even if
3423 @samp{%u@var{suffix}} was already seen.
3425 @item %U@var{suffix}
3426 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
3427 new one if there is no such last file name. In the absence of any
3428 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
3429 the same suffix @emph{space}, so @samp{%g.s ... %U.s ... %g.s ... %U.s}
3430 would involve the generation of two distinct file names, one
3431 for each @samp{%g.s} and another for each @samp{%U.s}. Previously, @samp{%U} was
3432 simply substituted with a file name chosen for the previous @samp{%u},
3433 without regard to any appended suffix.
3436 Marks the argument containing or following the @samp{%w} as the
3437 designated output file of this compilation. This puts the argument
3438 into the sequence of arguments that @samp{%o} will substitute later.
3441 Substitutes the names of all the output files, with spaces
3442 automatically placed around them. You should write spaces
3443 around the @samp{%o} as well or the results are undefined.
3444 @samp{%o} is for use in the specs for running the linker.
3445 Input files whose names have no recognized suffix are not compiled
3446 at all, but they are included among the output files, so they will
3450 Substitutes the suffix for object files. Note that this is
3451 handled specially when it immediately follows @samp{%g, %u, or %U},
3452 because of the need for those to form complete file names. The
3453 handling is such that @samp{%O} is treated exactly as if it had already
3454 been substituted, except that @samp{%g, %u, and %U} do not currently
3455 support additional @var{suffix} characters following @samp{%O} as they would
3456 following, for example, @samp{.o}.
3459 Substitutes the standard macro predefinitions for the
3460 current target machine. Use this when running @code{cpp}.
3463 Like @samp{%p}, but puts @samp{__} before and after the name of each
3464 predefined macro, except for macros that start with @samp{__} or with
3465 @samp{_@var{L}}, where @var{L} is an uppercase letter. This is for ANSI
3469 Substitute a @samp{-iprefix} option made from GCC_EXEC_PREFIX.
3472 Current argument is the name of a library or startup file of some sort.
3473 Search for that file in a standard list of directories and substitute
3474 the full name found.
3477 Print @var{str} as an error message. @var{str} is terminated by a newline.
3478 Use this when inconsistent options are detected.
3481 Output @samp{-} if the input for the current command is coming from a pipe.
3484 Substitute the contents of spec string @var{name} at this point.
3487 Like @samp{%(...)} but put @samp{__} around @samp{-D} arguments.
3489 @item %x@{@var{option}@}
3490 Accumulate an option for @samp{%X}.
3493 Output the accumulated linker options specified by @samp{-Wl} or a @samp{%x}
3497 Output the accumulated assembler options specified by @samp{-Wa}.
3500 Output the accumulated preprocessor options specified by @samp{-Wp}.
3503 Substitute the major version number of GCC.
3504 (For version 2.9.5, this is 2.)
3507 Substitute the minor version number of GCC.
3508 (For version 2.9.5, this is 9.)
3511 Process the @code{asm} spec. This is used to compute the
3512 switches to be passed to the assembler.
3515 Process the @code{asm_final} spec. This is a spec string for
3516 passing switches to an assembler post-processor, if such a program is
3520 Process the @code{link} spec. This is the spec for computing the
3521 command line passed to the linker. Typically it will make use of the
3522 @samp{%L %G %S %D and %E} sequences.
3525 Dump out a @samp{-L} option for each directory that GCC believes might
3526 contain startup files. If the target supports multilibs then the
3527 current multilib directory will be prepended to each of these paths.
3530 Process the @code{lib} spec. This is a spec string for deciding which
3531 libraries should be included on the command line to the linker.
3534 Process the @code{libgcc} spec. This is a spec string for deciding
3535 which GCC support library should be included on the command line to the linker.
3538 Process the @code{startfile} spec. This is a spec for deciding which
3539 object files should be the first ones passed to the linker. Typically
3540 this might be a file named @file{crt0.o}.
3543 Process the @code{endfile} spec. This is a spec string that specifies
3544 the last object files that will be passed to the linker.
3547 Process the @code{cpp} spec. This is used to construct the arguments
3548 to be passed to the C preprocessor.
3551 Process the @code{signed_char} spec. This is intended to be used
3552 to tell cpp whether a char is signed. It typically has the definition:
3554 %@{funsigned-char:-D__CHAR_UNSIGNED__@}
3558 Process the @code{cc1} spec. This is used to construct the options to be
3559 passed to the actual C compiler (@samp{cc1}).
3562 Process the @code{cc1plus} spec. This is used to construct the options to be
3563 passed to the actual C++ compiler (@samp{cc1plus}).
3566 Substitute the variable part of a matched option. See below.
3567 Note that each comma in the substituted string is replaced by
3571 Substitutes the @code{-S} switch, if that switch was given to GCC.
3572 If that switch was not specified, this substitutes nothing. Note that
3573 the leading dash is omitted when specifying this option, and it is
3574 automatically inserted if the substitution is performed. Thus the spec
3575 string @samp{%@{foo@}} would match the command-line option @samp{-foo}
3576 and would output the command line option @samp{-foo}.
3578 @item %W@{@code{S}@}
3579 Like %@{@code{S}@} but mark last argument supplied within as a file to be
3582 @item %@{@code{S}*@}
3583 Substitutes all the switches specified to GCC whose names start
3584 with @code{-S}, but which also take an argument. This is used for
3585 switches like @samp{-o, -D, -I}, etc. GCC considers @samp{-o foo} as being
3586 one switch whose names starts with @samp{o}. %@{o*@} would substitute this
3587 text, including the space. Thus two arguments would be generated.
3589 @item %@{^@code{S}*@}
3590 Like %@{@code{S}*@}, but don't put a blank between a switch and its
3591 argument. Thus %@{^o*@} would only generate one argument, not two.
3593 @item %@{<@code{S}@}
3594 Remove all occurences of @code{S} from the command line. Note - this
3595 command is position dependent. @samp{%} commands in the spec string
3596 before this option will see @code{S}, @samp{%} commands in the spec
3597 string after this option will not.
3599 @item %@{@code{S}*:@code{X}@}
3600 Substitutes @code{X} if one or more switches whose names start with
3601 @code{-S} are specified to GCC. Note that the tail part of the
3602 @code{-S} option (i.e. the part matched by the @samp{*}) will be substituted
3603 for each occurrence of @samp{%*} within @code{X}.
3605 @item %@{@code{S}:@code{X}@}
3606 Substitutes @code{X}, but only if the @samp{-S} switch was given to GCC.
3608 @item %@{!@code{S}:@code{X}@}
3609 Substitutes @code{X}, but only if the @samp{-S} switch was @emph{not} given to GCC.
3611 @item %@{|@code{S}:@code{X}@}
3612 Like %@{@code{S}:@code{X}@}, but if no @code{S} switch, substitute @samp{-}.
3614 @item %@{|!@code{S}:@code{X}@}
3615 Like %@{!@code{S}:@code{X}@}, but if there is an @code{S} switch, substitute @samp{-}.
3617 @item %@{.@code{S}:@code{X}@}
3618 Substitutes @code{X}, but only if processing a file with suffix @code{S}.
3620 @item %@{!.@code{S}:@code{X}@}
3621 Substitutes @code{X}, but only if @emph{not} processing a file with suffix @code{S}.
3623 @item %@{@code{S}|@code{P}:@code{X}@}
3624 Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC. This may be
3625 combined with @samp{!} and @samp{.} sequences as well, although they
3626 have a stronger binding than the @samp{|}. For example a spec string
3630 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
3633 will output the following command-line options from the following input
3634 command-line options:
3639 -d fred.c -foo -baz -boggle
3640 -d jim.d -bar -baz -boggle
3645 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or
3646 %@{!@code{S}:@code{X}@} construct may contain other nested @samp{%} constructs
3647 or spaces, or even newlines. They are processed as usual, as described
3650 The @samp{-O, -f, -m, and -W} switches are handled specifically in these
3651 constructs. If another value of @samp{-O} or the negated form of a @samp{-f, -m, or
3652 -W} switch is found later in the command line, the earlier switch
3653 value is ignored, except with @{@code{S}*@} where @code{S} is just one
3654 letter, which passes all matching options.
3656 The character @samp{|} at the beginning of the predicate text is used to indicate
3657 that a command should be piped to the following command, but only if @samp{-pipe}
3660 It is built into GCC which switches take arguments and which do not.
3661 (You might think it would be useful to generalize this to allow each
3662 compiler's spec to say which switches take arguments. But this cannot
3663 be done in a consistent fashion. GCC cannot even decide which input
3664 files have been specified without knowing which switches take arguments,
3665 and it must know which input files to compile in order to tell which
3668 GCC also knows implicitly that arguments starting in @samp{-l} are to be
3669 treated as compiler output files, and passed to the linker in their
3670 proper position among the other output files.
3672 @node Target Options
3673 @section Specifying Target Machine and Compiler Version
3674 @cindex target options
3675 @cindex cross compiling
3676 @cindex specifying machine version
3677 @cindex specifying compiler version and target machine
3678 @cindex compiler version, specifying
3679 @cindex target machine, specifying
3681 By default, GCC compiles code for the same type of machine that you
3682 are using. However, it can also be installed as a cross-compiler, to
3683 compile for some other type of machine. In fact, several different
3684 configurations of GCC, for different target machines, can be
3685 installed side by side. Then you specify which one to use with the
3688 In addition, older and newer versions of GCC can be installed side
3689 by side. One of them (probably the newest) will be the default, but
3690 you may sometimes wish to use another.
3693 @item -b @var{machine}
3694 The argument @var{machine} specifies the target machine for compilation.
3695 This is useful when you have installed GCC as a cross-compiler.
3697 The value to use for @var{machine} is the same as was specified as the
3698 machine type when configuring GCC as a cross-compiler. For
3699 example, if a cross-compiler was configured with @samp{configure
3700 i386v}, meaning to compile for an 80386 running System V, then you
3701 would specify @samp{-b i386v} to run that cross compiler.
3703 When you do not specify @samp{-b}, it normally means to compile for
3704 the same type of machine that you are using.
3706 @item -V @var{version}
3707 The argument @var{version} specifies which version of GCC to run.
3708 This is useful when multiple versions are installed. For example,
3709 @var{version} might be @samp{2.0}, meaning to run GCC version 2.0.
3711 The default version, when you do not specify @samp{-V}, is the last
3712 version of GCC that you installed.
3715 The @samp{-b} and @samp{-V} options actually work by controlling part of
3716 the file name used for the executable files and libraries used for
3717 compilation. A given version of GCC, for a given target machine, is
3718 normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill
3720 Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
3721 changing the names of these directories or adding alternate names (or
3722 symbolic links). If in directory @file{/usr/local/lib/gcc-lib/} the
3723 file @file{80386} is a link to the file @file{i386v}, then @samp{-b
3724 80386} becomes an alias for @samp{-b i386v}.
3726 In one respect, the @samp{-b} or @samp{-V} do not completely change
3727 to a different compiler: the top-level driver program @code{gcc}
3728 that you originally invoked continues to run and invoke the other
3729 executables (preprocessor, compiler per se, assembler and linker)
3730 that do the real work. However, since no real work is done in the
3731 driver program, it usually does not matter that the driver program
3732 in use is not the one for the specified target and version.
3734 The only way that the driver program depends on the target machine is
3735 in the parsing and handling of special machine-specific options.
3736 However, this is controlled by a file which is found, along with the
3737 other executables, in the directory for the specified version and
3738 target machine. As a result, a single installed driver program adapts
3739 to any specified target machine and compiler version.
3741 The driver program executable does control one significant thing,
3742 however: the default version and target machine. Therefore, you can
3743 install different instances of the driver program, compiled for
3744 different targets or versions, under different names.
3746 For example, if the driver for version 2.0 is installed as @code{ogcc}
3747 and that for version 2.1 is installed as @code{gcc}, then the command
3748 @code{gcc} will use version 2.1 by default, while @code{ogcc} will use
3749 2.0 by default. However, you can choose either version with either
3750 command with the @samp{-V} option.
3752 @node Submodel Options
3753 @section Hardware Models and Configurations
3754 @cindex submodel options
3755 @cindex specifying hardware config
3756 @cindex hardware models and configurations, specifying
3757 @cindex machine dependent options
3759 Earlier we discussed the standard option @samp{-b} which chooses among
3760 different installed compilers for completely different target
3761 machines, such as Vax vs. 68000 vs. 80386.
3763 In addition, each of these target machine types can have its own
3764 special options, starting with @samp{-m}, to choose among various
3765 hardware models or configurations---for example, 68010 vs 68020,
3766 floating coprocessor or none. A single installed version of the
3767 compiler can compile for any model or configuration, according to the
3770 Some configurations of the compiler also support additional special
3771 options, usually for compatibility with other compilers on the same
3775 These options are defined by the macro @code{TARGET_SWITCHES} in the
3776 machine description. The default for the options is also defined by
3777 that macro, which enables you to change the defaults.
3792 * RS/6000 and PowerPC Options::
3797 * Intel 960 Options::
3798 * DEC Alpha Options::
3802 * System V Options::
3803 * TMS320C3x/C4x Options::
3811 @node M680x0 Options
3812 @subsection M680x0 Options
3813 @cindex M680x0 options
3815 These are the @samp{-m} options defined for the 68000 series. The default
3816 values for these options depends on which style of 68000 was selected when
3817 the compiler was configured; the defaults for the most common choices are
3823 Generate output for a 68000. This is the default
3824 when the compiler is configured for 68000-based systems.
3826 Use this option for microcontrollers with a 68000 or EC000 core,
3827 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
3831 Generate output for a 68020. This is the default
3832 when the compiler is configured for 68020-based systems.
3835 Generate output containing 68881 instructions for floating point.
3836 This is the default for most 68020 systems unless @samp{-nfp} was
3837 specified when the compiler was configured.
3840 Generate output for a 68030. This is the default when the compiler is
3841 configured for 68030-based systems.
3844 Generate output for a 68040. This is the default when the compiler is
3845 configured for 68040-based systems.
3847 This option inhibits the use of 68881/68882 instructions that have to be
3848 emulated by software on the 68040. Use this option if your 68040 does not
3849 have code to emulate those instructions.
3852 Generate output for a 68060. This is the default when the compiler is
3853 configured for 68060-based systems.
3855 This option inhibits the use of 68020 and 68881/68882 instructions that
3856 have to be emulated by software on the 68060. Use this option if your 68060
3857 does not have code to emulate those instructions.
3860 Generate output for a CPU32. This is the default
3861 when the compiler is configured for CPU32-based systems.
3863 Use this option for microcontrollers with a
3864 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
3865 68336, 68340, 68341, 68349 and 68360.
3868 Generate output for a 520X "coldfire" family cpu. This is the default
3869 when the compiler is configured for 520X-based systems.
3871 Use this option for microcontroller with a 5200 core, including
3872 the MCF5202, MCF5203, MCF5204 and MCF5202.
3876 Generate output for a 68040, without using any of the new instructions.
3877 This results in code which can run relatively efficiently on either a
3878 68020/68881 or a 68030 or a 68040. The generated code does use the
3879 68881 instructions that are emulated on the 68040.
3882 Generate output for a 68060, without using any of the new instructions.
3883 This results in code which can run relatively efficiently on either a
3884 68020/68881 or a 68030 or a 68040. The generated code does use the
3885 68881 instructions that are emulated on the 68060.
3888 Generate output containing Sun FPA instructions for floating point.
3891 Generate output containing library calls for floating point.
3892 @strong{Warning:} the requisite libraries are not available for all m68k
3893 targets. Normally the facilities of the machine's usual C compiler are
3894 used, but this can't be done directly in cross-compilation. You must
3895 make your own arrangements to provide suitable library functions for
3896 cross-compilation. The embedded targets @samp{m68k-*-aout} and
3897 @samp{m68k-*-coff} do provide software floating point support.
3900 Consider type @code{int} to be 16 bits wide, like @code{short int}.
3903 Do not use the bit-field instructions. The @samp{-m68000}, @samp{-mcpu32}
3904 and @samp{-m5200} options imply @w{@samp{-mnobitfield}}.
3907 Do use the bit-field instructions. The @samp{-m68020} option implies
3908 @samp{-mbitfield}. This is the default if you use a configuration
3909 designed for a 68020.
3912 Use a different function-calling convention, in which functions
3913 that take a fixed number of arguments return with the @code{rtd}
3914 instruction, which pops their arguments while returning. This
3915 saves one instruction in the caller since there is no need to pop
3916 the arguments there.
3918 This calling convention is incompatible with the one normally
3919 used on Unix, so you cannot use it if you need to call libraries
3920 compiled with the Unix compiler.
3922 Also, you must provide function prototypes for all functions that
3923 take variable numbers of arguments (including @code{printf});
3924 otherwise incorrect code will be generated for calls to those
3927 In addition, seriously incorrect code will result if you call a
3928 function with too many arguments. (Normally, extra arguments are
3929 harmlessly ignored.)
3931 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
3932 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
3935 @itemx -mno-align-int
3936 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
3937 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
3938 boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-mno-align-int}).
3939 Aligning variables on 32-bit boundaries produces code that runs somewhat
3940 faster on processors with 32-bit busses at the expense of more memory.
3942 @strong{Warning:} if you use the @samp{-malign-int} switch, GCC will
3943 align structures containing the above types differently than
3944 most published application binary interface specifications for the m68k.
3947 Use the pc-relative addressing mode of the 68000 directly, instead of
3948 using a global offset table. At present, this option implies -fpic,
3949 allowing at most a 16-bit offset for pc-relative addressing. -fPIC is
3950 not presently supported with -mpcrel, though this could be supported for
3951 68020 and higher processors.
3953 @item -mno-strict-align
3954 @itemx -mstrict-align
3955 @kindex -mstrict-align
3956 Do not (do) assume that unaligned memory references will be handled by
3962 @subsection VAX Options
3965 These @samp{-m} options are defined for the Vax:
3969 Do not output certain jump instructions (@code{aobleq} and so on)
3970 that the Unix assembler for the Vax cannot handle across long
3974 Do output those jump instructions, on the assumption that you
3975 will assemble with the GNU assembler.
3978 Output code for g-format floating point numbers instead of d-format.
3982 @subsection SPARC Options
3983 @cindex SPARC options
3985 These @samp{-m} switches are supported on the SPARC:
3990 Specify @samp{-mapp-regs} to generate output using the global registers
3991 2 through 4, which the SPARC SVR4 ABI reserves for applications. This
3994 To be fully SVR4 ABI compliant at the cost of some performance loss,
3995 specify @samp{-mno-app-regs}. You should compile libraries and system
3996 software with this option.
4000 Generate output containing floating point instructions. This is the
4005 Generate output containing library calls for floating point.
4006 @strong{Warning:} the requisite libraries are not available for all SPARC
4007 targets. Normally the facilities of the machine's usual C compiler are
4008 used, but this cannot be done directly in cross-compilation. You must make
4009 your own arrangements to provide suitable library functions for
4010 cross-compilation. The embedded targets @samp{sparc-*-aout} and
4011 @samp{sparclite-*-*} do provide software floating point support.
4013 @samp{-msoft-float} changes the calling convention in the output file;
4014 therefore, it is only useful if you compile @emph{all} of a program with
4015 this option. In particular, you need to compile @file{libgcc.a}, the
4016 library that comes with GCC, with @samp{-msoft-float} in order for
4019 @item -mhard-quad-float
4020 Generate output containing quad-word (long double) floating point
4023 @item -msoft-quad-float
4024 Generate output containing library calls for quad-word (long double)
4025 floating point instructions. The functions called are those specified
4026 in the SPARC ABI. This is the default.
4028 As of this writing, there are no sparc implementations that have hardware
4029 support for the quad-word floating point instructions. They all invoke
4030 a trap handler for one of these instructions, and then the trap handler
4031 emulates the effect of the instruction. Because of the trap handler overhead,
4032 this is much slower than calling the ABI library routines. Thus the
4033 @samp{-msoft-quad-float} option is the default.
4037 With @samp{-mepilogue} (the default), the compiler always emits code for
4038 function exit at the end of each function. Any function exit in
4039 the middle of the function (such as a return statement in C) will
4040 generate a jump to the exit code at the end of the function.
4042 With @samp{-mno-epilogue}, the compiler tries to emit exit code inline
4043 at every function exit.
4047 With @samp{-mflat}, the compiler does not generate save/restore instructions
4048 and will use a "flat" or single register window calling convention.
4049 This model uses %i7 as the frame pointer and is compatible with the normal
4050 register window model. Code from either may be intermixed.
4051 The local registers and the input registers (0-5) are still treated as
4052 "call saved" registers and will be saved on the stack as necessary.
4054 With @samp{-mno-flat} (the default), the compiler emits save/restore
4055 instructions (except for leaf functions) and is the normal mode of operation.
4057 @item -mno-unaligned-doubles
4058 @itemx -munaligned-doubles
4059 Assume that doubles have 8 byte alignment. This is the default.
4061 With @samp{-munaligned-doubles}, GCC assumes that doubles have 8 byte
4062 alignment only if they are contained in another type, or if they have an
4063 absolute address. Otherwise, it assumes they have 4 byte alignment.
4064 Specifying this option avoids some rare compatibility problems with code
4065 generated by other compilers. It is not the default because it results
4066 in a performance loss, especially for floating point code.
4068 @item -mno-faster-structs
4069 @itemx -mfaster-structs
4070 With @samp{-mfaster-structs}, the compiler assumes that structures
4071 should have 8 byte alignment. This enables the use of pairs of
4072 @code{ldd} and @code{std} instructions for copies in structure
4073 assignment, in place of twice as many @code{ld} and @code{st} pairs.
4074 However, the use of this changed alignment directly violates the Sparc
4075 ABI. Thus, it's intended only for use on targets where the developer
4076 acknowledges that their resulting code will not be directly in line with
4077 the rules of the ABI.
4081 These two options select variations on the SPARC architecture.
4083 By default (unless specifically configured for the Fujitsu SPARClite),
4084 GCC generates code for the v7 variant of the SPARC architecture.
4086 @samp{-mv8} will give you SPARC v8 code. The only difference from v7
4087 code is that the compiler emits the integer multiply and integer
4088 divide instructions which exist in SPARC v8 but not in SPARC v7.
4090 @samp{-msparclite} will give you SPARClite code. This adds the integer
4091 multiply, integer divide step and scan (@code{ffs}) instructions which
4092 exist in SPARClite but not in SPARC v7.
4094 These options are deprecated and will be deleted in a future GCC release.
4095 They have been replaced with @samp{-mcpu=xxx}.
4099 These two options select the processor for which the code is optimised.
4101 With @samp{-mcypress} (the default), the compiler optimizes code for the
4102 Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series.
4103 This is also appropriate for the older SparcStation 1, 2, IPX etc.
4105 With @samp{-msupersparc} the compiler optimizes code for the SuperSparc cpu, as
4106 used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
4107 of the full SPARC v8 instruction set.
4109 These options are deprecated and will be deleted in a future GCC release.
4110 They have been replaced with @samp{-mcpu=xxx}.
4112 @item -mcpu=@var{cpu_type}
4113 Set the instruction set, register set, and instruction scheduling parameters
4114 for machine type @var{cpu_type}. Supported values for @var{cpu_type} are
4115 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
4116 @samp{hypersparc}, @samp{sparclite86x}, @samp{f930}, @samp{f934},
4117 @samp{sparclet}, @samp{tsc701}, @samp{v9}, and @samp{ultrasparc}.
4119 Default instruction scheduling parameters are used for values that select
4120 an architecture and not an implementation. These are @samp{v7}, @samp{v8},
4121 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
4123 Here is a list of each supported architecture and their supported
4128 v8: supersparc, hypersparc
4129 sparclite: f930, f934, sparclite86x
4134 @item -mtune=@var{cpu_type}
4135 Set the instruction scheduling parameters for machine type
4136 @var{cpu_type}, but do not set the instruction set or register set that the
4137 option @samp{-mcpu=}@var{cpu_type} would.
4139 The same values for @samp{-mcpu=}@var{cpu_type} are used for
4140 @samp{-mtune=}@*@var{cpu_type}, though the only useful values are those that
4141 select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
4142 @samp{hypersparc}, @samp{f930}, @samp{f934}, @samp{sparclite86x},
4143 @samp{tsc701}, @samp{ultrasparc}.
4147 These @samp{-m} switches are supported in addition to the above
4148 on the SPARCLET processor.
4151 @item -mlittle-endian
4152 Generate code for a processor running in little-endian mode.
4155 Treat register @code{%g0} as a normal register.
4156 GCC will continue to clobber it as necessary but will not assume
4157 it always reads as 0.
4159 @item -mbroken-saverestore
4160 Generate code that does not use non-trivial forms of the @code{save} and
4161 @code{restore} instructions. Early versions of the SPARCLET processor do
4162 not correctly handle @code{save} and @code{restore} instructions used with
4163 arguments. They correctly handle them used without arguments. A @code{save}
4164 instruction used without arguments increments the current window pointer
4165 but does not allocate a new stack frame. It is assumed that the window
4166 overflow trap handler will properly handle this case as will interrupt
4170 These @samp{-m} switches are supported in addition to the above
4171 on SPARC V9 processors in 64 bit environments.
4174 @item -mlittle-endian
4175 Generate code for a processor running in little-endian mode.
4179 Generate code for a 32 bit or 64 bit environment.
4180 The 32 bit environment sets int, long and pointer to 32 bits.
4181 The 64 bit environment sets int to 32 bits and long and pointer
4184 @item -mcmodel=medlow
4185 Generate code for the Medium/Low code model: the program must be linked
4186 in the low 32 bits of the address space. Pointers are 64 bits.
4187 Programs can be statically or dynamically linked.
4189 @item -mcmodel=medmid
4190 Generate code for the Medium/Middle code model: the program must be linked
4191 in the low 44 bits of the address space, the text segment must be less than
4192 2G bytes, and data segment must be within 2G of the text segment.
4193 Pointers are 64 bits.
4195 @item -mcmodel=medany
4196 Generate code for the Medium/Anywhere code model: the program may be linked
4197 anywhere in the address space, the text segment must be less than
4198 2G bytes, and data segment must be within 2G of the text segment.
4199 Pointers are 64 bits.
4201 @item -mcmodel=embmedany
4202 Generate code for the Medium/Anywhere code model for embedded systems:
4203 assume a 32 bit text and a 32 bit data segment, both starting anywhere
4204 (determined at link time). Register %g4 points to the base of the
4205 data segment. Pointers still 64 bits.
4206 Programs are statically linked, PIC is not supported.
4209 @itemx -mno-stack-bias
4210 With @samp{-mstack-bias}, GCC assumes that the stack pointer, and
4211 frame pointer if present, are offset by -2047 which must be added back
4212 when making stack frame references.
4213 Otherwise, assume no such offset is present.
4216 @node Convex Options
4217 @subsection Convex Options
4218 @cindex Convex options
4220 These @samp{-m} options are defined for Convex:
4224 Generate output for C1. The code will run on any Convex machine.
4225 The preprocessor symbol @code{__convex__c1__} is defined.
4228 Generate output for C2. Uses instructions not available on C1.
4229 Scheduling and other optimizations are chosen for max performance on C2.
4230 The preprocessor symbol @code{__convex_c2__} is defined.
4233 Generate output for C32xx. Uses instructions not available on C1.
4234 Scheduling and other optimizations are chosen for max performance on C32.
4235 The preprocessor symbol @code{__convex_c32__} is defined.
4238 Generate output for C34xx. Uses instructions not available on C1.
4239 Scheduling and other optimizations are chosen for max performance on C34.
4240 The preprocessor symbol @code{__convex_c34__} is defined.
4243 Generate output for C38xx. Uses instructions not available on C1.
4244 Scheduling and other optimizations are chosen for max performance on C38.
4245 The preprocessor symbol @code{__convex_c38__} is defined.
4248 Generate code which puts an argument count in the word preceding each
4249 argument list. This is compatible with regular CC, and a few programs
4250 may need the argument count word. GDB and other source-level debuggers
4251 do not need it; this info is in the symbol table.
4254 Omit the argument count word. This is the default.
4256 @item -mvolatile-cache
4257 Allow volatile references to be cached. This is the default.
4259 @item -mvolatile-nocache
4260 Volatile references bypass the data cache, going all the way to memory.
4261 This is only needed for multi-processor code that does not use standard
4262 synchronization instructions. Making non-volatile references to volatile
4263 locations will not necessarily work.
4266 Type long is 32 bits, the same as type int. This is the default.
4269 Type long is 64 bits, the same as type long long. This option is useless,
4270 because no library support exists for it.
4273 @node AMD29K Options
4274 @subsection AMD29K Options
4275 @cindex AMD29K options
4277 These @samp{-m} options are defined for the AMD Am29000:
4282 @cindex DW bit (29k)
4283 Generate code that assumes the @code{DW} bit is set, i.e., that byte and
4284 halfword operations are directly supported by the hardware. This is the
4289 Generate code that assumes the @code{DW} bit is not set.
4293 @cindex byte writes (29k)
4294 Generate code that assumes the system supports byte and halfword write
4295 operations. This is the default.
4299 Generate code that assumes the systems does not support byte and
4300 halfword write operations. @samp{-mnbw} implies @samp{-mndw}.
4304 @cindex memory model (29k)
4305 Use a small memory model that assumes that all function addresses are
4306 either within a single 256 KB segment or at an absolute address of less
4307 than 256k. This allows the @code{call} instruction to be used instead
4308 of a @code{const}, @code{consth}, @code{calli} sequence.
4312 Use the normal memory model: Generate @code{call} instructions only when
4313 calling functions in the same file and @code{calli} instructions
4314 otherwise. This works if each file occupies less than 256 KB but allows
4315 the entire executable to be larger than 256 KB. This is the default.
4318 Always use @code{calli} instructions. Specify this option if you expect
4319 a single file to compile into more than 256 KB of code.
4323 @cindex processor selection (29k)
4324 Generate code for the Am29050.
4328 Generate code for the Am29000. This is the default.
4330 @item -mkernel-registers
4331 @kindex -mkernel-registers
4332 @cindex kernel and user registers (29k)
4333 Generate references to registers @code{gr64-gr95} instead of to
4334 registers @code{gr96-gr127}. This option can be used when compiling
4335 kernel code that wants a set of global registers disjoint from that used
4338 Note that when this option is used, register names in @samp{-f} flags
4339 must use the normal, user-mode, names.
4341 @item -muser-registers
4342 @kindex -muser-registers
4343 Use the normal set of global registers, @code{gr96-gr127}. This is the
4347 @itemx -mno-stack-check
4348 @kindex -mstack-check
4349 @cindex stack checks (29k)
4350 Insert (or do not insert) a call to @code{__msp_check} after each stack
4351 adjustment. This is often used for kernel code.
4354 @itemx -mno-storem-bug
4355 @kindex -mstorem-bug
4356 @cindex storem bug (29k)
4357 @samp{-mstorem-bug} handles 29k processors which cannot handle the
4358 separation of a mtsrim insn and a storem instruction (most 29000 chips
4359 to date, but not the 29050).
4361 @item -mno-reuse-arg-regs
4362 @itemx -mreuse-arg-regs
4363 @kindex -mreuse-arg-regs
4364 @samp{-mno-reuse-arg-regs} tells the compiler to only use incoming argument
4365 registers for copying out arguments. This helps detect calling a function
4366 with fewer arguments than it was declared with.
4368 @item -mno-impure-text
4369 @itemx -mimpure-text
4370 @kindex -mimpure-text
4371 @samp{-mimpure-text}, used in addition to @samp{-shared}, tells the compiler to
4372 not pass @samp{-assert pure-text} to the linker when linking a shared object.
4375 @kindex -msoft-float
4376 Generate output containing library calls for floating point.
4377 @strong{Warning:} the requisite libraries are not part of GCC.
4378 Normally the facilities of the machine's usual C compiler are used, but
4379 this can't be done directly in cross-compilation. You must make your
4380 own arrangements to provide suitable library functions for
4385 Do not generate multm or multmu instructions. This is useful for some embedded
4386 systems which do not have trap handlers for these instructions.
4390 @subsection ARM Options
4393 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
4398 @kindex -mapcs-frame
4399 Generate a stack frame that is compliant with the ARM Procedure Call
4400 Standard for all functions, even if this is not strictly necessary for
4401 correct execution of the code. Specifying @samp{-fomit-frame-pointer}
4402 with this option will cause the stack frames not to be generated for
4403 leaf functions. The default is @samp{-mno-apcs-frame}.
4407 This is a synonym for @samp{-mapcs-frame}.
4411 Generate code for a processor running with a 26-bit program counter,
4412 and conforming to the function calling standards for the APCS 26-bit
4413 option. This option replaces the @samp{-m2} and @samp{-m3} options
4414 of previous releases of the compiler.
4418 Generate code for a processor running with a 32-bit program counter,
4419 and conforming to the function calling standards for the APCS 32-bit
4420 option. This option replaces the @samp{-m6} option of previous releases
4423 @item -mapcs-stack-check
4424 @kindex -mapcs-stack-check
4425 @kindex -mno-apcs-stack-check
4426 Generate code to check the amount of stack space available upon entry to
4427 every function (that actually uses some stack space). If there is
4428 insufficient space available then either the function
4429 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
4430 called, depending upon the amount of stack space required. The run time
4431 system is required to provide these functions. The default is
4432 @samp{-mno-apcs-stack-check}, since this produces smaller code.
4435 @kindex -mapcs-float
4436 @kindex -mno-apcs-float
4437 Pass floating point arguments using the float point registers. This is
4438 one of the variants of the APCS. This option is recommended if the
4439 target hardware has a floating point unit or if a lot of floating point
4440 arithmetic is going to be performed by the code. The default is
4441 @samp{-mno-apcs-float}, since integer only code is slightly increased in
4442 size if @samp{-mapcs-float} is used.
4444 @item -mapcs-reentrant
4445 @kindex -mapcs-reentrant
4446 @kindex -mno-apcs-reentrant
4447 Generate reentrant, position independent code. This is the equivalent
4448 to specifying the @samp{-fpic} option. The default is
4449 @samp{-mno-apcs-reentrant}.
4451 @item -mthumb-interwork
4452 @kindex -mthumb-interwork
4453 @kindex -mno-thumb-interwork
4454 Generate code which supports calling between the ARM and THUMB
4455 instruction sets. Without this option the two instruction sets cannot
4456 be reliably used inside one program. The default is
4457 @samp{-mno-thumb-interwork}, since slightly larger code is generated
4458 when @samp{-mthumb-interwork} is specified.
4460 @item -mno-sched-prolog
4461 @kindex -mno-sched-prolog
4462 @kindex -msched-prolog
4463 Prevent the reordering of instructions in the function prolog, or the
4464 merging of those instruction with the instructions in the function's
4465 body. This means that all functions will start with a recognizable set
4466 of instructions (or in fact one of a choice from a small set of
4467 different function prologues), and this information can be used to
4468 locate the start if functions inside an executable piece of code. The
4469 default is @samp{-msched-prolog}.
4472 Generate output containing floating point instructions. This is the
4476 Generate output containing library calls for floating point.
4477 @strong{Warning:} the requisite libraries are not available for all ARM
4478 targets. Normally the facilities of the machine's usual C compiler are
4479 used, but this cannot be done directly in cross-compilation. You must make
4480 your own arrangements to provide suitable library functions for
4483 @samp{-msoft-float} changes the calling convention in the output file;
4484 therefore, it is only useful if you compile @emph{all} of a program with
4485 this option. In particular, you need to compile @file{libgcc.a}, the
4486 library that comes with GCC, with @samp{-msoft-float} in order for
4489 @item -mlittle-endian
4490 Generate code for a processor running in little-endian mode. This is
4491 the default for all standard configurations.
4494 Generate code for a processor running in big-endian mode; the default is
4495 to compile code for a little-endian processor.
4497 @item -mwords-little-endian
4498 This option only applies when generating code for big-endian processors.
4499 Generate code for a little-endian word order but a big-endian byte
4500 order. That is, a byte order of the form @samp{32107654}. Note: this
4501 option should only be used if you require compatibility with code for
4502 big-endian ARM processors generated by versions of the compiler prior to
4505 @item -malignment-traps
4506 @kindex -malignment-traps
4507 Generate code that will not trap if the MMU has alignment traps enabled.
4508 On ARM architectures prior to ARMv4, there were no instructions to
4509 access half-word objects stored in memory. However, when reading from
4510 memory a feature of the ARM architecture allows a word load to be used,
4511 even if the address is unaligned, and the processor core will rotate the
4512 data as it is being loaded. This option tells the compiler that such
4513 misaligned accesses will cause a MMU trap and that it should instead
4514 synthesise the access as a series of byte accesses. The compiler can
4515 still use word accesses to load half-word data if it knows that the
4516 address is aligned to a word boundary.
4518 This option is ignored when compiling for ARM architecture 4 or later,
4519 since these processors have instructions to directly access half-word
4522 @item -mno-alignment-traps
4523 @kindex -mno-alignment-traps
4524 Generate code that assumes that the MMU will not trap unaligned
4525 accesses. This produces better code when the target instruction set
4526 does not have half-word memory operations (implementations prior to
4529 Note that you cannot use this option to access unaligned word objects,
4530 since the processor will only fetch one 32-bit aligned object from
4533 The default setting for most targets is -mno-alignment-traps, since
4534 this produces better code when there are no half-word memory
4535 instructions available.
4537 @item -mshort-load-bytes
4538 @kindex -mshort-load-bytes
4539 This is a depreciated alias for @samp{-malignment-traps}.
4541 @item -mno-short-load-bytes
4542 @kindex -mno-short-load-bytes
4543 This is a depreciated alias for @samp{-mno-alignment-traps}.
4545 @item -mshort-load-words
4546 @kindex -mshort-load-words
4547 This is a depreciated alias for @samp{-mno-alignment-traps}.
4549 @item -mno-short-load-words
4550 @kindex -mno-short-load-words
4551 This is a depreciated alias for @samp{-malignment-traps}.
4555 This option only applies to RISC iX. Emulate the native BSD-mode
4556 compiler. This is the default if @samp{-ansi} is not specified.
4560 This option only applies to RISC iX. Emulate the native X/Open-mode
4563 @item -mno-symrename
4564 @kindex -mno-symrename
4565 This option only applies to RISC iX. Do not run the assembler
4566 post-processor, @samp{symrename}, after code has been assembled.
4567 Normally it is necessary to modify some of the standard symbols in
4568 preparation for linking with the RISC iX C library; this option
4569 suppresses this pass. The post-processor is never run when the
4570 compiler is built for cross-compilation.
4574 This specifies the name of the target ARM processor. GCC uses this name
4575 to determine what kind of instructions it can use when generating
4576 assembly code. Permissible names are: arm2, arm250, arm3, arm6, arm60,
4577 arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi,
4578 arm70, arm700, arm700i, arm710, arm710c, arm7100, arm7500, arm7500fe,
4579 arm7tdmi, arm8, strongarm, strongarm110, strongarm1100, arm8, arm810,
4580 arm9, arm920, arm920t, arm9tdmi.
4582 @itemx -mtune=<name>
4584 This option is very similar to the @samp{-mcpu=} option, except that
4585 instead of specifying the actual target processor type, and hence
4586 restricting which instructions can be used, it specifies that GCC should
4587 tune the performance of the code as if the target were of the type
4588 specified in this option, but still choosing the instructions that it
4589 will generate based on the cpu specified by a @samp{-mcpu=} option.
4590 For some arm implementations better performance can be obtained by using
4595 This specifies the name of the target ARM architecture. GCC uses this
4596 name to determine what kind of instructions it can use when generating
4597 assembly code. This option can be used in conjunction with or instead
4598 of the @samp{-mcpu=} option. Permissible names are: armv2, armv2a,
4599 armv3, armv3m, armv4, armv4t, armv5.
4601 @item -mfpe=<number>
4602 @itemx -mfp=<number>
4605 This specifes the version of the floating point emulation available on
4606 the target. Permissible values are 2 and 3. @samp{-mfp=} is a synonym
4607 for @samp{-mfpe=} to support older versions of GCC.
4609 @item -mstructure-size-boundary=<n>
4610 @kindex -mstructure-size-boundary
4611 The size of all structures and unions will be rounded up to a multiple
4612 of the number of bits set by this option. Permissible values are 8 and
4613 32. The default value varies for different toolchains. For the COFF
4614 targeted toolchain the default value is 8. Specifying the larger number
4615 can produce faster, more efficient code, but can also increase the size
4616 of the program. The two values are potentially incompatible. Code
4617 compiled with one value cannot necessarily expect to work with code or
4618 libraries compiled with the other value, if they exchange information
4619 using structures or unions. Programmers are encouraged to use the 32
4620 value as future versions of the toolchain may default to this value.
4622 @item -mabort-on-noreturn
4623 @kindex -mabort-on-noreturn
4624 @kindex -mnoabort-on-noreturn
4625 Generate a call to the function abort at the end of a noreturn function.
4626 It will be executed if the function tries to return.
4629 @itemx -mno-long-calls
4630 Tells the compiler to perform function calls by first loading the
4631 address of the function into a register and then performing a subroutine
4632 call on this register. This switch is needed if the target function
4633 will lie outside of the 64 megabyte addressing range of the offset based
4634 version of subroutine call instruction.
4636 Even if this switch is enabled, not all function calls will be turned
4637 into long calls. The heuristic is that static functions, functions
4638 which have the @samp{short-call} attribute, functions that are inside
4639 the scope of a @samp{#pragma no_long_calls} directive and functions whose
4640 definitions have already been compiled within the current compilation
4641 unit, will not be turned into long calls. The exception to this rule is
4642 that weak function defintions, functions with the @samp{long-call}
4643 attribute or the @samp{section} attribute, and functions that are within
4644 the scope of a @samp{#pragma long_calls} directive, will always be
4645 turned into long calls.
4647 This feature is not enabled by default. Specifying
4648 @samp{--no-long-calls} will restore the default behaviour, as will
4649 placing the function calls within the scope of a @samp{#pragma
4650 long_calls_off} directive. Note these switches have no effect on how
4651 the compiler generates code to handle function calls via function
4654 @item -mnop-fun-dllimport
4655 @kindex -mnop-fun-dllimport
4656 Disable the support for the @emph{dllimport} attribute.
4658 @item -msingle-pic-base
4659 @kindex -msingle-pic-base
4660 Treat the register used for PIC addressing as read-only, rather than
4661 loading it in the prologue for each function. The run-time system is
4662 responsible for initialising this register with an appropriate value
4663 before execution begins.
4665 @item -mpic-register=<reg>
4666 @kindex -mpic-register=
4667 Specify the register to be used for PIC addressing. The default is R10
4668 unless stack-checking is enabled, when R9 is used.
4673 @subsection Thumb Options
4674 @cindex Thumb Options
4678 @item -mthumb-interwork
4679 @kindex -mthumb-interwork
4680 @kindex -mno-thumb-interwork
4681 Generate code which supports calling between the THUMB and ARM
4682 instruction sets. Without this option the two instruction sets cannot
4683 be reliably used inside one program. The default is
4684 @samp{-mno-thumb-interwork}, since slightly smaller code is generated
4688 @kindex -mtpcs-frame
4689 @kindex -mno-tpcs-frame
4690 Generate a stack frame that is compliant with the Thumb Procedure Call
4691 Standard for all non-leaf functions. (A leaf function is one that does
4692 not call any other functions). The default is @samp{-mno-apcs-frame}.
4694 @item -mtpcs-leaf-frame
4695 @kindex -mtpcs-leaf-frame
4696 @kindex -mno-tpcs-leaf-frame
4697 Generate a stack frame that is compliant with the Thumb Procedure Call
4698 Standard for all leaf functions. (A leaf function is one that does
4699 not call any other functions). The default is @samp{-mno-apcs-leaf-frame}.
4701 @item -mlittle-endian
4702 @kindex -mlittle-endian
4703 Generate code for a processor running in little-endian mode. This is
4704 the default for all standard configurations.
4707 @kindex -mbig-endian
4708 Generate code for a processor running in big-endian mode.
4710 @item -mstructure-size-boundary=<n>
4711 @kindex -mstructure-size-boundary
4712 The size of all structures and unions will be rounded up to a multiple
4713 of the number of bits set by this option. Permissible values are 8 and
4714 32. The default value varies for different toolchains. For the COFF
4715 targeted toolchain the default value is 8. Specifying the larger number
4716 can produced faster, more efficient code, but can also increase the size
4717 of the program. The two values are potentially incompatible. Code
4718 compiled with one value cannot necessarily expect to work with code or
4719 libraries compiled with the other value, if they exchange information
4720 using structures or unions. Programmers are encouraged to use the 32
4721 value as future versions of the toolchain may default to this value.
4723 @item -mnop-fun-dllimport
4724 @kindex -mnop-fun-dllimport
4725 Disable the support for the @emph{dllimport} attribute.
4727 @item -mcallee-super-interworking
4728 @kindex -mcallee-super-interworking
4729 Gives all externally visible functions in the file being compiled an ARM
4730 instruction set header which switches to Thumb mode before executing the
4731 rest of the function. This allows these functions to be called from
4732 non-interworking code.
4734 @item -mcaller-super-interworking
4735 @kindex -mcaller-super-interworking
4736 Allows calls via function pointers (including virtual functions) to
4737 execute correctly regardless of whether the target code has been
4738 compiled for interworking or not. There is a small overhead in the cost
4739 of executing a function pointer if this option is enabled.
4741 @item -msingle-pic-base
4742 @kindex -msingle-pic-base
4743 Treat the register used for PIC addressing as read-only, rather than
4744 loading it in the prologue for each function. The run-time system is
4745 responsible for initialising this register with an appropriate value
4746 before execution begins.
4748 @item -mpic-register=<reg>
4749 @kindex -mpic-register=
4750 Specify the register to be used for PIC addressing. The default is R10.
4754 @node MN10200 Options
4755 @subsection MN10200 Options
4756 @cindex MN10200 options
4757 These @samp{-m} options are defined for Matsushita MN10200 architectures:
4761 Indicate to the linker that it should perform a relaxation optimization pass
4762 to shorten branches, calls and absolute memory addresses. This option only
4763 has an effect when used on the command line for the final link step.
4765 This option makes symbolic debugging impossible.
4768 @node MN10300 Options
4769 @subsection MN10300 Options
4770 @cindex MN10300 options
4771 These @samp{-m} options are defined for Matsushita MN10300 architectures:
4775 Generate code to avoid bugs in the multiply instructions for the MN10300
4776 processors. This is the default.
4779 Do not generate code to avoid bugs in the multiply instructions for the
4783 Generate code which uses features specific to the AM33 processor.
4786 Do not generate code which uses features specific to the AM33 processor. This
4790 Indicate to the linker that it should perform a relaxation optimization pass
4791 to shorten branches, calls and absolute memory addresses. This option only
4792 has an effect when used on the command line for the final link step.
4794 This option makes symbolic debugging impossible.
4798 @node M32R/D Options
4799 @subsection M32R/D Options
4800 @cindex M32R/D options
4802 These @samp{-m} options are defined for Mitsubishi M32R/D architectures:
4805 @item -mcode-model=small
4806 Assume all objects live in the lower 16MB of memory (so that their addresses
4807 can be loaded with the @code{ld24} instruction), and assume all subroutines
4808 are reachable with the @code{bl} instruction.
4809 This is the default.
4811 The addressability of a particular object can be set with the
4812 @code{model} attribute.
4814 @item -mcode-model=medium
4815 Assume objects may be anywhere in the 32 bit address space (the compiler
4816 will generate @code{seth/add3} instructions to load their addresses), and
4817 assume all subroutines are reachable with the @code{bl} instruction.
4819 @item -mcode-model=large
4820 Assume objects may be anywhere in the 32 bit address space (the compiler
4821 will generate @code{seth/add3} instructions to load their addresses), and
4822 assume subroutines may not be reachable with the @code{bl} instruction
4823 (the compiler will generate the much slower @code{seth/add3/jl}
4824 instruction sequence).
4827 Disable use of the small data area. Variables will be put into
4828 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
4829 @code{section} attribute has been specified).
4830 This is the default.
4832 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
4833 Objects may be explicitly put in the small data area with the
4834 @code{section} attribute using one of these sections.
4837 Put small global and static data in the small data area, but do not
4838 generate special code to reference them.
4841 Put small global and static data in the small data area, and generate
4842 special instructions to reference them.
4845 @cindex smaller data references
4846 Put global and static objects less than or equal to @var{num} bytes
4847 into the small data or bss sections instead of the normal data or bss
4848 sections. The default value of @var{num} is 8.
4849 The @samp{-msdata} option must be set to one of @samp{sdata} or @samp{use}
4850 for this option to have any effect.
4852 All modules should be compiled with the same @samp{-G @var{num}} value.
4853 Compiling with different values of @var{num} may or may not work; if it
4854 doesn't the linker will give an error message - incorrect code will not be
4860 @subsection M88K Options
4861 @cindex M88k options
4863 These @samp{-m} options are defined for Motorola 88k architectures:
4868 Generate code that works well on both the m88100 and the
4873 Generate code that works best for the m88100, but that also
4878 Generate code that works best for the m88110, and may not run
4883 Obsolete option to be removed from the next revision.
4886 @item -midentify-revision
4887 @kindex -midentify-revision
4889 @cindex identifying source, compiler (88k)
4890 Include an @code{ident} directive in the assembler output recording the
4891 source file name, compiler name and version, timestamp, and compilation
4894 @item -mno-underscores
4895 @kindex -mno-underscores
4896 @cindex underscores, avoiding (88k)
4897 In assembler output, emit symbol names without adding an underscore
4898 character at the beginning of each name. The default is to use an
4899 underscore as prefix on each name.
4901 @item -mocs-debug-info
4902 @itemx -mno-ocs-debug-info
4903 @kindex -mocs-debug-info
4904 @kindex -mno-ocs-debug-info
4906 @cindex debugging, 88k OCS
4907 Include (or omit) additional debugging information (about registers used
4908 in each stack frame) as specified in the 88open Object Compatibility
4909 Standard, ``OCS''. This extra information allows debugging of code that
4910 has had the frame pointer eliminated. The default for DG/UX, SVr4, and
4911 Delta 88 SVr3.2 is to include this information; other 88k configurations
4912 omit this information by default.
4914 @item -mocs-frame-position
4915 @kindex -mocs-frame-position
4916 @cindex register positions in frame (88k)
4917 When emitting COFF debugging information for automatic variables and
4918 parameters stored on the stack, use the offset from the canonical frame
4919 address, which is the stack pointer (register 31) on entry to the
4920 function. The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
4921 @samp{-mocs-frame-position}; other 88k configurations have the default
4922 @samp{-mno-ocs-frame-position}.
4924 @item -mno-ocs-frame-position
4925 @kindex -mno-ocs-frame-position
4926 @cindex register positions in frame (88k)
4927 When emitting COFF debugging information for automatic variables and
4928 parameters stored on the stack, use the offset from the frame pointer
4929 register (register 30). When this option is in effect, the frame
4930 pointer is not eliminated when debugging information is selected by the
4933 @item -moptimize-arg-area
4934 @itemx -mno-optimize-arg-area
4935 @kindex -moptimize-arg-area
4936 @kindex -mno-optimize-arg-area
4937 @cindex arguments in frame (88k)
4938 Control how function arguments are stored in stack frames.
4939 @samp{-moptimize-arg-area} saves space by optimizing them, but this
4940 conflicts with the 88open specifications. The opposite alternative,
4941 @samp{-mno-optimize-arg-area}, agrees with 88open standards. By default
4942 GCC does not optimize the argument area.
4944 @item -mshort-data-@var{num}
4945 @kindex -mshort-data-@var{num}
4946 @cindex smaller data references (88k)
4947 @cindex r0-relative references (88k)
4948 Generate smaller data references by making them relative to @code{r0},
4949 which allows loading a value using a single instruction (rather than the
4950 usual two). You control which data references are affected by
4951 specifying @var{num} with this option. For example, if you specify
4952 @samp{-mshort-data-512}, then the data references affected are those
4953 involving displacements of less than 512 bytes.
4954 @samp{-mshort-data-@var{num}} is not effective for @var{num} greater
4957 @item -mserialize-volatile
4958 @kindex -mserialize-volatile
4959 @itemx -mno-serialize-volatile
4960 @kindex -mno-serialize-volatile
4961 @cindex sequential consistency on 88k
4962 Do, or don't, generate code to guarantee sequential consistency
4963 of volatile memory references. By default, consistency is
4966 The order of memory references made by the MC88110 processor does
4967 not always match the order of the instructions requesting those
4968 references. In particular, a load instruction may execute before
4969 a preceding store instruction. Such reordering violates
4970 sequential consistency of volatile memory references, when there
4971 are multiple processors. When consistency must be guaranteed,
4972 GNU C generates special instructions, as needed, to force
4973 execution in the proper order.
4975 The MC88100 processor does not reorder memory references and so
4976 always provides sequential consistency. However, by default, GNU
4977 C generates the special instructions to guarantee consistency
4978 even when you use @samp{-m88100}, so that the code may be run on an
4979 MC88110 processor. If you intend to run your code only on the
4980 MC88100 processor, you may use @samp{-mno-serialize-volatile}.
4982 The extra code generated to guarantee consistency may affect the
4983 performance of your application. If you know that you can safely
4984 forgo this guarantee, you may use @samp{-mno-serialize-volatile}.
4990 @cindex assembler syntax, 88k
4992 Turn on (@samp{-msvr4}) or off (@samp{-msvr3}) compiler extensions
4993 related to System V release 4 (SVr4). This controls the following:
4997 Which variant of the assembler syntax to emit.
4999 @samp{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
5000 that is used on System V release 4.
5002 @samp{-msvr4} makes GCC issue additional declaration directives used in
5006 @samp{-msvr4} is the default for the m88k-motorola-sysv4 and
5007 m88k-dg-dgux m88k configurations. @samp{-msvr3} is the default for all
5008 other m88k configurations.
5010 @item -mversion-03.00
5011 @kindex -mversion-03.00
5012 This option is obsolete, and is ignored.
5013 @c ??? which asm syntax better for GAS? option there too?
5015 @item -mno-check-zero-division
5016 @itemx -mcheck-zero-division
5017 @kindex -mno-check-zero-division
5018 @kindex -mcheck-zero-division
5019 @cindex zero division on 88k
5020 Do, or don't, generate code to guarantee that integer division by
5021 zero will be detected. By default, detection is guaranteed.
5023 Some models of the MC88100 processor fail to trap upon integer
5024 division by zero under certain conditions. By default, when
5025 compiling code that might be run on such a processor, GNU C
5026 generates code that explicitly checks for zero-valued divisors
5027 and traps with exception number 503 when one is detected. Use of
5028 mno-check-zero-division suppresses such checking for code
5029 generated to run on an MC88100 processor.
5031 GNU C assumes that the MC88110 processor correctly detects all
5032 instances of integer division by zero. When @samp{-m88110} is
5033 specified, both @samp{-mcheck-zero-division} and
5034 @samp{-mno-check-zero-division} are ignored, and no explicit checks for
5035 zero-valued divisors are generated.
5037 @item -muse-div-instruction
5038 @kindex -muse-div-instruction
5039 @cindex divide instruction, 88k
5040 Use the div instruction for signed integer division on the
5041 MC88100 processor. By default, the div instruction is not used.
5043 On the MC88100 processor the signed integer division instruction
5044 div) traps to the operating system on a negative operand. The
5045 operating system transparently completes the operation, but at a
5046 large cost in execution time. By default, when compiling code
5047 that might be run on an MC88100 processor, GNU C emulates signed
5048 integer division using the unsigned integer division instruction
5049 divu), thereby avoiding the large penalty of a trap to the
5050 operating system. Such emulation has its own, smaller, execution
5051 cost in both time and space. To the extent that your code's
5052 important signed integer division operations are performed on two
5053 nonnegative operands, it may be desirable to use the div
5054 instruction directly.
5056 On the MC88110 processor the div instruction (also known as the
5057 divs instruction) processes negative operands without trapping to
5058 the operating system. When @samp{-m88110} is specified,
5059 @samp{-muse-div-instruction} is ignored, and the div instruction is used
5060 for signed integer division.
5062 Note that the result of dividing INT_MIN by -1 is undefined. In
5063 particular, the behavior of such a division with and without
5064 @samp{-muse-div-instruction} may differ.
5066 @item -mtrap-large-shift
5067 @itemx -mhandle-large-shift
5068 @kindex -mtrap-large-shift
5069 @kindex -mhandle-large-shift
5070 @cindex bit shift overflow (88k)
5071 @cindex large bit shifts (88k)
5072 Include code to detect bit-shifts of more than 31 bits; respectively,
5073 trap such shifts or emit code to handle them properly. By default GCC
5074 makes no special provision for large bit shifts.
5076 @item -mwarn-passed-structs
5077 @kindex -mwarn-passed-structs
5078 @cindex structure passing (88k)
5079 Warn when a function passes a struct as an argument or result.
5080 Structure-passing conventions have changed during the evolution of the C
5081 language, and are often the source of portability problems. By default,
5082 GCC issues no such warning.
5085 @node RS/6000 and PowerPC Options
5086 @subsection IBM RS/6000 and PowerPC Options
5087 @cindex RS/6000 and PowerPC Options
5088 @cindex IBM RS/6000 and PowerPC Options
5090 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
5098 @itemx -mpowerpc-gpopt
5099 @itemx -mno-powerpc-gpopt
5100 @itemx -mpowerpc-gfxopt
5101 @itemx -mno-powerpc-gfxopt
5103 @itemx -mno-powerpc64
5107 @kindex -mpowerpc-gpopt
5108 @kindex -mpowerpc-gfxopt
5110 GCC supports two related instruction set architectures for the
5111 RS/6000 and PowerPC. The @dfn{POWER} instruction set are those
5112 instructions supported by the @samp{rios} chip set used in the original
5113 RS/6000 systems and the @dfn{PowerPC} instruction set is the
5114 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
5115 the IBM 4xx microprocessors.
5117 Neither architecture is a subset of the other. However there is a
5118 large common subset of instructions supported by both. An MQ
5119 register is included in processors supporting the POWER architecture.
5121 You use these options to specify which instructions are available on the
5122 processor you are using. The default value of these options is
5123 determined when configuring GCC. Specifying the
5124 @samp{-mcpu=@var{cpu_type}} overrides the specification of these
5125 options. We recommend you use the @samp{-mcpu=@var{cpu_type}} option
5126 rather than the options listed above.
5128 The @samp{-mpower} option allows GCC to generate instructions that
5129 are found only in the POWER architecture and to use the MQ register.
5130 Specifying @samp{-mpower2} implies @samp{-power} and also allows GCC
5131 to generate instructions that are present in the POWER2 architecture but
5132 not the original POWER architecture.
5134 The @samp{-mpowerpc} option allows GCC to generate instructions that
5135 are found only in the 32-bit subset of the PowerPC architecture.
5136 Specifying @samp{-mpowerpc-gpopt} implies @samp{-mpowerpc} and also allows
5137 GCC to use the optional PowerPC architecture instructions in the
5138 General Purpose group, including floating-point square root. Specifying
5139 @samp{-mpowerpc-gfxopt} implies @samp{-mpowerpc} and also allows GCC to
5140 use the optional PowerPC architecture instructions in the Graphics
5141 group, including floating-point select.
5143 The @samp{-mpowerpc64} option allows GCC to generate the additional
5144 64-bit instructions that are found in the full PowerPC64 architecture
5145 and to treat GPRs as 64-bit, doubleword quantities. GCC defaults to
5146 @samp{-mno-powerpc64}.
5148 If you specify both @samp{-mno-power} and @samp{-mno-powerpc}, GCC
5149 will use only the instructions in the common subset of both
5150 architectures plus some special AIX common-mode calls, and will not use
5151 the MQ register. Specifying both @samp{-mpower} and @samp{-mpowerpc}
5152 permits GCC to use any instruction from either architecture and to
5153 allow use of the MQ register; specify this for the Motorola MPC601.
5155 @item -mnew-mnemonics
5156 @itemx -mold-mnemonics
5157 @kindex -mnew-mnemonics
5158 @kindex -mold-mnemonics
5159 Select which mnemonics to use in the generated assembler code.
5160 @samp{-mnew-mnemonics} requests output that uses the assembler mnemonics
5161 defined for the PowerPC architecture, while @samp{-mold-mnemonics}
5162 requests the assembler mnemonics defined for the POWER architecture.
5163 Instructions defined in only one architecture have only one mnemonic;
5164 GCC uses that mnemonic irrespective of which of these options is
5167 GCC defaults to the mnemonics appropriate for the architecture in
5168 use. Specifying @samp{-mcpu=@var{cpu_type}} sometimes overrides the
5169 value of these option. Unless you are building a cross-compiler, you
5170 should normally not specify either @samp{-mnew-mnemonics} or
5171 @samp{-mold-mnemonics}, but should instead accept the default.
5173 @item -mcpu=@var{cpu_type}
5175 Set architecture type, register usage, choice of mnemonics, and
5176 instruction scheduling parameters for machine type @var{cpu_type}.
5177 Supported values for @var{cpu_type} are @samp{rios}, @samp{rios1},
5178 @samp{rsc}, @samp{rios2}, @samp{rs64a}, @samp{601}, @samp{602},
5179 @samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620},
5180 @samp{630}, @samp{740}, @samp{750}, @samp{power}, @samp{power2},
5181 @samp{powerpc}, @samp{403}, @samp{505}, @samp{801}, @samp{821},
5182 @samp{823}, and @samp{860} and @samp{common}. @samp{-mcpu=power},
5183 @samp{-mcpu=power2}, @samp{-mcpu=powerpc}, and @samp{-mcpu=powerpc64}
5184 specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not MPC601),
5185 and 64-bit PowerPC architecture machine types, with an appropriate,
5186 generic processor model assumed for scheduling purposes.@refill
5188 Specifying any of the following options:
5189 @samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
5190 @samp{-mcpu=power}, or @samp{-mcpu=power2}
5191 enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option;
5192 @samp{-mcpu=601} enables both the @samp{-mpower} and @samp{-mpowerpc} options.
5193 All of @samp{-mcpu=rs64a}, @samp{-mcpu=602}, @samp{-mcpu=603},
5194 @samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=620}, @samp{-mcpu=630},
5195 @samp{-mcpu=740}, and @samp{-mcpu=750}
5196 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
5197 Exactly similarly, all of @samp{-mcpu=403},
5198 @samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc}
5199 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
5200 @samp{-mcpu=common} disables both the
5201 @samp{-mpower} and @samp{-mpowerpc} options.@refill
5203 AIX versions 4 or greater selects @samp{-mcpu=common} by default, so
5204 that code will operate on all members of the RS/6000 POWER and PowerPC
5205 families. In that case, GCC will use only the instructions in the
5206 common subset of both architectures plus some special AIX common-mode
5207 calls, and will not use the MQ register. GCC assumes a generic
5208 processor model for scheduling purposes.
5210 Specifying any of the options @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
5211 @samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} also
5212 disables the @samp{new-mnemonics} option. Specifying @samp{-mcpu=601},
5213 @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e}, @samp{-mcpu=604},
5214 @samp{-mcpu=620}, @samp{-mcpu=630}, @samp{-mcpu=403}, @samp{-mcpu=505},
5215 @samp{-mcpu=821}, @samp{-mcpu=860} or @samp{-mcpu=powerpc} also enables
5216 the @samp{new-mnemonics} option.@refill
5218 Specifying @samp{-mcpu=403}, @samp{-mcpu=821}, or @samp{-mcpu=860} also
5219 enables the @samp{-msoft-float} option.
5221 @item -mtune=@var{cpu_type}
5222 Set the instruction scheduling parameters for machine type
5223 @var{cpu_type}, but do not set the architecture type, register usage,
5224 choice of mnemonics like @samp{-mcpu=}@var{cpu_type} would. The same
5225 values for @var{cpu_type} are used for @samp{-mtune=}@var{cpu_type} as
5226 for @samp{-mcpu=}@var{cpu_type}. The @samp{-mtune=}@var{cpu_type}
5227 option overrides the @samp{-mcpu=}@var{cpu_type} option in terms of
5228 instruction scheduling parameters.
5231 @itemx -mno-fp-in-toc
5232 @itemx -mno-sum-in-toc
5233 @itemx -mminimal-toc
5234 @kindex -mminimal-toc
5235 Modify generation of the TOC (Table Of Contents), which is created for
5236 every executable file. The @samp{-mfull-toc} option is selected by
5237 default. In that case, GCC will allocate at least one TOC entry for
5238 each unique non-automatic variable reference in your program. GCC
5239 will also place floating-point constants in the TOC. However, only
5240 16,384 entries are available in the TOC.
5242 If you receive a linker error message that saying you have overflowed
5243 the available TOC space, you can reduce the amount of TOC space used
5244 with the @samp{-mno-fp-in-toc} and @samp{-mno-sum-in-toc} options.
5245 @samp{-mno-fp-in-toc} prevents GCC from putting floating-point
5246 constants in the TOC and @samp{-mno-sum-in-toc} forces GCC to
5247 generate code to calculate the sum of an address and a constant at
5248 run-time instead of putting that sum into the TOC. You may specify one
5249 or both of these options. Each causes GCC to produce very slightly
5250 slower and larger code at the expense of conserving TOC space.
5252 If you still run out of space in the TOC even when you specify both of
5253 these options, specify @samp{-mminimal-toc} instead. This option causes
5254 GCC to make only one TOC entry for every file. When you specify this
5255 option, GCC will produce code that is slower and larger but which
5256 uses extremely little TOC space. You may wish to use this option
5257 only on files that contain less frequently executed code. @refill
5263 Enable 64-bit PowerPC ABI and calling convention: 64-bit pointers, 64-bit
5264 @code{long} type, and the infrastructure needed to support them.
5265 Specifying @samp{-m64} implies @samp{-mpowerpc64} and
5266 @samp{-mpowerpc}, while @samp{-m32} disables the 64-bit ABI and
5267 implies @samp{-mno-powerpc64}. GCC defaults to @samp{-m32}.
5272 On AIX, pass floating-point arguments to prototyped functions beyond the
5273 register save area (RSA) on the stack in addition to argument FPRs. The
5274 AIX calling convention was extended but not initially documented to
5275 handle an obscure K&R C case of calling a function that takes the
5276 address of its arguments with fewer arguments than declared. AIX XL
5277 compilers access floating point arguments which do not fit in the
5278 RSA from the stack when a subroutine is compiled without
5279 optimization. Because always storing floating-point arguments on the
5280 stack is inefficient and rarely needed, this option is not enabled by
5281 default and only is necessary when calling subroutines compiled by AIX
5282 XL compilers without optimization.
5286 Support @dfn{AIX Threads}. Link an application written to use
5287 @dfn{pthreads} with special libraries and startup code to enable the
5292 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE). Link an
5293 application written to use message passing with special startup code to
5294 enable the application to run. The system must have PE installed in the
5295 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
5296 must be overridden with the @samp{-specs=} option to specify the
5297 appropriate directory location. The Parallel Environment does not
5298 support threads, so the @samp{-mpe} option and the @samp{-mthreads}
5299 option are incompatible.
5303 @kindex -msoft-float
5304 Generate code that does not use (uses) the floating-point register set.
5305 Software floating point emulation is provided if you use the
5306 @samp{-msoft-float} option, and pass the option to GCC when linking.
5309 @itemx -mno-multiple
5310 Generate code that uses (does not use) the load multiple word
5311 instructions and the store multiple word instructions. These
5312 instructions are generated by default on POWER systems, and not
5313 generated on PowerPC systems. Do not use @samp{-mmultiple} on little
5314 endian PowerPC systems, since those instructions do not work when the
5315 processor is in little endian mode. The exceptions are PPC740 and
5316 PPC750 which permit the instructions usage in little endian mode.
5321 Generate code that uses (does not use) the load string instructions
5322 and the store string word instructions to save multiple registers and
5323 do small block moves. These instructions are generated by default on
5324 POWER systems, and not generated on PowerPC systems. Do not use
5325 @samp{-mstring} on little endian PowerPC systems, since those
5326 instructions do not work when the processor is in little endian mode.
5327 The exceptions are PPC740 and PPC750 which permit the instructions
5328 usage in little endian mode.
5333 Generate code that uses (does not use) the load or store instructions
5334 that update the base register to the address of the calculated memory
5335 location. These instructions are generated by default. If you use
5336 @samp{-mno-update}, there is a small window between the time that the
5337 stack pointer is updated and the address of the previous frame is
5338 stored, which means code that walks the stack frame across interrupts or
5339 signals may get corrupted data.
5342 @itemx -mno-fused-madd
5343 @kindex -mfused-madd
5344 Generate code that uses (does not use) the floating point multiply and
5345 accumulate instructions. These instructions are generated by default if
5346 hardware floating is used.
5348 @item -mno-bit-align
5351 On System V.4 and embedded PowerPC systems do not (do) force structures
5352 and unions that contain bit fields to be aligned to the base type of the
5355 For example, by default a structure containing nothing but 8
5356 @code{unsigned} bitfields of length 1 would be aligned to a 4 byte
5357 boundary and have a size of 4 bytes. By using @samp{-mno-bit-align},
5358 the structure would be aligned to a 1 byte boundary and be one byte in
5361 @item -mno-strict-align
5362 @itemx -mstrict-align
5363 @kindex -mstrict-align
5364 On System V.4 and embedded PowerPC systems do not (do) assume that
5365 unaligned memory references will be handled by the system.
5368 @itemx -mno-relocatable
5369 @kindex -mrelocatable
5370 On embedded PowerPC systems generate code that allows (does not allow)
5371 the program to be relocated to a different address at runtime. If you
5372 use @samp{-mrelocatable} on any module, all objects linked together must
5373 be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}.
5375 @item -mrelocatable-lib
5376 @itemx -mno-relocatable-lib
5377 On embedded PowerPC systems generate code that allows (does not allow)
5378 the program to be relocated to a different address at runtime. Modules
5379 compiled with @samp{-mrelocatable-lib} can be linked with either modules
5380 compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or
5381 with modules compiled with the @samp{-mrelocatable} options.
5385 On System V.4 and embedded PowerPC systems do not (do) assume that
5386 register 2 contains a pointer to a global area pointing to the addresses
5387 used in the program.
5390 @itemx -mlittle-endian
5391 On System V.4 and embedded PowerPC systems compile code for the
5392 processor in little endian mode. The @samp{-mlittle-endian} option is
5393 the same as @samp{-mlittle}.
5397 On System V.4 and embedded PowerPC systems compile code for the
5398 processor in big endian mode. The @samp{-mbig-endian} option is
5399 the same as @samp{-mbig}.
5402 On System V.4 and embedded PowerPC systems compile code using calling
5403 conventions that adheres to the March 1995 draft of the System V
5404 Application Binary Interface, PowerPC processor supplement. This is the
5405 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
5407 @item -mcall-sysv-eabi
5408 Specify both @samp{-mcall-sysv} and @samp{-meabi} options.
5410 @item -mcall-sysv-noeabi
5411 Specify both @samp{-mcall-sysv} and @samp{-mno-eabi} options.
5414 On System V.4 and embedded PowerPC systems compile code using calling
5415 conventions that are similar to those used on AIX. This is the
5416 default if you configured GCC using @samp{powerpc-*-eabiaix}.
5418 @item -mcall-solaris
5419 On System V.4 and embedded PowerPC systems compile code for the Solaris
5423 On System V.4 and embedded PowerPC systems compile code for the
5424 Linux-based GNU system.
5427 @itemx -mno-prototype
5428 On System V.4 and embedded PowerPC systems assume that all calls to
5429 variable argument functions are properly prototyped. Otherwise, the
5430 compiler must insert an instruction before every non prototyped call to
5431 set or clear bit 6 of the condition code register (@var{CR}) to
5432 indicate whether floating point values were passed in the floating point
5433 registers in case the function takes a variable arguments. With
5434 @samp{-mprototype}, only calls to prototyped variable argument functions
5435 will set or clear the bit.
5438 On embedded PowerPC systems, assume that the startup module is called
5439 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
5440 @file{libc.a}. This is the default for @samp{powerpc-*-eabisim}.
5444 On embedded PowerPC systems, assume that the startup module is called
5445 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
5449 On embedded PowerPC systems, assume that the startup module is called
5450 @file{crt0.o} and the standard C libraries are @file{libads.a} and
5454 On embedded PowerPC systems, assume that the startup module is called
5455 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
5459 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
5460 header to indicate that @samp{eabi} extended relocations are used.
5464 On System V.4 and embedded PowerPC systems do (do not) adhere to the
5465 Embedded Applications Binary Interface (eabi) which is a set of
5466 modifications to the System V.4 specifications. Selecting @code{-meabi}
5467 means that the stack is aligned to an 8 byte boundary, a function
5468 @code{__eabi} is called to from @code{main} to set up the eabi
5469 environment, and the @samp{-msdata} option can use both @code{r2} and
5470 @code{r13} to point to two separate small data areas. Selecting
5471 @code{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
5472 do not call an initialization function from @code{main}, and the
5473 @samp{-msdata} option will only use @code{r13} to point to a single
5474 small data area. The @samp{-meabi} option is on by default if you
5475 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
5478 On System V.4 and embedded PowerPC systems, put small initialized
5479 @code{const} global and static data in the @samp{.sdata2} section, which
5480 is pointed to by register @code{r2}. Put small initialized
5481 non-@code{const} global and static data in the @samp{.sdata} section,
5482 which is pointed to by register @code{r13}. Put small uninitialized
5483 global and static data in the @samp{.sbss} section, which is adjacent to
5484 the @samp{.sdata} section. The @samp{-msdata=eabi} option is
5485 incompatible with the @samp{-mrelocatable} option. The
5486 @samp{-msdata=eabi} option also sets the @samp{-memb} option.
5489 On System V.4 and embedded PowerPC systems, put small global and static
5490 data in the @samp{.sdata} section, which is pointed to by register
5491 @code{r13}. Put small uninitialized global and static data in the
5492 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
5493 The @samp{-msdata=sysv} option is incompatible with the
5494 @samp{-mrelocatable} option.
5496 @item -msdata=default
5498 On System V.4 and embedded PowerPC systems, if @samp{-meabi} is used,
5499 compile code the same as @samp{-msdata=eabi}, otherwise compile code the
5500 same as @samp{-msdata=sysv}.
5503 On System V.4 and embedded PowerPC systems, put small global and static
5504 data in the @samp{.sdata} section. Put small uninitialized global and
5505 static data in the @samp{.sbss} section. Do not use register @code{r13}
5506 to address small data however. This is the default behavior unless
5507 other @samp{-msdata} options are used.
5511 On embedded PowerPC systems, put all initialized global and static data
5512 in the @samp{.data} section, and all uninitialized data in the
5513 @samp{.bss} section.
5516 @cindex smaller data references (PowerPC)
5517 @cindex .sdata/.sdata2 references (PowerPC)
5518 On embedded PowerPC systems, put global and static items less than or
5519 equal to @var{num} bytes into the small data or bss sections instead of
5520 the normal data or bss section. By default, @var{num} is 8. The
5521 @samp{-G @var{num}} switch is also passed to the linker.
5522 All modules should be compiled with the same @samp{-G @var{num}} value.
5525 @itemx -mno-regnames
5526 On System V.4 and embedded PowerPC systems do (do not) emit register
5527 names in the assembly language output using symbolic forms.
5532 @subsection IBM RT Options
5534 @cindex IBM RT options
5536 These @samp{-m} options are defined for the IBM RT PC:
5540 Use an in-line code sequence for integer multiplies. This is the
5543 @item -mcall-lib-mul
5544 Call @code{lmul$$} for integer multiples.
5546 @item -mfull-fp-blocks
5547 Generate full-size floating point data blocks, including the minimum
5548 amount of scratch space recommended by IBM. This is the default.
5550 @item -mminimum-fp-blocks
5551 Do not include extra scratch space in floating point data blocks. This
5552 results in smaller code, but slower execution, since scratch space must
5553 be allocated dynamically.
5555 @cindex @file{varargs.h} and RT PC
5556 @cindex @file{stdarg.h} and RT PC
5557 @item -mfp-arg-in-fpregs
5558 Use a calling sequence incompatible with the IBM calling convention in
5559 which floating point arguments are passed in floating point registers.
5560 Note that @code{varargs.h} and @code{stdargs.h} will not work with
5561 floating point operands if this option is specified.
5563 @item -mfp-arg-in-gregs
5564 Use the normal calling convention for floating point arguments. This is
5567 @item -mhc-struct-return
5568 Return structures of more than one word in memory, rather than in a
5569 register. This provides compatibility with the MetaWare HighC (hc)
5570 compiler. Use the option @samp{-fpcc-struct-return} for compatibility
5571 with the Portable C Compiler (pcc).
5573 @item -mnohc-struct-return
5574 Return some structures of more than one word in registers, when
5575 convenient. This is the default. For compatibility with the
5576 IBM-supplied compilers, use the option @samp{-fpcc-struct-return} or the
5577 option @samp{-mhc-struct-return}.
5581 @subsection MIPS Options
5582 @cindex MIPS options
5584 These @samp{-m} options are defined for the MIPS family of computers:
5587 @item -mcpu=@var{cpu type}
5588 Assume the defaults for the machine type @var{cpu type} when scheduling
5589 instructions. The choices for @var{cpu type} are @samp{r2000}, @samp{r3000},
5590 @samp{r3900}, @samp{r4000}, @samp{r4100}, @samp{r4300}, @samp{r4400},
5591 @samp{r4600}, @samp{r4650}, @samp{r5000}, @samp{r6000}, @samp{r8000},
5592 and @samp{orion}. Additionally, the @samp{r2000}, @samp{r3000},
5593 @samp{r4000}, @samp{r5000}, and @samp{r6000} can be abbreviated as
5594 @samp{r2k} (or @samp{r2K}), @samp{r3k}, etc. While picking a specific
5595 @var{cpu type} will schedule things appropriately for that particular
5596 chip, the compiler will not generate any code that does not meet level 1
5597 of the MIPS ISA (instruction set architecture) without a @samp{-mipsX}
5598 or @samp{-mabi} switch being used.
5601 Issue instructions from level 1 of the MIPS ISA. This is the default.
5602 @samp{r3000} is the default @var{cpu type} at this ISA level.
5605 Issue instructions from level 2 of the MIPS ISA (branch likely, square
5606 root instructions). @samp{r6000} is the default @var{cpu type} at this
5610 Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
5611 @samp{r4000} is the default @var{cpu type} at this ISA level.
5614 Issue instructions from level 4 of the MIPS ISA (conditional move,
5615 prefetch, enhanced FPU instructions). @samp{r8000} is the default
5616 @var{cpu type} at this ISA level.
5619 Assume that 32 32-bit floating point registers are available. This is
5623 Assume that 32 64-bit floating point registers are available. This is
5624 the default when the @samp{-mips3} option is used.
5627 Assume that 32 32-bit general purpose registers are available. This is
5631 Assume that 32 64-bit general purpose registers are available. This is
5632 the default when the @samp{-mips3} option is used.
5635 Force int and long types to be 64 bits wide. See @samp{-mlong32} for an
5636 explanation of the default, and the width of pointers.
5639 Force long types to be 64 bits wide. See @samp{-mlong32} for an
5640 explanation of the default, and the width of pointers.
5643 Force long, int, and pointer types to be 32 bits wide.
5645 If none of @samp{-mlong32}, @samp{-mlong64}, or @samp{-mint64} are set,
5646 the size of ints, longs, and pointers depends on the ABI and ISA choosen.
5647 For @samp{-mabi=32}, and @samp{-mabi=n32}, ints and longs are 32 bits
5648 wide. For @samp{-mabi=64}, ints are 32 bits, and longs are 64 bits wide.
5649 For @samp{-mabi=eabi} and either @samp{-mips1} or @samp{-mips2}, ints
5650 and longs are 32 bits wide. For @samp{-mabi=eabi} and higher ISAs, ints
5651 are 32 bits, and longs are 64 bits wide. The width of pointer types is
5652 the smaller of the width of longs or the width of general purpose
5653 registers (which in turn depends on the ISA).
5660 Generate code for the indicated ABI. The default instruction level is
5661 @samp{-mips1} for @samp{32}, @samp{-mips3} for @samp{n32}, and
5662 @samp{-mips4} otherwise. Conversely, with @samp{-mips1} or
5663 @samp{-mips2}, the default ABI is @samp{32}; otherwise, the default ABI
5667 Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
5668 add normal debug information. This is the default for all
5669 platforms except for the OSF/1 reference platform, using the OSF/rose
5670 object format. If the either of the @samp{-gstabs} or @samp{-gstabs+}
5671 switches are used, the @file{mips-tfile} program will encapsulate the
5672 stabs within MIPS ECOFF.
5675 Generate code for the GNU assembler. This is the default on the OSF/1
5676 reference platform, using the OSF/rose object format. Also, this is
5677 the default if the configure option @samp{--with-gnu-as} is used.
5679 @item -msplit-addresses
5680 @itemx -mno-split-addresses
5681 Generate code to load the high and low parts of address constants separately.
5682 This allows @code{gcc} to optimize away redundant loads of the high order
5683 bits of addresses. This optimization requires GNU as and GNU ld.
5684 This optimization is enabled by default for some embedded targets where
5685 GNU as and GNU ld are standard.
5689 The @samp{-mrnames} switch says to output code using the MIPS software
5690 names for the registers, instead of the hardware names (ie, @var{a0}
5691 instead of @var{$4}). The only known assembler that supports this option
5692 is the Algorithmics assembler.
5696 The @samp{-mgpopt} switch says to write all of the data declarations
5697 before the instructions in the text section, this allows the MIPS
5698 assembler to generate one word memory references instead of using two
5699 words for short global or static data items. This is on by default if
5700 optimization is selected.
5704 For each non-inline function processed, the @samp{-mstats} switch
5705 causes the compiler to emit one line to the standard error file to
5706 print statistics about the program (number of registers saved, stack
5711 The @samp{-mmemcpy} switch makes all block moves call the appropriate
5712 string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
5713 generating inline code.
5716 @itemx -mno-mips-tfile
5717 The @samp{-mno-mips-tfile} switch causes the compiler not
5718 postprocess the object file with the @file{mips-tfile} program,
5719 after the MIPS assembler has generated it to add debug support. If
5720 @file{mips-tfile} is not run, then no local variables will be
5721 available to the debugger. In addition, @file{stage2} and
5722 @file{stage3} objects will have the temporary file names passed to the
5723 assembler embedded in the object file, which means the objects will
5724 not compare the same. The @samp{-mno-mips-tfile} switch should only
5725 be used when there are bugs in the @file{mips-tfile} program that
5726 prevents compilation.
5729 Generate output containing library calls for floating point.
5730 @strong{Warning:} the requisite libraries are not part of GCC.
5731 Normally the facilities of the machine's usual C compiler are used, but
5732 this can't be done directly in cross-compilation. You must make your
5733 own arrangements to provide suitable library functions for
5737 Generate output containing floating point instructions. This is the
5738 default if you use the unmodified sources.
5741 @itemx -mno-abicalls
5742 Emit (or do not emit) the pseudo operations @samp{.abicalls},
5743 @samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for
5744 position independent code.
5747 @itemx -mno-long-calls
5748 Do all calls with the @samp{JALR} instruction, which requires
5749 loading up a function's address into a register before the call.
5750 You need to use this switch, if you call outside of the current
5751 512 megabyte segment to functions that are not through pointers.
5754 @itemx -mno-half-pic
5755 Put pointers to extern references into the data section and load them
5756 up, rather than put the references in the text section.
5758 @item -membedded-pic
5759 @itemx -mno-embedded-pic
5760 Generate PIC code suitable for some embedded systems. All calls are
5761 made using PC relative address, and all data is addressed using the $gp
5762 register. No more than 65536 bytes of global data may be used. This
5763 requires GNU as and GNU ld which do most of the work. This currently
5764 only works on targets which use ECOFF; it does not work with ELF.
5766 @item -membedded-data
5767 @itemx -mno-embedded-data
5768 Allocate variables to the read-only data section first if possible, then
5769 next in the small data section if possible, otherwise in data. This gives
5770 slightly slower code than the default, but reduces the amount of RAM required
5771 when executing, and thus may be preferred for some embedded systems.
5773 @item -muninit-const-in-rodata
5774 @itemx -mno-uninit-const-in-rodata
5775 When used together with -membedded-data, it will always store uninitialized
5776 const variables in the read-only data section.
5778 @item -msingle-float
5779 @itemx -mdouble-float
5780 The @samp{-msingle-float} switch tells gcc to assume that the floating
5781 point coprocessor only supports single precision operations, as on the
5782 @samp{r4650} chip. The @samp{-mdouble-float} switch permits gcc to use
5783 double precision operations. This is the default.
5787 Permit use of the @samp{mad}, @samp{madu} and @samp{mul} instructions,
5788 as on the @samp{r4650} chip.
5791 Turns on @samp{-msingle-float}, @samp{-mmad}, and, at least for now,
5796 Enable 16-bit instructions.
5799 Use the entry and exit pseudo ops. This option can only be used with
5803 Compile code for the processor in little endian mode.
5804 The requisite libraries are assumed to exist.
5807 Compile code for the processor in big endian mode.
5808 The requisite libraries are assumed to exist.
5811 @cindex smaller data references (MIPS)
5812 @cindex gp-relative references (MIPS)
5813 Put global and static items less than or equal to @var{num} bytes into
5814 the small data or bss sections instead of the normal data or bss
5815 section. This allows the assembler to emit one word memory reference
5816 instructions based on the global pointer (@var{gp} or @var{$28}),
5817 instead of the normal two words used. By default, @var{num} is 8 when
5818 the MIPS assembler is used, and 0 when the GNU assembler is used. The
5819 @samp{-G @var{num}} switch is also passed to the assembler and linker.
5820 All modules should be compiled with the same @samp{-G @var{num}}
5824 Tell the MIPS assembler to not run its preprocessor over user
5825 assembler files (with a @samp{.s} suffix) when assembling them.
5828 Pass an option to gas which will cause nops to be inserted if
5829 the read of the destination register of an mfhi or mflo instruction
5830 occurs in the following two instructions.
5833 Do not include the default crt0.
5837 These options are defined by the macro
5838 @code{TARGET_SWITCHES} in the machine description. The default for the
5839 options is also defined by that macro, which enables you to change the
5844 @subsection Intel 386 Options
5845 @cindex i386 Options
5846 @cindex Intel 386 Options
5848 These @samp{-m} options are defined for the i386 family of computers:
5851 @item -mcpu=@var{cpu type}
5852 Assume the defaults for the machine type @var{cpu type} when scheduling
5853 instructions. The choices for @var{cpu type} are:
5855 @multitable @columnfractions .20 .20 .20 .20
5856 @item @samp{i386} @tab @samp{i486} @tab @samp{i586} @tab @samp{i686}
5857 @item @samp{pentium} @tab @samp{pentiumpro} @tab @samp{k6}
5860 While picking a specific @var{cpu type} will schedule things appropriately
5861 for that particular chip, the compiler will not generate any code that
5862 does not run on the i386 without the @samp{-march=@var{cpu type}} option
5863 being used. @samp{i586} is equivalent to @samp{pentium} and @samp{i686}
5864 is equivalent to @samp{pentiumpro}. @samp{k6} is the AMD chip as
5865 opposed to the Intel ones.
5867 @item -march=@var{cpu type}
5868 Generate instructions for the machine type @var{cpu type}. The choices
5869 for @var{cpu type} are the same as for @samp{-mcpu}. Moreover,
5870 specifying @samp{-march=@var{cpu type}} implies @samp{-mcpu=@var{cpu type}}.
5876 Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro
5877 respectively. These synonyms are deprecated.
5881 Control whether or not the compiler uses IEEE floating point
5882 comparisons. These handle correctly the case where the result of a
5883 comparison is unordered.
5886 Generate output containing library calls for floating point.
5887 @strong{Warning:} the requisite libraries are not part of GCC.
5888 Normally the facilities of the machine's usual C compiler are used, but
5889 this can't be done directly in cross-compilation. You must make your
5890 own arrangements to provide suitable library functions for
5893 On machines where a function returns floating point results in the 80387
5894 register stack, some floating point opcodes may be emitted even if
5895 @samp{-msoft-float} is used.
5897 @item -mno-fp-ret-in-387
5898 Do not use the FPU registers for return values of functions.
5900 The usual calling convention has functions return values of types
5901 @code{float} and @code{double} in an FPU register, even if there
5902 is no FPU. The idea is that the operating system should emulate
5905 The option @samp{-mno-fp-ret-in-387} causes such values to be returned
5906 in ordinary CPU registers instead.
5908 @item -mno-fancy-math-387
5909 Some 387 emulators do not support the @code{sin}, @code{cos} and
5910 @code{sqrt} instructions for the 387. Specify this option to avoid
5911 generating those instructions. This option is the default on FreeBSD.
5912 As of revision 2.6.1, these instructions are not generated unless you
5913 also use the @samp{-ffast-math} switch.
5915 @item -malign-double
5916 @itemx -mno-align-double
5917 Control whether GCC aligns @code{double}, @code{long double}, and
5918 @code{long long} variables on a two word boundary or a one word
5919 boundary. Aligning @code{double} variables on a two word boundary will
5920 produce code that runs somewhat faster on a @samp{Pentium} at the
5921 expense of more memory.
5923 @strong{Warning:} if you use the @samp{-malign-double} switch,
5924 structures containing the above types will be aligned differently than
5925 the published application binary interface specifications for the 386.
5928 @itemx -mno-svr3-shlib
5929 Control whether GCC places uninitialized locals into @code{bss} or
5930 @code{data}. @samp{-msvr3-shlib} places these locals into @code{bss}.
5931 These options are meaningful only on System V Release 3.
5933 @item -mno-wide-multiply
5934 @itemx -mwide-multiply
5935 Control whether GCC uses the @code{mul} and @code{imul} that produce
5936 64 bit results in @code{eax:edx} from 32 bit operands to do @code{long
5937 long} multiplies and 32-bit division by constants.
5940 Use a different function-calling convention, in which functions that
5941 take a fixed number of arguments return with the @code{ret} @var{num}
5942 instruction, which pops their arguments while returning. This saves one
5943 instruction in the caller since there is no need to pop the arguments
5946 You can specify that an individual function is called with this calling
5947 sequence with the function attribute @samp{stdcall}. You can also
5948 override the @samp{-mrtd} option by using the function attribute
5949 @samp{cdecl}. @xref{Function Attributes}.
5951 @strong{Warning:} this calling convention is incompatible with the one
5952 normally used on Unix, so you cannot use it if you need to call
5953 libraries compiled with the Unix compiler.
5955 Also, you must provide function prototypes for all functions that
5956 take variable numbers of arguments (including @code{printf});
5957 otherwise incorrect code will be generated for calls to those
5960 In addition, seriously incorrect code will result if you call a
5961 function with too many arguments. (Normally, extra arguments are
5962 harmlessly ignored.)
5964 @item -mreg-alloc=@var{regs}
5965 Control the default allocation order of integer registers. The
5966 string @var{regs} is a series of letters specifying a register. The
5967 supported letters are: @code{a} allocate EAX; @code{b} allocate EBX;
5968 @code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI;
5969 @code{D} allocate EDI; @code{B} allocate EBP.
5971 @item -mregparm=@var{num}
5972 Control how many registers are used to pass integer arguments. By
5973 default, no registers are used to pass arguments, and at most 3
5974 registers can be used. You can control this behavior for a specific
5975 function by using the function attribute @samp{regparm}.
5976 @xref{Function Attributes}.
5978 @strong{Warning:} if you use this switch, and
5979 @var{num} is nonzero, then you must build all modules with the same
5980 value, including any libraries. This includes the system libraries and
5983 @item -malign-loops=@var{num}
5984 Align loops to a 2 raised to a @var{num} byte boundary. If
5985 @samp{-malign-loops} is not specified, the default is 2 unless
5986 gas 2.8 (or later) is being used in which case the default is
5987 to align the loop on a 16 byte boundary if it is less than 8
5990 @item -malign-jumps=@var{num}
5991 Align instructions that are only jumped to to a 2 raised to a @var{num}
5992 byte boundary. If @samp{-malign-jumps} is not specified, the default is
5993 2 if optimizing for a 386, and 4 if optimizing for a 486 unless
5994 gas 2.8 (or later) is being used in which case the default is
5995 to align the instruction on a 16 byte boundary if it is less
5998 @item -malign-functions=@var{num}
5999 Align the start of functions to a 2 raised to @var{num} byte boundary.
6000 If @samp{-malign-functions} is not specified, the default is 2 if optimizing
6001 for a 386, and 4 if optimizing for a 486.
6003 @item -mpreferred-stack-boundary=@var{num}
6004 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
6005 byte boundary. If @samp{-mpreferred-stack-boundary} is not specified,
6006 the default is 4 (16 bytes or 128 bits).
6008 The stack is required to be aligned on a 4 byte boundary. On Pentium
6009 and PentiumPro, @code{double} and @code{long double} values should be
6010 aligned to an 8 byte boundary (see @samp{-malign-double}) or suffer
6011 significant run time performance penalties. On Pentium III, the
6012 Streaming SIMD Extention (SSE) data type @code{__m128} suffers similar
6013 penalties if it is not 16 byte aligned.
6015 To ensure proper alignment of this values on the stack, the stack boundary
6016 must be as aligned as that required by any value stored on the stack.
6017 Further, every function must be generated such that it keeps the stack
6018 aligned. Thus calling a function compiled with a higher preferred
6019 stack boundary from a function compiled with a lower preferred stack
6020 boundary will most likely misalign the stack. It is recommended that
6021 libraries that use callbacks always use the default setting.
6023 This extra alignment does consume extra stack space. Code that is sensitive
6024 to stack space usage, such as embedded systems and operating system kernels,
6025 may want to reduce the preferred alignment to
6026 @samp{-mpreferred-stack-boundary=2}.
6030 Use PUSH operations to store outgoing parameters. This method is shorter
6031 and usually equally fast as method using SUB/MOV operations and is enabled
6032 by default. In some cases disabling it may improve performance because of
6033 improved scheduling and reduced dependencies.
6035 @item -maccumulate-outgoing-args
6036 @kindex -maccumulate-outgoing-args
6037 If enabled, the maximum amount of space required for outgoing arguments will be
6038 computed in the function prologue. This in faster on most modern CPUs
6039 because of reduced dependecies, improved scheduling and reduced stack usage
6040 when preferred stack boundary is not equal to 2. The drawback is a notable
6041 increase in code size. This switch implies -mno-push-args.
6045 Support thread-safe exception handling on @samp{Mingw32}. Code that relies
6046 on thread-safe exception handling must compile and link all code with the
6047 @samp{-mthreads} option. When compiling, @samp{-mthreads} defines
6048 @samp{-D_MT}; when linking, it links in a special thread helper library
6049 @samp{-lmingwthrd} which cleans up per thread exception handling data.
6051 @item -mno-align-stringops
6052 @kindex -mno-align-stringops
6053 Do not align destination of inlined string operations. This switch reduces
6054 code size and improves performance in case the destination is already aligned,
6055 but gcc don't know about it.
6057 @item -minline-all-stringops
6058 @kindex -minline-all-stringops
6059 By default GCC inlines string operations only when destination is known to be
6060 aligned at least to 4 byte boundary. This enables more inlining, increase code
6061 size, but may improve performance of code that depends on fast memcpy, strlen
6062 and memset for short lengths.
6066 @subsection HPPA Options
6067 @cindex HPPA Options
6069 These @samp{-m} options are defined for the HPPA family of computers:
6072 @item -march=@var{architecture type}
6073 Generate code for the specified architecture. The choices for
6074 @var{architecture type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
6075 1.1, and @samp{2.0} for PA 2.0 processors. Refer to
6076 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
6077 architecture option for your machine. Code compiled for lower numbered
6078 architectures will run on higher numbered architectures, but not the
6081 PA 2.0 support currently requires gas snapshot 19990413 or later. The
6082 next release of binutils (current is 2.9.1) will probably contain PA 2.0
6086 @itemx -mpa-risc-1-1
6087 @itemx -mpa-risc-2-0
6088 Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
6091 Generate code suitable for big switch tables. Use this option only if
6092 the assembler/linker complain about out of range branches within a switch
6095 @item -mjump-in-delay
6096 Fill delay slots of function calls with unconditional jump instructions
6097 by modifying the return pointer for the function call to be the target
6098 of the conditional jump.
6100 @item -mdisable-fpregs
6101 Prevent floating point registers from being used in any manner. This is
6102 necessary for compiling kernels which perform lazy context switching of
6103 floating point registers. If you use this option and attempt to perform
6104 floating point operations, the compiler will abort.
6106 @item -mdisable-indexing
6107 Prevent the compiler from using indexing address modes. This avoids some
6108 rather obscure problems when compiling MIG generated code under MACH.
6110 @item -mno-space-regs
6111 Generate code that assumes the target has no space registers. This allows
6112 GCC to generate faster indirect calls and use unscaled index address modes.
6114 Such code is suitable for level 0 PA systems and kernels.
6116 @item -mfast-indirect-calls
6117 Generate code that assumes calls never cross space boundaries. This
6118 allows GCC to emit code which performs faster indirect calls.
6120 This option will not work in the presense of shared libraries or nested
6123 @item -mlong-load-store
6124 Generate 3-instruction load and store sequences as sometimes required by
6125 the HP-UX 10 linker. This is equivalent to the @samp{+k} option to
6128 @item -mportable-runtime
6129 Use the portable calling conventions proposed by HP for ELF systems.
6132 Enable the use of assembler directives only GAS understands.
6134 @item -mschedule=@var{cpu type}
6135 Schedule code according to the constraints for the machine type
6136 @var{cpu type}. The choices for @var{cpu type} are @samp{700}
6137 @samp{7100}, @samp{7100LC}, @samp{7200}, and @samp{8000}. Refer to
6138 @file{/usr/lib/sched.models} on an HP-UX system to determine the
6139 proper scheduling option for your machine.
6142 Enable the optimization pass in the HPUX linker. Note this makes symbolic
6143 debugging impossible. It also triggers a bug in the HPUX 8 and HPUX 9 linkers
6144 in which they give bogus error messages when linking some programs.
6147 Generate output containing library calls for floating point.
6148 @strong{Warning:} the requisite libraries are not available for all HPPA
6149 targets. Normally the facilities of the machine's usual C compiler are
6150 used, but this cannot be done directly in cross-compilation. You must make
6151 your own arrangements to provide suitable library functions for
6152 cross-compilation. The embedded target @samp{hppa1.1-*-pro}
6153 does provide software floating point support.
6155 @samp{-msoft-float} changes the calling convention in the output file;
6156 therefore, it is only useful if you compile @emph{all} of a program with
6157 this option. In particular, you need to compile @file{libgcc.a}, the
6158 library that comes with GCC, with @samp{-msoft-float} in order for
6162 @node Intel 960 Options
6163 @subsection Intel 960 Options
6165 These @samp{-m} options are defined for the Intel 960 implementations:
6168 @item -m@var{cpu type}
6169 Assume the defaults for the machine type @var{cpu type} for some of
6170 the other options, including instruction scheduling, floating point
6171 support, and addressing modes. The choices for @var{cpu type} are
6172 @samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
6173 @samp{sa}, and @samp{sb}.
6179 The @samp{-mnumerics} option indicates that the processor does support
6180 floating-point instructions. The @samp{-msoft-float} option indicates
6181 that floating-point support should not be assumed.
6183 @item -mleaf-procedures
6184 @itemx -mno-leaf-procedures
6185 Do (or do not) attempt to alter leaf procedures to be callable with the
6186 @code{bal} instruction as well as @code{call}. This will result in more
6187 efficient code for explicit calls when the @code{bal} instruction can be
6188 substituted by the assembler or linker, but less efficient code in other
6189 cases, such as calls via function pointers, or using a linker that doesn't
6190 support this optimization.
6193 @itemx -mno-tail-call
6194 Do (or do not) make additional attempts (beyond those of the
6195 machine-independent portions of the compiler) to optimize tail-recursive
6196 calls into branches. You may not want to do this because the detection of
6197 cases where this is not valid is not totally complete. The default is
6198 @samp{-mno-tail-call}.
6200 @item -mcomplex-addr
6201 @itemx -mno-complex-addr
6202 Assume (or do not assume) that the use of a complex addressing mode is a
6203 win on this implementation of the i960. Complex addressing modes may not
6204 be worthwhile on the K-series, but they definitely are on the C-series.
6205 The default is currently @samp{-mcomplex-addr} for all processors except
6209 @itemx -mno-code-align
6210 Align code to 8-byte boundaries for faster fetching (or don't bother).
6211 Currently turned on by default for C-series implementations only.
6214 @item -mclean-linkage
6215 @itemx -mno-clean-linkage
6216 These options are not fully implemented.
6220 @itemx -mic2.0-compat
6221 @itemx -mic3.0-compat
6222 Enable compatibility with iC960 v2.0 or v3.0.
6226 Enable compatibility with the iC960 assembler.
6228 @item -mstrict-align
6229 @itemx -mno-strict-align
6230 Do not permit (do permit) unaligned accesses.
6233 Enable structure-alignment compatibility with Intel's gcc release version
6234 1.3 (based on gcc 1.37). This option implies @samp{-mstrict-align}.
6236 @item -mlong-double-64
6237 Implement type @samp{long double} as 64-bit floating point numbers.
6238 Without the option @samp{long double} is implemented by 80-bit
6239 floating point numbers. The only reason we have it because there is
6240 no 128-bit @samp{long double} support in @samp{fp-bit.c} yet. So it
6241 is only useful for people using soft-float targets. Otherwise, we
6242 should recommend against use of it.
6246 @node DEC Alpha Options
6247 @subsection DEC Alpha Options
6249 These @samp{-m} options are defined for the DEC Alpha implementations:
6252 @item -mno-soft-float
6254 Use (do not use) the hardware floating-point instructions for
6255 floating-point operations. When @code{-msoft-float} is specified,
6256 functions in @file{libgcc1.c} will be used to perform floating-point
6257 operations. Unless they are replaced by routines that emulate the
6258 floating-point operations, or compiled in such a way as to call such
6259 emulations routines, these routines will issue floating-point
6260 operations. If you are compiling for an Alpha without floating-point
6261 operations, you must ensure that the library is built so as not to call
6264 Note that Alpha implementations without floating-point operations are
6265 required to have floating-point registers.
6269 Generate code that uses (does not use) the floating-point register set.
6270 @code{-mno-fp-regs} implies @code{-msoft-float}. If the floating-point
6271 register set is not used, floating point operands are passed in integer
6272 registers as if they were integers and floating-point results are passed
6273 in $0 instead of $f0. This is a non-standard calling sequence, so any
6274 function with a floating-point argument or return value called by code
6275 compiled with @code{-mno-fp-regs} must also be compiled with that
6278 A typical use of this option is building a kernel that does not use,
6279 and hence need not save and restore, any floating-point registers.
6282 The Alpha architecture implements floating-point hardware optimized for
6283 maximum performance. It is mostly compliant with the IEEE floating
6284 point standard. However, for full compliance, software assistance is
6285 required. This option generates code fully IEEE compliant code
6286 @emph{except} that the @var{inexact flag} is not maintained (see below).
6287 If this option is turned on, the CPP macro @code{_IEEE_FP} is defined
6288 during compilation. The option is a shorthand for: @samp{-D_IEEE_FP
6289 -mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}. The resulting
6290 code is less efficient but is able to correctly support denormalized
6291 numbers and exceptional IEEE values such as not-a-number and plus/minus
6292 infinity. Other Alpha compilers call this option
6293 @code{-ieee_with_no_inexact}.
6295 @item -mieee-with-inexact
6296 @c overfull hbox here --bob 22 jul96
6297 @c original text between ignore ... end ignore
6299 This is like @samp{-mieee} except the generated code also maintains the
6300 IEEE @var{inexact flag}. Turning on this option causes the generated
6301 code to implement fully-compliant IEEE math. The option is a shorthand
6302 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @samp{-mieee-conformant},
6303 @samp{-mfp-trap-mode=sui}, and @samp{-mtrap-precision=i}. On some Alpha
6304 implementations the resulting code may execute significantly slower than
6305 the code generated by default. Since there is very little code that
6306 depends on the @var{inexact flag}, you should normally not specify this
6307 option. Other Alpha compilers call this option
6308 @samp{-ieee_with_inexact}.
6310 @c changed paragraph
6311 This is like @samp{-mieee} except the generated code also maintains the
6312 IEEE @var{inexact flag}. Turning on this option causes the generated
6313 code to implement fully-compliant IEEE math. The option is a shorthand
6314 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
6315 @samp{-mieee-conformant},
6316 @samp{-mfp-trap-mode=sui},
6317 and @samp{-mtrap-precision=i}.
6318 On some Alpha implementations the resulting code may execute
6319 significantly slower than the code generated by default. Since there
6320 is very little code that depends on the @var{inexact flag}, you should
6321 normally not specify this option. Other Alpha compilers call this
6322 option @samp{-ieee_with_inexact}.
6323 @c end changes to prevent overfull hboxes
6325 @item -mfp-trap-mode=@var{trap mode}
6326 This option controls what floating-point related traps are enabled.
6327 Other Alpha compilers call this option @samp{-fptm }@var{trap mode}.
6328 The trap mode can be set to one of four values:
6332 This is the default (normal) setting. The only traps that are enabled
6333 are the ones that cannot be disabled in software (e.g., division by zero
6337 In addition to the traps enabled by @samp{n}, underflow traps are enabled
6341 Like @samp{su}, but the instructions are marked to be safe for software
6342 completion (see Alpha architecture manual for details).
6345 Like @samp{su}, but inexact traps are enabled as well.
6348 @item -mfp-rounding-mode=@var{rounding mode}
6349 Selects the IEEE rounding mode. Other Alpha compilers call this option
6350 @samp{-fprm }@var{rounding mode}. The @var{rounding mode} can be one
6355 Normal IEEE rounding mode. Floating point numbers are rounded towards
6356 the nearest machine number or towards the even machine number in case
6360 Round towards minus infinity.
6363 Chopped rounding mode. Floating point numbers are rounded towards zero.
6366 Dynamic rounding mode. A field in the floating point control register
6367 (@var{fpcr}, see Alpha architecture reference manual) controls the
6368 rounding mode in effect. The C library initializes this register for
6369 rounding towards plus infinity. Thus, unless your program modifies the
6370 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
6373 @item -mtrap-precision=@var{trap precision}
6374 In the Alpha architecture, floating point traps are imprecise. This
6375 means without software assistance it is impossible to recover from a
6376 floating trap and program execution normally needs to be terminated.
6377 GCC can generate code that can assist operating system trap handlers
6378 in determining the exact location that caused a floating point trap.
6379 Depending on the requirements of an application, different levels of
6380 precisions can be selected:
6384 Program precision. This option is the default and means a trap handler
6385 can only identify which program caused a floating point exception.
6388 Function precision. The trap handler can determine the function that
6389 caused a floating point exception.
6392 Instruction precision. The trap handler can determine the exact
6393 instruction that caused a floating point exception.
6396 Other Alpha compilers provide the equivalent options called
6397 @samp{-scope_safe} and @samp{-resumption_safe}.
6399 @item -mieee-conformant
6400 This option marks the generated code as IEEE conformant. You must not
6401 use this option unless you also specify @samp{-mtrap-precision=i} and either
6402 @samp{-mfp-trap-mode=su} or @samp{-mfp-trap-mode=sui}. Its only effect
6403 is to emit the line @samp{.eflag 48} in the function prologue of the
6404 generated assembly file. Under DEC Unix, this has the effect that
6405 IEEE-conformant math library routines will be linked in.
6407 @item -mbuild-constants
6408 Normally GCC examines a 32- or 64-bit integer constant to
6409 see if it can construct it from smaller constants in two or three
6410 instructions. If it cannot, it will output the constant as a literal and
6411 generate code to load it from the data segment at runtime.
6413 Use this option to require GCC to construct @emph{all} integer constants
6414 using code, even if it takes more instructions (the maximum is six).
6416 You would typically use this option to build a shared library dynamic
6417 loader. Itself a shared library, it must relocate itself in memory
6418 before it can find the variables and constants in its own data segment.
6422 Select whether to generate code to be assembled by the vendor-supplied
6423 assembler (@samp{-malpha-as}) or by the GNU assembler @samp{-mgas}.
6431 Indicate whether GCC should generate code to use the optional BWX,
6432 CIX, and MAX instruction sets. The default is to use the instruction sets
6433 supported by the CPU type specified via @samp{-mcpu=} option or that
6434 of the CPU on which GCC was built if none was specified.
6436 @item -mcpu=@var{cpu_type}
6437 Set the instruction set, register set, and instruction scheduling
6438 parameters for machine type @var{cpu_type}. You can specify either the
6439 @samp{EV} style name or the corresponding chip number. GCC
6440 supports scheduling parameters for the EV4 and EV5 family of processors
6441 and will choose the default values for the instruction set from
6442 the processor you specify. If you do not specify a processor type,
6443 GCC will default to the processor on which the compiler was built.
6445 Supported values for @var{cpu_type} are
6450 Schedules as an EV4 and has no instruction set extensions.
6454 Schedules as an EV5 and has no instruction set extensions.
6458 Schedules as an EV5 and supports the BWX extension.
6463 Schedules as an EV5 and supports the BWX and MAX extensions.
6467 Schedules as an EV5 (until Digital releases the scheduling parameters
6468 for the EV6) and supports the BWX, CIX, and MAX extensions.
6471 @item -mmemory-latency=@var{time}
6472 Sets the latency the scheduler should assume for typical memory
6473 references as seen by the application. This number is highly
6474 dependant on the memory access patterns used by the application
6475 and the size of the external cache on the machine.
6477 Valid options for @var{time} are
6481 A decimal number representing clock cycles.
6487 The compiler contains estimates of the number of clock cycles for
6488 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
6489 (also called Dcache, Scache, and Bcache), as well as to main memory.
6490 Note that L3 is only valid for EV5.
6495 @node Clipper Options
6496 @subsection Clipper Options
6498 These @samp{-m} options are defined for the Clipper implementations:
6502 Produce code for a C300 Clipper processor. This is the default.
6505 Produce code for a C400 Clipper processor i.e. use floating point
6509 @node H8/300 Options
6510 @subsection H8/300 Options
6512 These @samp{-m} options are defined for the H8/300 implementations:
6516 Shorten some address references at link time, when possible; uses the
6517 linker option @samp{-relax}. @xref{H8/300,, @code{ld} and the H8/300,
6518 ld.info, Using ld}, for a fuller description.
6521 Generate code for the H8/300H.
6524 Generate code for the H8/S.
6527 Make @code{int} data 32 bits by default.
6530 On the h8/300h, use the same alignment rules as for the h8/300.
6531 The default for the h8/300h is to align longs and floats on 4 byte boundaries.
6532 @samp{-malign-300} causes them to be aligned on 2 byte boundaries.
6533 This option has no effect on the h8/300.
6537 @subsection SH Options
6539 These @samp{-m} options are defined for the SH implementations:
6543 Generate code for the SH1.
6546 Generate code for the SH2.
6549 Generate code for the SH3.
6552 Generate code for the SH3e.
6555 Compile code for the processor in big endian mode.
6558 Compile code for the processor in little endian mode.
6561 Align doubles at 64 bit boundaries. Note that this changes the calling
6562 conventions, and thus some functions from the standard C library will
6563 not work unless you recompile it first with -mdalign.
6566 Shorten some address references at link time, when possible; uses the
6567 linker option @samp{-relax}.
6570 @node System V Options
6571 @subsection Options for System V
6573 These additional options are available on System V Release 4 for
6574 compatibility with other compilers on those systems:
6578 Create a shared object.
6579 It is recommended that @samp{-symbolic} or @samp{-shared} be used instead.
6582 Identify the versions of each tool used by the compiler, in a
6583 @code{.ident} assembler directive in the output.
6586 Refrain from adding @code{.ident} directives to the output file (this is
6589 @item -YP,@var{dirs}
6590 Search the directories @var{dirs}, and no others, for libraries
6591 specified with @samp{-l}.
6594 Look in the directory @var{dir} to find the M4 preprocessor.
6595 The assembler uses this option.
6596 @c This is supposed to go with a -Yd for predefined M4 macro files, but
6597 @c the generic assembler that comes with Solaris takes just -Ym.
6600 @node TMS320C3x/C4x Options
6601 @subsection TMS320C3x/C4x Options
6602 @cindex TMS320C3x/C4x Options
6604 These @samp{-m} options are defined for TMS320C3x/C4x implementations:
6608 @item -mcpu=@var{cpu_type}
6609 Set the instruction set, register set, and instruction scheduling
6610 parameters for machine type @var{cpu_type}. Supported values for
6611 @var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
6612 @samp{c44}. The default is @samp{c40} to generate code for the
6617 @itemx -msmall-memory
6619 Generates code for the big or small memory model. The small memory
6620 model assumed that all data fits into one 64K word page. At run-time
6621 the data page (DP) register must be set to point to the 64K page
6622 containing the .bss and .data program sections. The big memory model is
6623 the default and requires reloading of the DP register for every direct
6628 Allow (disallow) allocation of general integer operands into the block
6633 Enable (disable) generation of code using decrement and branch,
6634 DBcond(D), instructions. This is enabled by default for the C4x. To be
6635 on the safe side, this is disabled for the C3x, since the maximum
6636 iteration count on the C3x is 2^23 + 1 (but who iterates loops more than
6637 2^23 times on the C3x?). Note that GCC will try to reverse a loop so
6638 that it can utilise the decrement and branch instruction, but will give
6639 up if there is more than one memory reference in the loop. Thus a loop
6640 where the loop counter is decremented can generate slightly more
6641 efficient code, in cases where the RPTB instruction cannot be utilised.
6643 @item -mdp-isr-reload
6645 Force the DP register to be saved on entry to an interrupt service
6646 routine (ISR), reloaded to point to the data section, and restored on
6647 exit from the ISR. This should not be required unless someone has
6648 violated the small memory model by modifying the DP register, say within
6653 For the C3x use the 24-bit MPYI instruction for integer multiplies
6654 instead of a library call to guarantee 32-bit results. Note that if one
6655 of the operands is a constant, then the multiplication will be performed
6656 using shifts and adds. If the -mmpyi option is not specified for the C3x,
6657 then squaring operations are performed inline instead of a library call.
6660 @itemx -mno-fast-fix
6661 The C3x/C4x FIX instruction to convert a floating point value to an
6662 integer value chooses the nearest integer less than or equal to the
6663 floating point value rather than to the nearest integer. Thus if the
6664 floating point number is negative, the result will be incorrectly
6665 truncated an additional code is necessary to detect and correct this
6666 case. This option can be used to disable generation of the additional
6667 code required to correct the result.
6671 Enable (disable) generation of repeat block sequences using the RPTB
6672 instruction for zero overhead looping. The RPTB construct is only used
6673 for innermost loops that do not call functions or jump across the loop
6674 boundaries. There is no advantage having nested RPTB loops due to the
6675 overhead required to save and restore the RC, RS, and RE registers.
6676 This is enabled by default with -O2.
6678 @item -mrpts=@var{count}
6680 Enable (disable) the use of the single instruction repeat instruction
6681 RPTS. If a repeat block contains a single instruction, and the loop
6682 count can be guaranteed to be less than the value @var{count}, GCC will
6683 emit a RPTS instruction instead of a RPTB. If no value is specified,
6684 then a RPTS will be emitted even if the loop count cannot be determined
6685 at compile time. Note that the repeated instruction following RPTS does
6686 not have to be reloaded from memory each iteration, thus freeing up the
6687 CPU buses for oeprands. However, since interrupts are blocked by this
6688 instruction, it is disabled by default.
6690 @item -mloop-unsigned
6691 @itemx -mno-loop-unsigned
6692 The maximum iteration count when using RPTS and RPTB (and DB on the C40)
6693 is 2^31 + 1 since these instructions test if the iteration count is
6694 negative to terminate the loop. If the iteration count is unsigned
6695 there is a possibility than the 2^31 + 1 maximum iteration count may be
6696 exceeded. This switch allows an unsigned iteration count.
6699 Try to emit an assembler syntax that the TI assembler (asm30) is happy
6700 with. This also enforces compatibility with the API employed by the TI
6701 C3x C compiler. For example, long doubles are passed as structures
6702 rather than in floating point registers.
6706 Generate code that uses registers (stack) for passing arguments to functions.
6707 By default, arguments are passed in registers where possible rather
6708 than by pushing arguments on to the stack.
6710 @item -mparallel-insns
6711 @itemx -mno-parallel-insns
6712 Allow the generation of parallel instructions. This is enabled by
6715 @item -mparallel-mpy
6716 @itemx -mno-parallel-mpy
6717 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
6718 provided -mparallel-insns is also specified. These instructions have
6719 tight register constraints which can pessimize the code generation
6725 @subsection V850 Options
6726 @cindex V850 Options
6728 These @samp{-m} options are defined for V850 implementations:
6732 @itemx -mno-long-calls
6733 Treat all calls as being far away (near). If calls are assumed to be
6734 far away, the compiler will always load the functions address up into a
6735 register, and call indirect through the pointer.
6739 Do not optimize (do optimize) basic blocks that use the same index
6740 pointer 4 or more times to copy pointer into the @code{ep} register, and
6741 use the shorter @code{sld} and @code{sst} instructions. The @samp{-mep}
6742 option is on by default if you optimize.
6744 @item -mno-prolog-function
6745 @itemx -mprolog-function
6746 Do not use (do use) external functions to save and restore registers at
6747 the prolog and epilog of a function. The external functions are slower,
6748 but use less code space if more than one function saves the same number
6749 of registers. The @samp{-mprolog-function} option is on by default if
6753 Try to make the code as small as possible. At present, this just turns
6754 on the @samp{-mep} and @samp{-mprolog-function} options.
6757 Put static or global variables whose size is @var{n} bytes or less into
6758 the tiny data area that register @code{ep} points to. The tiny data
6759 area can hold up to 256 bytes in total (128 bytes for byte references).
6762 Put static or global variables whose size is @var{n} bytes or less into
6763 the small data area that register @code{gp} points to. The small data
6764 area can hold up to 64 kilobytes.
6767 Put static or global variables whose size is @var{n} bytes or less into
6768 the first 32 kilobytes of memory.
6771 Specify that the target processor is the V850.
6774 Generate code suitable for big switch tables. Use this option only if
6775 the assembler/linker complain about out of range branches within a switch
6780 @subsection ARC Options
6783 These options are defined for ARC implementations:
6787 Compile code for little endian mode. This is the default.
6790 Compile code for big endian mode.
6793 Prepend the name of the cpu to all public symbol names.
6794 In multiple-processor systems, there are many ARC variants with different
6795 instruction and register set characteristics. This flag prevents code
6796 compiled for one cpu to be linked with code compiled for another.
6797 No facility exists for handling variants that are "almost identical".
6798 This is an all or nothing option.
6800 @item -mcpu=@var{cpu}
6801 Compile code for ARC variant @var{cpu}.
6802 Which variants are supported depend on the configuration.
6803 All variants support @samp{-mcpu=base}, this is the default.
6805 @item -mtext=@var{text section}
6806 @itemx -mdata=@var{data section}
6807 @itemx -mrodata=@var{readonly data section}
6808 Put functions, data, and readonly data in @var{text section},
6809 @var{data section}, and @var{readonly data section} respectively
6810 by default. This can be overridden with the @code{section} attribute.
6811 @xref{Variable Attributes}.
6816 @subsection NS32K Options
6817 @cindex NS32K options
6819 These are the @samp{-m} options defined for the 32000 series. The default
6820 values for these options depends on which style of 32000 was selected when
6821 the compiler was configured; the defaults for the most common choices are
6827 Generate output for a 32032. This is the default
6828 when the compiler is configured for 32032 and 32016 based systems.
6832 Generate output for a 32332. This is the default
6833 when the compiler is configured for 32332-based systems.
6837 Generate output for a 32532. This is the default
6838 when the compiler is configured for 32532-based systems.
6841 Generate output containing 32081 instructions for floating point.
6842 This is the default for all systems.
6845 Generate output containing 32381 instructions for floating point. This
6846 also implies @samp{-m32081}. The 32381 is only compatible with the 32332
6847 and 32532 cpus. This is the default for the pc532-netbsd configuration.
6850 Try and generate multiply-add floating point instructions @code{polyF}
6851 and @code{dotF}. This option is only available if the @samp{-m32381}
6852 option is in effect. Using these instructions requires changes to to
6853 register allocation which generally has a negative impact on
6854 performance. This option should only be enabled when compiling code
6855 particularly likely to make heavy use of multiply-add instructions.
6858 Do not try and generate multiply-add floating point instructions
6859 @code{polyF} and @code{dotF}. This is the default on all platforms.
6862 Generate output containing library calls for floating point.
6863 @strong{Warning:} the requisite libraries may not be available.
6866 Do not use the bit-field instructions. On some machines it is faster to
6867 use shifting and masking operations. This is the default for the pc532.
6870 Do use the bit-field instructions. This is the default for all platforms
6874 Use a different function-calling convention, in which functions
6875 that take a fixed number of arguments return pop their
6876 arguments on return with the @code{ret} instruction.
6878 This calling convention is incompatible with the one normally
6879 used on Unix, so you cannot use it if you need to call libraries
6880 compiled with the Unix compiler.
6882 Also, you must provide function prototypes for all functions that
6883 take variable numbers of arguments (including @code{printf});
6884 otherwise incorrect code will be generated for calls to those
6887 In addition, seriously incorrect code will result if you call a
6888 function with too many arguments. (Normally, extra arguments are
6889 harmlessly ignored.)
6891 This option takes its name from the 680x0 @code{rtd} instruction.
6895 Use a different function-calling convention where the first two arguments
6896 are passed in registers.
6898 This calling convention is incompatible with the one normally
6899 used on Unix, so you cannot use it if you need to call libraries
6900 compiled with the Unix compiler.
6903 Do not pass any arguments in registers. This is the default for all
6907 It is OK to use the sb as an index register which is always loaded with
6908 zero. This is the default for the pc532-netbsd target.
6911 The sb register is not available for use or has not been initialized to
6912 zero by the run time system. This is the default for all targets except
6913 the pc532-netbsd. It is also implied whenever @samp{-mhimem} or
6914 @samp{-fpic} is set.
6917 Many ns32000 series addressing modes use displacements of up to 512MB.
6918 If an address is above 512MB then displacements from zero can not be used.
6919 This option causes code to be generated which can be loaded above 512MB.
6920 This may be useful for operating systems or ROM code.
6923 Assume code will be loaded in the first 512MB of virtual address space.
6924 This is the default for all platforms.
6930 @subsection AVR Options
6933 These options are defined for AVR implementations:
6936 @item -mmcu=@var{mcu}
6937 Specify ATMEL AVR mcu (at90s23xx,attiny22,at90s44xx,at90s85xx,atmega603,
6941 Output instruction size's to the asm file
6943 @item -minit-stack=@var{N}
6944 Specify the initial stack address
6946 @item -mno-interrupts
6947 Generated code is not compatible with hardware interrupts.
6948 Code size will be smaller.
6950 @item -mcall-prologues
6951 Functions prologues/epilogues expanded as call to appropriate
6952 subroutines. Code size will be smaller.
6956 @subsection MCore Options
6957 @cindex MCore options
6959 These are the @samp{-m} options defined for the Motorola M*Core
6967 Inline constants into the code stream if it can be done in two
6968 instructions or less.
6973 Use the divide instruction. (Enabled by default).
6975 @item -mrelax-immediate
6976 @itemx -mrelax-immediate
6977 @itemx -mno-relax-immediate
6978 Allow arbitary sized immediated in bit operations.
6980 @item -mwide-bitfields
6981 @itemx -mwide-bitfields
6982 @itemx -mno-wide-bitfields
6983 Always treat bitfields as int-sized.
6985 @item -m4byte-functions
6986 @itemx -m4byte-functions
6987 @itemx -mno-4byte-functions
6988 Force all functions to be aligfned to a four byte boundary.
6990 @item -mcallgraph-data
6991 @itemx -mcallgraph-data
6992 @itemx -mno-callgraph-data
6993 Emit callgraph information.
6997 @itemx -mno-slow-bytes
6998 Prefer word access when reading byte quantities.
7000 @item -mlittle-endian
7001 @itemx -mlittle-endian
7003 Genreate code for a little endian target.
7008 Generate code for the 210 processor.
7013 @node Code Gen Options
7014 @section Options for Code Generation Conventions
7015 @cindex code generation conventions
7016 @cindex options, code generation
7017 @cindex run-time options
7019 These machine-independent options control the interface conventions
7020 used in code generation.
7022 Most of them have both positive and negative forms; the negative form
7023 of @samp{-ffoo} would be @samp{-fno-foo}. In the table below, only
7024 one of the forms is listed---the one which is not the default. You
7025 can figure out the other form by either removing @samp{no-} or adding
7030 Enable exception handling. Generates extra code needed to propagate
7031 exceptions. For some targets, this implies GNU CC will generate frame
7032 unwind information for all functions, which can produce significant data
7033 size overhead, although it does not affect execution. If you do not
7034 specify this option, GNU CC will enable it by default for languages like
7035 C++ which normally require exception handling, and disable itfor
7036 languages like C that do not normally require it. However, you may need
7037 to enable this option when compiling C code that needs to interoperate
7038 properly with exception handlers written in C++. You may also wish to
7039 disable this option if you are compiling older C++ programs that don't
7040 use exception handling.
7042 @item -funwind-tables
7043 Similar to @code{-fexceptions}, except that it will just generate any needed
7044 static data, but will not affect the generated code in any other way.
7045 You will normally not enable this option; instead, a language processor
7046 that needs this handling would enable it on your behalf.
7048 @item -fpcc-struct-return
7049 Return ``short'' @code{struct} and @code{union} values in memory like
7050 longer ones, rather than in registers. This convention is less
7051 efficient, but it has the advantage of allowing intercallability between
7052 GCC-compiled files and files compiled with other compilers.
7054 The precise convention for returning structures in memory depends
7055 on the target configuration macros.
7057 Short structures and unions are those whose size and alignment match
7058 that of some integer type.
7060 @item -freg-struct-return
7061 Use the convention that @code{struct} and @code{union} values are
7062 returned in registers when possible. This is more efficient for small
7063 structures than @samp{-fpcc-struct-return}.
7065 If you specify neither @samp{-fpcc-struct-return} nor its contrary
7066 @samp{-freg-struct-return}, GCC defaults to whichever convention is
7067 standard for the target. If there is no standard convention, GCC
7068 defaults to @samp{-fpcc-struct-return}, except on targets where GCC
7069 is the principal compiler. In those cases, we can choose the standard,
7070 and we chose the more efficient register return alternative.
7073 Allocate to an @code{enum} type only as many bytes as it needs for the
7074 declared range of possible values. Specifically, the @code{enum} type
7075 will be equivalent to the smallest integer type which has enough room.
7077 @item -fshort-double
7078 Use the same size for @code{double} as for @code{float}.
7081 Requests that the data and non-@code{const} variables of this
7082 compilation be shared data rather than private data. The distinction
7083 makes sense only on certain operating systems, where shared data is
7084 shared between processes running the same program, while private data
7085 exists in one copy per process.
7088 Allocate even uninitialized global variables in the data section of the
7089 object file, rather than generating them as common blocks. This has the
7090 effect that if the same variable is declared (without @code{extern}) in
7091 two different compilations, you will get an error when you link them.
7092 The only reason this might be useful is if you wish to verify that the
7093 program will work on other systems which always work this way.
7096 Ignore the @samp{#ident} directive.
7098 @item -fno-gnu-linker
7099 Do not output global initializations (such as C++ constructors and
7100 destructors) in the form used by the GNU linker (on systems where the GNU
7101 linker is the standard method of handling them). Use this option when
7102 you want to use a non-GNU linker, which also requires using the
7103 @code{collect2} program to make sure the system linker includes
7104 constructors and destructors. (@code{collect2} is included in the GCC
7105 distribution.) For systems which @emph{must} use @code{collect2}, the
7106 compiler driver @code{gcc} is configured to do this automatically.
7108 @item -finhibit-size-directive
7109 Don't output a @code{.size} assembler directive, or anything else that
7110 would cause trouble if the function is split in the middle, and the
7111 two halves are placed at locations far apart in memory. This option is
7112 used when compiling @file{crtstuff.c}; you should not need to use it
7116 Put extra commentary information in the generated assembly code to
7117 make it more readable. This option is generally only of use to those
7118 who actually need to read the generated assembly code (perhaps while
7119 debugging the compiler itself).
7121 @samp{-fno-verbose-asm}, the default, causes the
7122 extra information to be omitted and is useful when comparing two assembler
7126 Consider all memory references through pointers to be volatile.
7128 @item -fvolatile-global
7129 Consider all memory references to extern and global data items to
7130 be volatile. GCC does not consider static data items to be volatile
7131 because of this switch.
7133 @item -fvolatile-static
7134 Consider all memory references to static data to be volatile.
7137 @cindex global offset table
7139 Generate position-independent code (PIC) suitable for use in a shared
7140 library, if supported for the target machine. Such code accesses all
7141 constant addresses through a global offset table (GOT). The dynamic
7142 loader resolves the GOT entries when the program starts (the dynamic
7143 loader is not part of GCC; it is part of the operating system). If
7144 the GOT size for the linked executable exceeds a machine-specific
7145 maximum size, you get an error message from the linker indicating that
7146 @samp{-fpic} does not work; in that case, recompile with @samp{-fPIC}
7147 instead. (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
7148 on the m68k and RS/6000. The 386 has no such limit.)
7150 Position-independent code requires special support, and therefore works
7151 only on certain machines. For the 386, GCC supports PIC for System V
7152 but not for the Sun 386i. Code generated for the IBM RS/6000 is always
7153 position-independent.
7156 If supported for the target machine, emit position-independent code,
7157 suitable for dynamic linking and avoiding any limit on the size of the
7158 global offset table. This option makes a difference on the m68k, m88k,
7161 Position-independent code requires special support, and therefore works
7162 only on certain machines.
7164 @item -ffixed-@var{reg}
7165 Treat the register named @var{reg} as a fixed register; generated code
7166 should never refer to it (except perhaps as a stack pointer, frame
7167 pointer or in some other fixed role).
7169 @var{reg} must be the name of a register. The register names accepted
7170 are machine-specific and are defined in the @code{REGISTER_NAMES}
7171 macro in the machine description macro file.
7173 This flag does not have a negative form, because it specifies a
7176 @item -fcall-used-@var{reg}
7177 Treat the register named @var{reg} as an allocable register that is
7178 clobbered by function calls. It may be allocated for temporaries or
7179 variables that do not live across a call. Functions compiled this way
7180 will not save and restore the register @var{reg}.
7182 It is an error to used this flag with the frame pointer or stack pointer.
7183 Use of this flag for other registers that have fixed pervasive roles in
7184 the machine's execution model will produce disastrous results.
7186 This flag does not have a negative form, because it specifies a
7189 @item -fcall-saved-@var{reg}
7190 Treat the register named @var{reg} as an allocable register saved by
7191 functions. It may be allocated even for temporaries or variables that
7192 live across a call. Functions compiled this way will save and restore
7193 the register @var{reg} if they use it.
7195 It is an error to used this flag with the frame pointer or stack pointer.
7196 Use of this flag for other registers that have fixed pervasive roles in
7197 the machine's execution model will produce disastrous results.
7199 A different sort of disaster will result from the use of this flag for
7200 a register in which function values may be returned.
7202 This flag does not have a negative form, because it specifies a
7206 Pack all structure members together without holes. Usually you would
7207 not want to use this option, since it makes the code suboptimal, and
7208 the offsets of structure members won't agree with system libraries.
7210 @item -fcheck-memory-usage
7211 Generate extra code to check each memory access. GCC will generate
7212 code that is suitable for a detector of bad memory accesses such as
7215 Normally, you should compile all, or none, of your code with this option.
7217 If you do mix code compiled with and without this option,
7218 you must ensure that all code that has side effects
7219 and that is called by code compiled with this option
7220 is, itself, compiled with this option.
7221 If you do not, you might get erroneous messages from the detector.
7223 If you use functions from a library that have side-effects (such as
7224 @code{read}), you might not be able to recompile the library and
7225 specify this option. In that case, you can enable the
7226 @samp{-fprefix-function-name} option, which requests GCC to encapsulate
7227 your code and make other functions look as if they were compiled with
7228 @samp{-fcheck-memory-usage}. This is done by calling ``stubs'',
7229 which are provided by the detector. If you cannot find or build
7230 stubs for every function you call, you might have to specify
7231 @samp{-fcheck-memory-usage} without @samp{-fprefix-function-name}.
7233 If you specify this option, you can not use the @code{asm} or
7234 @code{__asm__} keywords in functions with memory checking enabled. GNU
7235 CC cannot understand what the @code{asm} statement may do, and therefore
7236 cannot generate the appropriate code, so it will reject it. However, if
7237 you specify the function attribute @code{no_check_memory_usage} (see
7238 @pxref{Function Attributes}, GNU CC will disable memory checking within a
7239 function; you may use @code{asm} statements inside such functions. You
7240 may have an inline expansion of a non-checked function within a checked
7241 function; in that case GNU CC will not generate checks for the inlined
7242 function's memory accesses.
7244 If you move your @code{asm} statements to non-checked inline functions
7245 and they do access memory, you can add calls to the support code in your
7246 inline function, to indicate any reads, writes, or copies being done.
7247 These calls would be similar to those done in the stubs described above.
7249 @item -fprefix-function-name
7250 Request GCC to add a prefix to the symbols generated for function names.
7251 GCC adds a prefix to the names of functions defined as well as
7252 functions called. Code compiled with this option and code compiled
7253 without the option can't be linked together, unless stubs are used.
7255 If you compile the following code with @samp{-fprefix-function-name}
7257 extern void bar (int);
7266 GCC will compile the code as if it was written:
7268 extern void prefix_bar (int);
7272 return prefix_bar (a + 5);
7275 This option is designed to be used with @samp{-fcheck-memory-usage}.
7277 @item -finstrument-functions
7278 Generate instrumentation calls for entry and exit to functions. Just
7279 after function entry and just before function exit, the following
7280 profiling functions will be called with the address of the current
7281 function and its call site. (On some platforms,
7282 @code{__builtin_return_address} does not work beyond the current
7283 function, so the call site information may not be available to the
7284 profiling functions otherwise.)
7287 void __cyg_profile_func_enter (void *this_fn, void *call_site);
7288 void __cyg_profile_func_exit (void *this_fn, void *call_site);
7291 The first argument is the address of the start of the current function,
7292 which may be looked up exactly in the symbol table.
7294 This instrumentation is also done for functions expanded inline in other
7295 functions. The profiling calls will indicate where, conceptually, the
7296 inline function is entered and exited. This means that addressable
7297 versions of such functions must be available. If all your uses of a
7298 function are expanded inline, this may mean an additional expansion of
7299 code size. If you use @samp{extern inline} in your C code, an
7300 addressable version of such functions must be provided. (This is
7301 normally the case anyways, but if you get lucky and the optimizer always
7302 expands the functions inline, you might have gotten away without
7303 providing static copies.)
7305 A function may be given the attribute @code{no_instrument_function}, in
7306 which case this instrumentation will not be done. This can be used, for
7307 example, for the profiling functions listed above, high-priority
7308 interrupt routines, and any functions from which the profiling functions
7309 cannot safely be called (perhaps signal handlers, if the profiling
7310 routines generate output or allocate memory).
7313 Generate code to verify that you do not go beyond the boundary of the
7314 stack. You should specify this flag if you are running in an
7315 environment with multiple threads, but only rarely need to specify it in
7316 a single-threaded environment since stack overflow is automatically
7317 detected on nearly all systems if there is only one stack.
7319 Note that this switch does not actually cause checking to be done; the
7320 operating system must do that. The switch causes generation of code
7321 to ensure that the operating system sees the stack being extended.
7323 @item -fstack-limit-register=@var{reg}
7324 @itemx -fstack-limit-symbol=@var{sym}
7325 @itemx -fno-stack-limit
7326 Generate code to ensure that the stack does not grow beyond a certain value,
7327 either the value of a register or the address of a symbol. If the stack
7328 would grow beyond the value, a signal is raised. For most targets,
7329 the signal is raised before the stack overruns the boundary, so
7330 it is possible to catch the signal without taking special precautions.
7332 For instance, if the stack starts at address @samp{0x80000000} and grows
7333 downwards you can use the flags
7334 @samp{-fstack-limit-symbol=__stack_limit}
7335 @samp{-Wl,--defsym,__stack_limit=0x7ffe0000} which will enforce a stack
7338 @cindex aliasing of parameters
7339 @cindex parameters, aliased
7340 @item -fargument-alias
7341 @itemx -fargument-noalias
7342 @itemx -fargument-noalias-global
7343 Specify the possible relationships among parameters and between
7344 parameters and global data.
7346 @samp{-fargument-alias} specifies that arguments (parameters) may
7347 alias each other and may alias global storage.
7348 @samp{-fargument-noalias} specifies that arguments do not alias
7349 each other, but may alias global storage.
7350 @samp{-fargument-noalias-global} specifies that arguments do not
7351 alias each other and do not alias global storage.
7353 Each language will automatically use whatever option is required by
7354 the language standard. You should not need to use these options yourself.
7356 @item -fleading-underscore
7357 This option and its counterpart, -fno-leading-underscore, forcibly
7358 change the way C symbols are represented in the object file. One use
7359 is to help link with legacy assembly code.
7361 Be warned that you should know what you are doing when invoking this
7362 option, and that not all targets provide complete support for it.
7365 @node Environment Variables
7366 @section Environment Variables Affecting GCC
7367 @cindex environment variables
7369 This section describes several environment variables that affect how GCC
7370 operates. Some of them work by specifying directories or prefixes to use
7371 when searching for various kinds of files. Some are used to specify other
7372 aspects of the compilation environment.
7375 Note that you can also specify places to search using options such as
7376 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
7377 take precedence over places specified using environment variables, which
7378 in turn take precedence over those specified by the configuration of GCC.
7382 Note that you can also specify places to search using options such as
7383 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
7384 take precedence over places specified using environment variables, which
7385 in turn take precedence over those specified by the configuration of GCC.
7392 @c @itemx LC_COLLATE
7394 @c @itemx LC_MONETARY
7395 @c @itemx LC_NUMERIC
7400 @c @findex LC_COLLATE
7402 @c @findex LC_MONETARY
7403 @c @findex LC_NUMERIC
7407 These environment variables control the way that GCC uses
7408 localization information that allow GCC to work with different
7409 national conventions. GCC inspects the locale categories
7410 @code{LC_CTYPE} and @code{LC_MESSAGES} if it has been configured to do
7411 so. These locale categories can be set to any value supported by your
7412 installation. A typical value is @samp{en_UK} for English in the United
7415 The @code{LC_CTYPE} environment variable specifies character
7416 classification. GCC uses it to determine the character boundaries in
7417 a string; this is needed for some multibyte encodings that contain quote
7418 and escape characters that would otherwise be interpreted as a string
7421 The @code{LC_MESSAGES} environment variable specifies the language to
7422 use in diagnostic messages.
7424 If the @code{LC_ALL} environment variable is set, it overrides the value
7425 of @code{LC_CTYPE} and @code{LC_MESSAGES}; otherwise, @code{LC_CTYPE}
7426 and @code{LC_MESSAGES} default to the value of the @code{LANG}
7427 environment variable. If none of these variables are set, GCC
7428 defaults to traditional C English behavior.
7432 If @code{TMPDIR} is set, it specifies the directory to use for temporary
7433 files. GCC uses temporary files to hold the output of one stage of
7434 compilation which is to be used as input to the next stage: for example,
7435 the output of the preprocessor, which is the input to the compiler
7438 @item GCC_EXEC_PREFIX
7439 @findex GCC_EXEC_PREFIX
7440 If @code{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
7441 names of the subprograms executed by the compiler. No slash is added
7442 when this prefix is combined with the name of a subprogram, but you can
7443 specify a prefix that ends with a slash if you wish.
7445 If @code{GCC_EXEC_PREFIX} is not set, GNU CC will attempt to figure out
7446 an appropriate prefix to use based on the pathname it was invoked with.
7448 If GCC cannot find the subprogram using the specified prefix, it
7449 tries looking in the usual places for the subprogram.
7451 The default value of @code{GCC_EXEC_PREFIX} is
7452 @file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
7453 of @code{prefix} when you ran the @file{configure} script.
7455 Other prefixes specified with @samp{-B} take precedence over this prefix.
7457 This prefix is also used for finding files such as @file{crt0.o} that are
7460 In addition, the prefix is used in an unusual way in finding the
7461 directories to search for header files. For each of the standard
7462 directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
7463 (more precisely, with the value of @code{GCC_INCLUDE_DIR}), GCC tries
7464 replacing that beginning with the specified prefix to produce an
7465 alternate directory name. Thus, with @samp{-Bfoo/}, GCC will search
7466 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
7467 These alternate directories are searched first; the standard directories
7471 @findex COMPILER_PATH
7472 The value of @code{COMPILER_PATH} is a colon-separated list of
7473 directories, much like @code{PATH}. GCC tries the directories thus
7474 specified when searching for subprograms, if it can't find the
7475 subprograms using @code{GCC_EXEC_PREFIX}.
7478 @findex LIBRARY_PATH
7479 The value of @code{LIBRARY_PATH} is a colon-separated list of
7480 directories, much like @code{PATH}. When configured as a native compiler,
7481 GCC tries the directories thus specified when searching for special
7482 linker files, if it can't find them using @code{GCC_EXEC_PREFIX}. Linking
7483 using GCC also uses these directories when searching for ordinary
7484 libraries for the @samp{-l} option (but directories specified with
7485 @samp{-L} come first).
7487 @item C_INCLUDE_PATH
7488 @itemx CPLUS_INCLUDE_PATH
7489 @itemx OBJC_INCLUDE_PATH
7490 @findex C_INCLUDE_PATH
7491 @findex CPLUS_INCLUDE_PATH
7492 @findex OBJC_INCLUDE_PATH
7493 @c @itemx OBJCPLUS_INCLUDE_PATH
7494 These environment variables pertain to particular languages. Each
7495 variable's value is a colon-separated list of directories, much like
7496 @code{PATH}. When GCC searches for header files, it tries the
7497 directories listed in the variable for the language you are using, after
7498 the directories specified with @samp{-I} but before the standard header
7501 @item DEPENDENCIES_OUTPUT
7502 @findex DEPENDENCIES_OUTPUT
7503 @cindex dependencies for make as output
7504 If this variable is set, its value specifies how to output dependencies
7505 for Make based on the header files processed by the compiler. This
7506 output looks much like the output from the @samp{-M} option
7507 (@pxref{Preprocessor Options}), but it goes to a separate file, and is
7508 in addition to the usual results of compilation.
7510 The value of @code{DEPENDENCIES_OUTPUT} can be just a file name, in
7511 which case the Make rules are written to that file, guessing the target
7512 name from the source file name. Or the value can have the form
7513 @samp{@var{file} @var{target}}, in which case the rules are written to
7514 file @var{file} using @var{target} as the target name.
7518 @cindex locale definition
7519 This variable is used to pass locale information to the compiler. One way in
7520 which this information is used is to determine the character set to be used
7521 when character literals, string literals and comments are parsed in C and C++.
7522 When the compiler is configured to allow multibyte characters,
7523 the following values for @code{LANG} are recognized:
7527 Recognize JIS characters.
7529 Recognize SJIS characters.
7531 Recognize EUCJP characters.
7534 If @code{LANG} is not defined, or if it has some other value, then the
7535 compiler will use mblen and mbtowc as defined by the default locale to
7536 recognize and translate multibyte characters.
7539 @node Running Protoize
7540 @section Running Protoize
7542 The program @code{protoize} is an optional part of GNU C. You can use
7543 it to add prototypes to a program, thus converting the program to ANSI
7544 C in one respect. The companion program @code{unprotoize} does the
7545 reverse: it removes argument types from any prototypes that are found.
7547 When you run these programs, you must specify a set of source files as
7548 command line arguments. The conversion programs start out by compiling
7549 these files to see what functions they define. The information gathered
7550 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
7552 After scanning comes actual conversion. The specified files are all
7553 eligible to be converted; any files they include (whether sources or
7554 just headers) are eligible as well.
7556 But not all the eligible files are converted. By default,
7557 @code{protoize} and @code{unprotoize} convert only source and header
7558 files in the current directory. You can specify additional directories
7559 whose files should be converted with the @samp{-d @var{directory}}
7560 option. You can also specify particular files to exclude with the
7561 @samp{-x @var{file}} option. A file is converted if it is eligible, its
7562 directory name matches one of the specified directory names, and its
7563 name within the directory has not been excluded.
7565 Basic conversion with @code{protoize} consists of rewriting most
7566 function definitions and function declarations to specify the types of
7567 the arguments. The only ones not rewritten are those for varargs
7570 @code{protoize} optionally inserts prototype declarations at the
7571 beginning of the source file, to make them available for any calls that
7572 precede the function's definition. Or it can insert prototype
7573 declarations with block scope in the blocks where undeclared functions
7576 Basic conversion with @code{unprotoize} consists of rewriting most
7577 function declarations to remove any argument types, and rewriting
7578 function definitions to the old-style pre-ANSI form.
7580 Both conversion programs print a warning for any function declaration or
7581 definition that they can't convert. You can suppress these warnings
7584 The output from @code{protoize} or @code{unprotoize} replaces the
7585 original source file. The original file is renamed to a name ending
7586 with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
7587 without the original @samp{.c} suffix). If the @samp{.save} (@samp{.sav}
7588 for DOS) file already exists, then the source file is simply discarded.
7590 @code{protoize} and @code{unprotoize} both depend on GCC itself to
7591 scan the program and collect information about the functions it uses.
7592 So neither of these programs will work until GCC is installed.
7594 Here is a table of the options you can use with @code{protoize} and
7595 @code{unprotoize}. Each option works with both programs unless
7599 @item -B @var{directory}
7600 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
7601 usual directory (normally @file{/usr/local/lib}). This file contains
7602 prototype information about standard system functions. This option
7603 applies only to @code{protoize}.
7605 @item -c @var{compilation-options}
7606 Use @var{compilation-options} as the options when running @code{gcc} to
7607 produce the @samp{.X} files. The special option @samp{-aux-info} is
7608 always passed in addition, to tell @code{gcc} to write a @samp{.X} file.
7610 Note that the compilation options must be given as a single argument to
7611 @code{protoize} or @code{unprotoize}. If you want to specify several
7612 @code{gcc} options, you must quote the entire set of compilation options
7613 to make them a single word in the shell.
7615 There are certain @code{gcc} arguments that you cannot use, because they
7616 would produce the wrong kind of output. These include @samp{-g},
7617 @samp{-O}, @samp{-c}, @samp{-S}, and @samp{-o} If you include these in
7618 the @var{compilation-options}, they are ignored.
7621 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
7622 systems) instead of @samp{.c}. This is convenient if you are converting
7623 a C program to C++. This option applies only to @code{protoize}.
7626 Add explicit global declarations. This means inserting explicit
7627 declarations at the beginning of each source file for each function
7628 that is called in the file and was not declared. These declarations
7629 precede the first function definition that contains a call to an
7630 undeclared function. This option applies only to @code{protoize}.
7632 @item -i @var{string}
7633 Indent old-style parameter declarations with the string @var{string}.
7634 This option applies only to @code{protoize}.
7636 @code{unprotoize} converts prototyped function definitions to old-style
7637 function definitions, where the arguments are declared between the
7638 argument list and the initial @samp{@{}. By default, @code{unprotoize}
7639 uses five spaces as the indentation. If you want to indent with just
7640 one space instead, use @samp{-i " "}.
7643 Keep the @samp{.X} files. Normally, they are deleted after conversion
7647 Add explicit local declarations. @code{protoize} with @samp{-l} inserts
7648 a prototype declaration for each function in each block which calls the
7649 function without any declaration. This option applies only to
7653 Make no real changes. This mode just prints information about the conversions
7654 that would have been done without @samp{-n}.
7657 Make no @samp{.save} files. The original files are simply deleted.
7658 Use this option with caution.
7660 @item -p @var{program}
7661 Use the program @var{program} as the compiler. Normally, the name
7665 Work quietly. Most warnings are suppressed.
7668 Print the version number, just like @samp{-v} for @code{gcc}.
7671 If you need special compiler options to compile one of your program's
7672 source files, then you should generate that file's @samp{.X} file
7673 specially, by running @code{gcc} on that source file with the
7674 appropriate options and the option @samp{-aux-info}. Then run
7675 @code{protoize} on the entire set of files. @code{protoize} will use
7676 the existing @samp{.X} file because it is newer than the source file.
7680 gcc -Dfoo=bar file1.c -aux-info
7685 You need to include the special files along with the rest in the
7686 @code{protoize} command, even though their @samp{.X} files already
7687 exist, because otherwise they won't get converted.
7689 @xref{Protoize Caveats}, for more information on how to use
7690 @code{protoize} successfully.