1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
7 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
8 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
10 Permission is granted to make and distribute verbatim copies of this
11 manual provided the copyright notice and this permission notice are
12 preserved on all copies.
14 Permission is granted to copy and distribute modified versions of this
15 manual under the conditions for verbatim copying, provided also that the
16 entire resulting derived work is distributed under the terms of a
17 permission notice identical to this one.
19 Permission is granted to copy and distribute translations of this manual
20 into another language, under the above conditions for modified versions,
21 except that this permission notice may be included in translations
22 approved by the Free Software Foundation instead of in the original
25 @c Set file name and title for the man page.
27 @settitle GNU project C and C++ compiler
29 gcc [@samp{-c}|@samp{-S}|@samp{-E}] [@samp{-std=}@var{standard}]
30 [@samp{-g}] [@samp{-pg}] [@samp{-O}@var{level}]
31 [@samp{-W}@var{warn}...] [@samp{-pedantic}]
32 [@samp{-I}@var{dir}...] [@samp{-L}@var{dir}...]
33 [@samp{-D}@var{macro}[=@var{defn}]...] [@samp{-U}@var{macro}]
34 [@samp{-f}@var{option}...] [@samp{-m}@var{machine-option}...]
35 [@samp{-o} @var{outfile}] @var{infile}...
37 Only the most useful options are listed here; see below for the
38 remainder. @samp{g++} accepts mostly the same options as @samp{gcc}.
41 cpp(1), gcov(1), g77(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
42 and the Info entries for @file{gcc}, @file{cpp}, @file{g77}, @file{as},
43 @file{ld}, @file{binutils} and @file{gdb}.
46 For instructions on reporting bugs, see
47 @w{@uref{http://gcc.gnu.org/bugs.html}}. Use of the @command{gccbug}
48 script to report bugs is recommended.
51 See the Info entry for @file{gcc}, or
52 @w{@uref{http://gcc.gnu.org/thanks.html}}, for contributors to GCC.
57 @chapter GCC Command Options
58 @cindex GCC command options
59 @cindex command options
60 @cindex options, GCC command
62 @c man begin DESCRIPTION
64 When you invoke GCC, it normally does preprocessing, compilation,
65 assembly and linking. The ``overall options'' allow you to stop this
66 process at an intermediate stage. For example, the @samp{-c} option
67 says not to run the linker. Then the output consists of object files
68 output by the assembler.
70 Other options are passed on to one stage of processing. Some options
71 control the preprocessor and others the compiler itself. Yet other
72 options control the assembler and linker; most of these are not
73 documented here, since you rarely need to use any of them.
75 @cindex C compilation options
76 Most of the command line options that you can use with GCC are useful
77 for C programs; when an option is only useful with another language
78 (usually C++), the explanation says so explicitly. If the description
79 for a particular option does not mention a source language, you can use
80 that option with all supported languages.
82 @cindex C++ compilation options
83 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
84 options for compiling C++ programs.
86 @cindex grouping options
87 @cindex options, grouping
88 The @command{gcc} program accepts options and file names as operands. Many
89 options have multi-letter names; therefore multiple single-letter options
90 may @emph{not} be grouped: @samp{-dr} is very different from @w{@samp{-d
93 @cindex order of options
94 @cindex options, order
95 You can mix options and other arguments. For the most part, the order
96 you use doesn't matter. Order does matter when you use several options
97 of the same kind; for example, if you specify @samp{-L} more than once,
98 the directories are searched in the order specified.
100 Many options have long names starting with @samp{-f} or with
101 @samp{-W}---for example, @samp{-fforce-mem},
102 @samp{-fstrength-reduce}, @samp{-Wformat} and so on. Most of
103 these have both positive and negative forms; the negative form of
104 @samp{-ffoo} would be @samp{-fno-foo}. This manual documents
105 only one of these two forms, whichever one is not the default.
110 * Option Summary:: Brief list of all options, without explanations.
111 * Overall Options:: Controlling the kind of output:
112 an executable, object files, assembler files,
113 or preprocessed source.
114 * Invoking G++:: Compiling C++ programs.
115 * C Dialect Options:: Controlling the variant of C language compiled.
116 * C++ Dialect Options:: Variations on C++.
117 * Language Independent Options:: Controlling how diagnostics should be
119 * Warning Options:: How picky should the compiler be?
120 * Debugging Options:: Symbol tables, measurements, and debugging dumps.
121 * Optimize Options:: How much optimization?
122 * Preprocessor Options:: Controlling header files and macro definitions.
123 Also, getting dependency information for Make.
124 * Assembler Options:: Passing options to the assembler.
125 * Link Options:: Specifying libraries and so on.
126 * Directory Options:: Where to find header files and libraries.
127 Where to find the compiler executable files.
128 * Spec Files:: How to pass switches to sub-processes.
129 * Target Options:: Running a cross-compiler, or an old version of GCC.
130 * Submodel Options:: Specifying minor hardware or convention variations,
131 such as 68010 vs 68020.
132 * Code Gen Options:: Specifying conventions for function calls, data layout
134 * Environment Variables:: Env vars that affect GCC.
135 * Running Protoize:: Automatically adding or removing function prototypes.
141 @section Option Summary
143 Here is a summary of all the options, grouped by type. Explanations are
144 in the following sections.
147 @item Overall Options
148 @xref{Overall Options,,Options Controlling the Kind of Output}.
150 -c -S -E -o @var{file} -pipe -pass-exit-codes -x @var{language} @gol
151 -v --target-help --help}
153 @item C Language Options
154 @xref{C Dialect Options,,Options Controlling C Dialect}.
156 -ansi -std=@var{standard} -fno-asm -fno-builtin @gol
157 -fhosted -ffreestanding @gol
158 -trigraphs -traditional -traditional-cpp @gol
159 -fallow-single-precision -fcond-mismatch @gol
160 -fsigned-bitfields -fsigned-char @gol
161 -funsigned-bitfields -funsigned-char @gol
162 -fwritable-strings -fshort-wchar}
164 @item C++ Language Options
165 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
167 -fno-access-control -fcheck-new -fconserve-space @gol
168 -fdollars-in-identifiers -fno-elide-constructors @gol
169 -fno-enforce-eh-specs -fexternal-templates @gol
170 -falt-external-templates @gol
171 -ffor-scope -fno-for-scope -fno-gnu-keywords -fhonor-std @gol
172 -fhuge-objects -fno-implicit-templates @gol
173 -fno-implicit-inline-templates @gol
174 -fno-implement-inlines -fms-extensions @gol
175 -fname-mangling-version-@var{n} -fno-operator-names @gol
176 -fno-optional-diags -fpermissive @gol
177 -frepo -fno-rtti -fsquangle -ftemplate-depth-@var{n} @gol
178 -fuse-cxa-atexit -fvtable-thunks -nostdinc++ @gol
179 -fno-default-inline -Wctor-dtor-privacy @gol
180 -Wnon-virtual-dtor -Wreorder @gol
181 -Weffc++ -Wno-deprecated @gol
182 -Wno-non-template-friend -Wold-style-cast @gol
183 -Woverloaded-virtual -Wno-pmf-conversions @gol
184 -Wsign-promo -Wsynth}
186 @item Language Independent Options
187 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
189 -fmessage-length=@var{n} @gol
190 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}}
192 @item Warning Options
193 @xref{Warning Options,,Options to Request or Suppress Warnings}.
195 -fsyntax-only -pedantic -pedantic-errors @gol
196 -w -W -Wall -Waggregate-return @gol
197 -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol
198 -Wconversion -Wdisabled-optimization -Werror @gol
199 -Wfloat-equal -Wformat -Wformat=2 @gol
200 -Wformat-nonliteral -Wformat-security @gol
201 -Wid-clash-@var{len} -Wimplicit -Wimplicit-int @gol
202 -Wimplicit-function-declaration @gol
203 -Werror-implicit-function-declaration @gol
204 -Wimport -Winline @gol
205 -Wlarger-than-@var{len} -Wlong-long @gol
206 -Wmain -Wmissing-declarations @gol
207 -Wmissing-format-attribute -Wmissing-noreturn @gol
208 -Wmultichar -Wno-format-extra-args -Wno-format-y2k @gol
209 -Wno-import -Wpacked -Wpadded @gol
210 -Wparentheses -Wpointer-arith -Wredundant-decls @gol
211 -Wreturn-type -Wsequence-point -Wshadow @gol
212 -Wsign-compare -Wswitch -Wsystem-headers @gol
213 -Wtrigraphs -Wundef -Wuninitialized @gol
214 -Wunknown-pragmas -Wunreachable-code @gol
215 -Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol
216 -Wunused-value -Wunused-variable -Wwrite-strings}
218 @item C-only Warning Options
220 -Wbad-function-cast -Wmissing-prototypes -Wnested-externs @gol
221 -Wstrict-prototypes -Wtraditional}
223 @item Debugging Options
224 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
226 -a -ax -d@var{letters} -fdump-unnumbered -fdump-translation-unit-@var{file} @gol
227 -fpretend-float -fprofile-arcs -ftest-coverage @gol
228 -g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 @gol
229 -ggdb -gstabs -gstabs+ -gxcoff -gxcoff+ @gol
230 -p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol
231 -print-prog-name=@var{program} -print-search-dirs -Q @gol
234 @item Optimization Options
235 @xref{Optimize Options,,Options that Control Optimization}.
237 -falign-functions=@var{n} -falign-jumps=@var{n} @gol
238 -falign-labels=@var{n} -falign-loops=@var{n} @gol
239 -fbranch-probabilities -fcaller-saves @gol
240 -fcse-follow-jumps -fcse-skip-blocks -fdata-sections -fdce @gol
241 -fdelayed-branch -fdelete-null-pointer-checks @gol
242 -fexpensive-optimizations -ffast-math -ffloat-store @gol
243 -fforce-addr -fforce-mem -ffunction-sections -fgcse @gol
244 -finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol
245 -fkeep-static-consts -fmove-all-movables @gol
246 -fno-default-inline -fno-defer-pop @gol
247 -fno-function-cse -fno-guess-branch-probability
248 -fno-inline -fno-math-errno -fno-peephole @gol
249 -fomit-frame-pointer -foptimize-register-move @gol
250 -foptimize-sibling-calls -freduce-all-givs @gol
251 -fregmove -frename-registers @gol
252 -frerun-cse-after-loop -frerun-loop-opt @gol
253 -fschedule-insns -fschedule-insns2 @gol
254 -fsingle-precision-constant -fssa @gol
255 -fstrength-reduce -fstrict-aliasing -fthread-jumps -ftrapv @gol
256 -funroll-all-loops -funroll-loops @gol
257 -O -O0 -O1 -O2 -O3 -Os}
259 @item Preprocessor Options
260 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
262 -$ -A@var{question}=@var{answer} -A-@var{question}@r{[}=@var{answer}@r{]} @gol
263 -C -dD -dI -dM -dN @gol
264 -D@var{macro}@r{[}=@var{defn}@r{]} -E -H @gol
265 -idirafter @var{dir} @gol
266 -include @var{file} -imacros @var{file} @gol
267 -iprefix @var{file} -iwithprefix @var{dir} @gol
268 -iwithprefixbefore @var{dir} -isystem @var{dir} -isystem-c++ @var{dir} @gol
269 -M -MM -MF -MG -MP -MQ -MT -nostdinc -P -remap @gol
270 -trigraphs -undef -U@var{macro} -Wp\,@var{option}}
272 @item Assembler Option
273 @xref{Assembler Options,,Passing Options to the Assembler}.
278 @xref{Link Options,,Options for Linking}.
280 @var{object-file-name} -l@var{library} @gol
281 -nostartfiles -nodefaultlibs -nostdlib @gol
282 -s -static -static-libgcc -shared -shared-libgcc -symbolic @gol
283 -Wl\,@var{option} -Xlinker @var{option} @gol
286 @item Directory Options
287 @xref{Directory Options,,Options for Directory Search}.
289 -B@var{prefix} -I@var{dir} -I- -L@var{dir} -specs=@var{file}}
292 @c I wrote this xref this way to avoid overfull hbox. -- rms
293 @xref{Target Options}.
295 -b @var{machine} -V @var{version}}
297 @item Machine Dependent Options
298 @xref{Submodel Options,,Hardware Models and Configurations}.
299 @emph{M680x0 Options}
301 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol
302 -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 @gol
303 -mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol
304 -malign-int -mstrict-align}
306 @emph{M68hc1x Options}
308 -m6811 -m6812 -m68hc11 -m68hc12 @gol
309 -mauto-incdec -mshort -msoft-reg-count=@var{count}}
317 -mcpu=@var{cpu type} @gol
318 -mtune=@var{cpu type} @gol
319 -mcmodel=@var{code model} @gol
321 -mapp-regs -mbroken-saverestore -mcypress @gol
322 -mepilogue -mfaster-structs -mflat @gol
323 -mfpu -mhard-float -mhard-quad-float @gol
324 -mimpure-text -mlive-g0 -mno-app-regs @gol
325 -mno-epilogue -mno-faster-structs -mno-flat -mno-fpu @gol
326 -mno-impure-text -mno-stack-bias -mno-unaligned-doubles @gol
327 -msoft-float -msoft-quad-float -msparclite -mstack-bias @gol
328 -msupersparc -munaligned-doubles -mv8}
330 @emph{Convex Options}
332 -mc1 -mc2 -mc32 -mc34 -mc38 @gol
333 -margcount -mnoargcount @gol
334 -mlong32 -mlong64 @gol
335 -mvolatile-cache -mvolatile-nocache}
337 @emph{AMD29K Options}
339 -m29000 -m29050 -mbw -mnbw -mdw -mndw @gol
340 -mlarge -mnormal -msmall @gol
341 -mkernel-registers -mno-reuse-arg-regs @gol
342 -mno-stack-check -mno-storem-bug @gol
343 -mreuse-arg-regs -msoft-float -mstack-check @gol
344 -mstorem-bug -muser-registers}
348 -mapcs-frame -mno-apcs-frame @gol
349 -mapcs-26 -mapcs-32 @gol
350 -mapcs-stack-check -mno-apcs-stack-check @gol
351 -mapcs-float -mno-apcs-float @gol
352 -mapcs-reentrant -mno-apcs-reentrant @gol
353 -msched-prolog -mno-sched-prolog @gol
354 -mlittle-endian -mbig-endian -mwords-little-endian @gol
355 -malignment-traps -mno-alignment-traps @gol
356 -msoft-float -mhard-float -mfpe @gol
357 -mthumb-interwork -mno-thumb-interwork @gol
358 -mcpu= -march= -mfpe= @gol
359 -mstructure-size-boundary= @gol
360 -mbsd -mxopen -mno-symrename @gol
361 -mabort-on-noreturn @gol
362 -mlong-calls -mno-long-calls @gol
363 -mnop-fun-dllimport -mno-nop-fun-dllimport @gol
364 -msingle-pic-base -mno-single-pic-base @gol
369 -mtpcs-frame -mno-tpcs-frame @gol
370 -mtpcs-leaf-frame -mno-tpcs-leaf-frame @gol
371 -mlittle-endian -mbig-endian @gol
372 -mthumb-interwork -mno-thumb-interwork @gol
373 -mstructure-size-boundary= @gol
374 -mnop-fun-dllimport -mno-nop-fun-dllimport @gol
375 -mcallee-super-interworking -mno-callee-super-interworking @gol
376 -mcaller-super-interworking -mno-caller-super-interworking @gol
377 -msingle-pic-base -mno-single-pic-base @gol
380 @emph{MN10200 Options}
384 @emph{MN10300 Options}
392 @emph{M32R/D Options}
394 -mcode-model=@var{model type} -msdata=@var{sdata type} @gol
399 -m88000 -m88100 -m88110 -mbig-pic @gol
400 -mcheck-zero-division -mhandle-large-shift @gol
401 -midentify-revision -mno-check-zero-division @gol
402 -mno-ocs-debug-info -mno-ocs-frame-position @gol
403 -mno-optimize-arg-area -mno-serialize-volatile @gol
404 -mno-underscores -mocs-debug-info @gol
405 -mocs-frame-position -moptimize-arg-area @gol
406 -mserialize-volatile -mshort-data-@var{num} -msvr3 @gol
407 -msvr4 -mtrap-large-shift -muse-div-instruction @gol
408 -mversion-03.00 -mwarn-passed-structs}
410 @emph{RS/6000 and PowerPC Options}
412 -mcpu=@var{cpu type} @gol
413 -mtune=@var{cpu type} @gol
414 -mpower -mno-power -mpower2 -mno-power2 @gol
415 -mpowerpc -mpowerpc64 -mno-powerpc @gol
416 -mpowerpc-gpopt -mno-powerpc-gpopt @gol
417 -mpowerpc-gfxopt -mno-powerpc-gfxopt @gol
418 -mnew-mnemonics -mold-mnemonics @gol
419 -mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc @gol
420 -m64 -m32 -mxl-call -mno-xl-call -mthreads -mpe @gol
421 -msoft-float -mhard-float -mmultiple -mno-multiple @gol
422 -mstring -mno-string -mupdate -mno-update @gol
423 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol
424 -mstrict-align -mno-strict-align -mrelocatable @gol
425 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol
426 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol
427 -mcall-aix -mcall-sysv -mprototype -mno-prototype @gol
428 -msim -mmvme -mads -myellowknife -memb -msdata @gol
429 -msdata=@var{opt} -mvxworks -G @var{num}}
433 -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs @gol
434 -mfull-fp-blocks -mhc-struct-return -min-line-mul @gol
435 -mminimum-fp-blocks -mnohc-struct-return}
439 -mabicalls -mcpu=@var{cpu type}
440 -membedded-data -muninit-const-in-rodata @gol
441 -membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64 @gol
442 -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 @gol
443 -mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy @gol
444 -mmips-as -mmips-tfile -mno-abicalls @gol
445 -mno-embedded-data -mno-uninit-const-in-rodata -mno-embedded-pic @gol
446 -mno-gpopt -mno-long-calls @gol
447 -mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats @gol
448 -mrnames -msoft-float @gol
449 -m4650 -msingle-float -mmad @gol
450 -mstats -EL -EB -G @var{num} -nocpp @gol
451 -mabi=32 -mabi=n32 -mabi=64 -mabi=eabi @gol
456 -mcpu=@var{cpu type} -march=@var{cpu type} @gol
457 -mintel-syntax -mieee-fp -mno-fancy-math-387 @gol
458 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol
459 -mno-wide-multiply -mrtd -malign-double @gol
460 -mreg-alloc=@var{list} -mregparm=@var{num} @gol
461 -malign-jumps=@var{num} -malign-loops=@var{num} @gol
462 -malign-functions=@var{num} -mpreferred-stack-boundary=@var{num} @gol
463 -mthreads -mno-align-stringops -minline-all-stringops @gol
464 -mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
469 -march=@var{architecture type} @gol
470 -mbig-switch -mdisable-fpregs -mdisable-indexing @gol
471 -mfast-indirect-calls -mgas -mjump-in-delay @gol
472 -mlong-load-store -mno-big-switch -mno-disable-fpregs @gol
473 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol
474 -mno-jump-in-delay -mno-long-load-store @gol
475 -mno-portable-runtime -mno-soft-float @gol
476 -mno-space-regs -msoft-float -mpa-risc-1-0 @gol
477 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol
478 -mschedule=@var{cpu type} -mspace-regs}
480 @emph{Intel 960 Options}
482 -m@var{cpu type} -masm-compat -mclean-linkage @gol
483 -mcode-align -mcomplex-addr -mleaf-procedures @gol
484 -mic-compat -mic2.0-compat -mic3.0-compat @gol
485 -mintel-asm -mno-clean-linkage -mno-code-align @gol
486 -mno-complex-addr -mno-leaf-procedures @gol
487 -mno-old-align -mno-strict-align -mno-tail-call @gol
488 -mnumerics -mold-align -msoft-float -mstrict-align @gol
491 @emph{DEC Alpha Options}
493 -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float @gol
494 -malpha-as -mgas @gol
495 -mieee -mieee-with-inexact -mieee-conformant @gol
496 -mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol
497 -mtrap-precision=@var{mode} -mbuild-constants @gol
498 -mcpu=@var{cpu type} @gol
499 -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max @gol
500 -mmemory-latency=@var{time}}
502 @emph{Clipper Options}
506 @emph{H8/300 Options}
508 -mrelax -mh -ms -mint32 -malign-300}
512 -m1 -m2 -m3 -m3e @gol
513 -m4-nofpu -m4-single-only -m4-single -m4 @gol
514 -mb -ml -mdalign -mrelax @gol
515 -mbigtable -mfmovd -mhitachi -mnomacsave @gol
516 -misize -mpadstruct -mspace @gol
520 @emph{System V Options}
522 -Qy -Qn -YP\,@var{paths} -Ym\,@var{dir}}
527 -mmangle-cpu -mcpu=@var{cpu} -mtext=@var{text section} @gol
528 -mdata=@var{data section} -mrodata=@var{readonly data section}}
530 @emph{TMS320C3x/C4x Options}
532 -mcpu=@var{cpu} -mbig -msmall -mregparm -mmemparm @gol
533 -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload @gol
534 -mrpts=@var{count} -mrptb -mdb -mloop-unsigned @gol
535 -mparallel-insns -mparallel-mpy -mpreserve-float}
539 -mlong-calls -mno-long-calls -mep -mno-ep @gol
540 -mprolog-function -mno-prolog-function -mspace @gol
541 -mtda=@var{n} -msda=@var{n} -mzda=@var{n} @gol
546 -m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add @gol
547 -msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb @gol
548 -mbitfield -mnobitfield -mhimem -mnohimem}
552 -mmcu=@var{mcu} -msize -minit-stack=@var{n} -mno-interrupts @gol
553 -mcall-prologues -mno-tablejump -mtiny-stack}
557 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol
558 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol
559 -m4byte-functions -mno-4byte-functions -mcallgraph-data @gol
560 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol
561 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment}
565 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol
566 -mvolatile-asm-stop -mb-step -mregister-names -mno-sdata @gol
567 -mconstant-gp -mauto-pic -minline-divide-min-latency @gol
568 -minline-divide-max-throughput -mno-dwarf2-asm @gol
569 -mfixed-range=@var{register range}}
571 @item Code Generation Options
572 @xref{Code Gen Options,,Options for Code Generation Conventions}.
574 -fcall-saved-@var{reg} -fcall-used-@var{reg} @gol
575 -fexceptions -funwind-tables -ffixed-@var{reg} @gol
576 -finhibit-size-directive -finstrument-functions @gol
577 -fcheck-memory-usage -fprefix-function-name @gol
578 -fno-common -fno-ident -fno-gnu-linker @gol
579 -fpcc-struct-return -fpic -fPIC @gol
580 -freg-struct-return -fshared-data -fshort-enums @gol
581 -fshort-double -fvolatile -fvolatile-global -fvolatile-static @gol
582 -fverbose-asm -fpack-struct -fstack-check @gol
583 -fstack-limit-register=@var{reg} -fstack-limit-symbol=@var{sym} @gol
584 -fargument-alias -fargument-noalias @gol
585 -fargument-noalias-global @gol
586 -fleading-underscore}
590 * Overall Options:: Controlling the kind of output:
591 an executable, object files, assembler files,
592 or preprocessed source.
593 * C Dialect Options:: Controlling the variant of C language compiled.
594 * C++ Dialect Options:: Variations on C++.
595 * Language Independent Options:: Controlling how diagnostics should be
597 * Warning Options:: How picky should the compiler be?
598 * Debugging Options:: Symbol tables, measurements, and debugging dumps.
599 * Optimize Options:: How much optimization?
600 * Preprocessor Options:: Controlling header files and macro definitions.
601 Also, getting dependency information for Make.
602 * Assembler Options:: Passing options to the assembler.
603 * Link Options:: Specifying libraries and so on.
604 * Directory Options:: Where to find header files and libraries.
605 Where to find the compiler executable files.
606 * Spec Files:: How to pass switches to sub-processes.
607 * Target Options:: Running a cross-compiler, or an old version of GCC.
610 @node Overall Options
611 @section Options Controlling the Kind of Output
613 Compilation can involve up to four stages: preprocessing, compilation
614 proper, assembly and linking, always in that order. The first three
615 stages apply to an individual source file, and end by producing an
616 object file; linking combines all the object files (those newly
617 compiled, and those specified as input) into an executable file.
619 @cindex file name suffix
620 For any given input file, the file name suffix determines what kind of
625 C source code which must be preprocessed.
628 C source code which should not be preprocessed.
631 C++ source code which should not be preprocessed.
634 Objective-C source code. Note that you must link with the library
635 @file{libobjc.a} to make an Objective-C program work.
638 Objective-C source code which should not be preprocessed.
641 C header file (not to be compiled or linked).
645 @itemx @var{file}.cxx
646 @itemx @var{file}.cpp
647 @itemx @var{file}.c++
649 C++ source code which must be preprocessed. Note that in @samp{.cxx},
650 the last two letters must both be literally @samp{x}. Likewise,
651 @samp{.C} refers to a literal capital C.
654 @itemx @var{file}.for
655 @itemx @var{file}.FOR
656 Fortran source code which should not be preprocessed.
659 @itemx @var{file}.fpp
660 @itemx @var{file}.FPP
661 Fortran source code which must be preprocessed (with the traditional
665 Fortran source code which must be preprocessed with a RATFOR
666 preprocessor (not included with GCC).
668 @xref{Overall Options,,Options Controlling the Kind of Output, g77,
669 Using and Porting GNU Fortran}, for more details of the handling of
672 @c FIXME: Descriptions of Java file types.
678 @c GCC also knows about some suffixes for languages not yet included:
688 @itemx @var{file}.chi
689 CHILL source code (preprocessed with the traditional preprocessor).
695 Assembler code which must be preprocessed.
698 An object file to be fed straight into linking.
699 Any file name with no recognized suffix is treated this way.
702 You can specify the input language explicitly with the @samp{-x} option:
705 @item -x @var{language}
706 Specify explicitly the @var{language} for the following input files
707 (rather than letting the compiler choose a default based on the file
708 name suffix). This option applies to all following input files until
709 the next @samp{-x} option. Possible values for @var{language} are:
711 c c-header cpp-output
713 objective-c objc-cpp-output
714 assembler assembler-with-cpp
715 f77 f77-cpp-input ratfor
718 @c Also f77-version, for internal use only.
721 Turn off any specification of a language, so that subsequent files are
722 handled according to their file name suffixes (as they are if @samp{-x}
723 has not been used at all).
725 @item -pass-exit-codes
726 Normally the @command{gcc} program will exit with the code of 1 if any
727 phase of the compiler returns a non-success return code. If you specify
728 @samp{-pass-exit-codes}, the @command{gcc} program will instead return with
729 numerically highest error produced by any phase that returned an error
733 If you only want some of the stages of compilation, you can use
734 @samp{-x} (or filename suffixes) to tell @command{gcc} where to start, and
735 one of the options @samp{-c}, @samp{-S}, or @samp{-E} to say where
736 @command{gcc} is to stop. Note that some combinations (for example,
737 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
741 Compile or assemble the source files, but do not link. The linking
742 stage simply is not done. The ultimate output is in the form of an
743 object file for each source file.
745 By default, the object file name for a source file is made by replacing
746 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
748 Unrecognized input files, not requiring compilation or assembly, are
752 Stop after the stage of compilation proper; do not assemble. The output
753 is in the form of an assembler code file for each non-assembler input
756 By default, the assembler file name for a source file is made by
757 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
759 Input files that don't require compilation are ignored.
762 Stop after the preprocessing stage; do not run the compiler proper. The
763 output is in the form of preprocessed source code, which is sent to the
766 Input files which don't require preprocessing are ignored.
768 @cindex output file option
770 Place output in file @var{file}. This applies regardless to whatever
771 sort of output is being produced, whether it be an executable file,
772 an object file, an assembler file or preprocessed C code.
774 Since only one output file can be specified, it does not make sense to
775 use @samp{-o} when compiling more than one input file, unless you are
776 producing an executable file as output.
778 If @samp{-o} is not specified, the default is to put an executable file
779 in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
780 @file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
781 all preprocessed C source on standard output.@refill
784 Print (on standard error output) the commands executed to run the stages
785 of compilation. Also print the version number of the compiler driver
786 program and of the preprocessor and the compiler proper.
789 Use pipes rather than temporary files for communication between the
790 various stages of compilation. This fails to work on some systems where
791 the assembler is unable to read from a pipe; but the GNU assembler has
795 Print (on the standard output) a description of the command line options
796 understood by @command{gcc}. If the @option{-v} option is also specified
797 then @option{--help} will also be passed on to the various processes
798 invoked by @command{gcc}, so that they can display the command line options
799 they accept. If the @option{-W} option is also specified then command
800 line options which have no documentation associated with them will also
804 Print (on the standard output) a description of target specific command
805 line options for each tool.
809 @section Compiling C++ Programs
811 @cindex suffixes for C++ source
812 @cindex C++ source file suffixes
813 C++ source files conventionally use one of the suffixes @samp{.C},
814 @samp{.cc}, @samp{.cpp}, @samp{.c++}, @samp{.cp}, or @samp{.cxx};
815 preprocessed C++ files use the suffix @samp{.ii}. GCC recognizes
816 files with these names and compiles them as C++ programs even if you
817 call the compiler the same way as for compiling C programs (usually with
818 the name @command{gcc}).
822 However, C++ programs often require class libraries as well as a
823 compiler that understands the C++ language---and under some
824 circumstances, you might want to compile programs from standard input,
825 or otherwise without a suffix that flags them as C++ programs.
826 @command{g++} is a program that calls GCC with the default language
827 set to C++, and automatically specifies linking against the C++
828 library. On many systems, @command{g++} is also
829 installed with the name @command{c++}.
831 @cindex invoking @command{g++}
832 When you compile C++ programs, you may specify many of the same
833 command-line options that you use for compiling programs in any
834 language; or command-line options meaningful for C and related
835 languages; or options that are meaningful only for C++ programs.
836 @xref{C Dialect Options,,Options Controlling C Dialect}, for
837 explanations of options for languages related to C.
838 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
839 explanations of options that are meaningful only for C++ programs.
841 @node C Dialect Options
842 @section Options Controlling C Dialect
843 @cindex dialect options
844 @cindex language dialect options
845 @cindex options, dialect
847 The following options control the dialect of C (or languages derived
848 from C, such as C++ and Objective C) that the compiler accepts:
854 In C mode, support all ISO C89 programs. In C++ mode,
855 remove GNU extensions that conflict with ISO C++.
857 This turns off certain features of GCC that are incompatible with ISO
858 C (when compiling C code), or of standard C++ (when compiling C++ code),
859 such as the @code{asm} and @code{typeof} keywords, and
860 predefined macros such as @code{unix} and @code{vax} that identify the
861 type of system you are using. It also enables the undesirable and
862 rarely used ISO trigraph feature. For the C compiler,
863 it disables recognition of C++ style @samp{//} comments as well as
864 the @code{inline} keyword.
866 The alternate keywords @code{__asm__}, @code{__extension__},
867 @code{__inline__} and @code{__typeof__} continue to work despite
868 @samp{-ansi}. You would not want to use them in an ISO C program, of
869 course, but it is useful to put them in header files that might be included
870 in compilations done with @samp{-ansi}. Alternate predefined macros
871 such as @code{__unix__} and @code{__vax__} are also available, with or
872 without @samp{-ansi}.
874 The @samp{-ansi} option does not cause non-ISO programs to be
875 rejected gratuitously. For that, @samp{-pedantic} is required in
876 addition to @samp{-ansi}. @xref{Warning Options}.
878 The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
879 option is used. Some header files may notice this macro and refrain
880 from declaring certain functions or defining certain macros that the
881 ISO standard doesn't call for; this is to avoid interfering with any
882 programs that might use these names for other things.
884 Functions which would normally be builtin but do not have semantics
885 defined by ISO C (such as @code{alloca} and @code{ffs}) are not builtin
886 functions with @samp{-ansi} is used. @xref{Other Builtins,,Other
887 built-in functions provided by GNU CC}, for details of the functions
891 Determine the language standard. A value for this option must be provided;
896 Same as @option{-ansi}
899 ISO C as modified in amend. 1
902 ISO C99. Note that this standard is not yet fully supported; see
903 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.
906 same as @option{-std=iso9899:1990}
909 same as @option{-std=iso9899:1999}
912 default, iso9899:1990 + gnu extensions
915 iso9899:1999 + gnu extensions
918 same as @option{-std=iso9899:1999}, deprecated
921 same as @option{-std=iso9899:1999}, deprecated
924 same as @option{-std=gnu99}, deprecated
928 Even when this option is not specified, you can still use some of the
929 features of newer standards in so far as they do not conflict with
930 previous C standards. For example, you may use @code{__restrict__} even
931 when @option{-std=c99} is not specified.
933 The @option{-std} options specifying some version of ISO C have the same
934 effects as @option{-ansi}, except that features that were not in ISO C89
935 but are in the specified version (for example, @samp{//} comments and
936 the @code{inline} keyword in ISO C99) are not disabled.
938 @xref{Standards,,Language Standards Supported by GCC}, for details of
939 these standard versions.
942 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
943 keyword, so that code can use these words as identifiers. You can use
944 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
945 instead. @samp{-ansi} implies @samp{-fno-asm}.
947 In C++, this switch only affects the @code{typeof} keyword, since
948 @code{asm} and @code{inline} are standard keywords. You may want to
949 use the @samp{-fno-gnu-keywords} flag instead, which has the same
950 effect. In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
951 switch only affects the @code{asm} and @code{typeof} keywords, since
952 @code{inline} is a standard keyword in ISO C99.
955 @cindex builtin functions
956 Don't recognize builtin functions that do not begin with
957 @samp{__builtin_} as prefix. @xref{Other Builtins,,Other built-in
958 functions provided by GNU CC}, for details of the functions affected,
959 including those which are not builtin functions when @option{-ansi} or
960 @option{-std} options for strict ISO C conformance are used because they
961 do not have an ISO standard meaning.
963 GCC normally generates special code to handle certain builtin functions
964 more efficiently; for instance, calls to @code{alloca} may become single
965 instructions that adjust the stack directly, and calls to @code{memcpy}
966 may become inline copy loops. The resulting code is often both smaller
967 and faster, but since the function calls no longer appear as such, you
968 cannot set a breakpoint on those calls, nor can you change the behavior
969 of the functions by linking with a different library.
972 @cindex hosted environment
974 Assert that compilation takes place in a hosted environment. This implies
975 @samp{-fbuiltin}. A hosted environment is one in which the
976 entire standard library is available, and in which @code{main} has a return
977 type of @code{int}. Examples are nearly everything except a kernel.
978 This is equivalent to @samp{-fno-freestanding}.
981 @cindex hosted environment
983 Assert that compilation takes place in a freestanding environment. This
984 implies @samp{-fno-builtin}. A freestanding environment
985 is one in which the standard library may not exist, and program startup may
986 not necessarily be at @code{main}. The most obvious example is an OS kernel.
987 This is equivalent to @samp{-fno-hosted}.
989 @xref{Standards,,Language Standards Supported by GCC}, for details of
990 freestanding and hosted environments.
993 Support ISO C trigraphs. You don't want to know about this
994 brain-damage. The @option{-ansi} option (and @option{-std} options for
995 strict ISO C conformance) implies @option{-trigraphs}.
997 @cindex traditional C language
998 @cindex C language, traditional
1000 Attempt to support some aspects of traditional C compilers.
1005 All @code{extern} declarations take effect globally even if they
1006 are written inside of a function definition. This includes implicit
1007 declarations of functions.
1010 The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
1011 and @code{volatile} are not recognized. (You can still use the
1012 alternative keywords such as @code{__typeof__}, @code{__inline__}, and
1016 Comparisons between pointers and integers are always allowed.
1019 Integer types @code{unsigned short} and @code{unsigned char} promote
1020 to @code{unsigned int}.
1023 Out-of-range floating point literals are not an error.
1026 Certain constructs which ISO regards as a single invalid preprocessing
1027 number, such as @samp{0xe-0xd}, are treated as expressions instead.
1030 String ``constants'' are not necessarily constant; they are stored in
1031 writable space, and identical looking constants are allocated
1032 separately. (This is the same as the effect of
1033 @samp{-fwritable-strings}.)
1035 @cindex @code{longjmp} and automatic variables
1037 All automatic variables not declared @code{register} are preserved by
1038 @code{longjmp}. Ordinarily, GNU C follows ISO C: automatic variables
1039 not declared @code{volatile} may be clobbered.
1044 @cindex escape sequences, traditional
1045 The character escape sequences @samp{\x} and @samp{\a} evaluate as the
1046 literal characters @samp{x} and @samp{a} respectively. Without
1047 @w{@samp{-traditional}}, @samp{\x} is a prefix for the hexadecimal
1048 representation of a character, and @samp{\a} produces a bell.
1051 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
1052 if your program uses names that are normally GNU C builtin functions for
1053 other purposes of its own.
1055 You cannot use @samp{-traditional} if you include any header files that
1056 rely on ISO C features. Some vendors are starting to ship systems with
1057 ISO C header files and you cannot use @samp{-traditional} on such
1058 systems to compile files that include any system headers.
1060 The @samp{-traditional} option also enables @samp{-traditional-cpp},
1061 which is described next.
1063 @item -traditional-cpp
1064 Attempt to support some aspects of traditional C preprocessors.
1069 Comments convert to nothing at all, rather than to a space. This allows
1070 traditional token concatenation.
1073 In a preprocessing directive, the @samp{#} symbol must appear as the first
1074 character of a line.
1077 Macro arguments are recognized within string constants in a macro
1078 definition (and their values are stringified, though without additional
1079 quote marks, when they appear in such a context). The preprocessor
1080 always considers a string constant to end at a newline.
1083 @cindex detecting @w{@samp{-traditional}}
1084 The predefined macro @code{__STDC__} is not defined when you use
1085 @samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions
1086 which @code{__GNUC__} indicates are not affected by
1087 @samp{-traditional}). If you need to write header files that work
1088 differently depending on whether @samp{-traditional} is in use, by
1089 testing both of these predefined macros you can distinguish four
1090 situations: GNU C, traditional GNU C, other ISO C compilers, and other
1091 old C compilers. The predefined macro @code{__STDC_VERSION__} is also
1092 not defined when you use @samp{-traditional}. @xref{Standard
1093 Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor},
1094 for more discussion of these and other predefined macros.
1097 @cindex string constants vs newline
1098 @cindex newline vs string constants
1099 The preprocessor considers a string constant to end at a newline (unless
1100 the newline is escaped with @samp{\}). (Without @w{@samp{-traditional}},
1101 string constants can contain the newline character as typed.)
1104 @item -fcond-mismatch
1105 Allow conditional expressions with mismatched types in the second and
1106 third arguments. The value of such an expression is void. This option
1107 is not supported for C++.
1109 @item -funsigned-char
1110 Let the type @code{char} be unsigned, like @code{unsigned char}.
1112 Each kind of machine has a default for what @code{char} should
1113 be. It is either like @code{unsigned char} by default or like
1114 @code{signed char} by default.
1116 Ideally, a portable program should always use @code{signed char} or
1117 @code{unsigned char} when it depends on the signedness of an object.
1118 But many programs have been written to use plain @code{char} and
1119 expect it to be signed, or expect it to be unsigned, depending on the
1120 machines they were written for. This option, and its inverse, let you
1121 make such a program work with the opposite default.
1123 The type @code{char} is always a distinct type from each of
1124 @code{signed char} or @code{unsigned char}, even though its behavior
1125 is always just like one of those two.
1128 Let the type @code{char} be signed, like @code{signed char}.
1130 Note that this is equivalent to @samp{-fno-unsigned-char}, which is
1131 the negative form of @samp{-funsigned-char}. Likewise, the option
1132 @samp{-fno-signed-char} is equivalent to @samp{-funsigned-char}.
1134 You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
1135 if your program uses names that are normally GNU C builtin functions for
1136 other purposes of its own.
1138 You cannot use @samp{-traditional} if you include any header files that
1139 rely on ISO C features. Some vendors are starting to ship systems with
1140 ISO C header files and you cannot use @samp{-traditional} on such
1141 systems to compile files that include any system headers.
1143 @item -fsigned-bitfields
1144 @itemx -funsigned-bitfields
1145 @itemx -fno-signed-bitfields
1146 @itemx -fno-unsigned-bitfields
1147 These options control whether a bitfield is signed or unsigned, when the
1148 declaration does not use either @code{signed} or @code{unsigned}. By
1149 default, such a bitfield is signed, because this is consistent: the
1150 basic integer types such as @code{int} are signed types.
1152 However, when @samp{-traditional} is used, bitfields are all unsigned
1155 @item -fwritable-strings
1156 Store string constants in the writable data segment and don't uniquize
1157 them. This is for compatibility with old programs which assume they can
1158 write into string constants. The option @samp{-traditional} also has
1161 Writing into string constants is a very bad idea; ``constants'' should
1164 @item -fallow-single-precision
1165 Do not promote single precision math operations to double precision,
1166 even when compiling with @samp{-traditional}.
1168 Traditional K&R C promotes all floating point operations to double
1169 precision, regardless of the sizes of the operands. On the
1170 architecture for which you are compiling, single precision may be faster
1171 than double precision. If you must use @samp{-traditional}, but want
1172 to use single precision operations when the operands are single
1173 precision, use this option. This option has no effect when compiling
1174 with ISO or GNU C conventions (the default).
1177 Override the underlying type for @samp{wchar_t} to be @samp{short
1178 unsigned int} instead of the default for the target. This option is
1179 useful for building programs to run under WINE.
1182 @node C++ Dialect Options
1183 @section Options Controlling C++ Dialect
1185 @cindex compiler options, C++
1186 @cindex C++ options, command line
1187 @cindex options, C++
1188 This section describes the command-line options that are only meaningful
1189 for C++ programs; but you can also use most of the GNU compiler options
1190 regardless of what language your program is in. For example, you
1191 might compile a file @code{firstClass.C} like this:
1194 g++ -g -frepo -O -c firstClass.C
1198 In this example, only @samp{-frepo} is an option meant
1199 only for C++ programs; you can use the other options with any
1200 language supported by GCC.
1202 Here is a list of options that are @emph{only} for compiling C++ programs:
1205 @item -fno-access-control
1206 Turn off all access checking. This switch is mainly useful for working
1207 around bugs in the access control code.
1210 Check that the pointer returned by @code{operator new} is non-null
1211 before attempting to modify the storage allocated. The current Working
1212 Paper requires that @code{operator new} never return a null pointer, so
1213 this check is normally unnecessary.
1215 An alternative to using this option is to specify that your
1216 @code{operator new} does not throw any exceptions; if you declare it
1217 @samp{throw()}, g++ will check the return value. See also @samp{new
1220 @item -fconserve-space
1221 Put uninitialized or runtime-initialized global variables into the
1222 common segment, as C does. This saves space in the executable at the
1223 cost of not diagnosing duplicate definitions. If you compile with this
1224 flag and your program mysteriously crashes after @code{main()} has
1225 completed, you may have an object that is being destroyed twice because
1226 two definitions were merged.
1228 This option is no longer useful on most targets, now that support has
1229 been added for putting variables into BSS without making them common.
1231 @item -fdollars-in-identifiers
1232 Accept @samp{$} in identifiers. You can also explicitly prohibit use of
1233 @samp{$} with the option @samp{-fno-dollars-in-identifiers}. (GNU C allows
1234 @samp{$} by default on most target systems, but there are a few exceptions.)
1235 Traditional C allowed the character @samp{$} to form part of
1236 identifiers. However, ISO C and C++ forbid @samp{$} in identifiers.
1238 @item -fno-elide-constructors
1239 The C++ standard allows an implementation to omit creating a temporary
1240 which is only used to initialize another object of the same type.
1241 Specifying this option disables that optimization, and forces g++ to
1242 call the copy constructor in all cases.
1244 @item -fno-enforce-eh-specs
1245 Don't check for violation of exception specifications at runtime. This
1246 option violates the C++ standard, but may be useful for reducing code
1247 size in production builds, much like defining @samp{NDEBUG}. The compiler
1248 will still optimize based on the exception specifications.
1250 @item -fexternal-templates
1251 Cause template instantiations to obey @samp{#pragma interface} and
1252 @samp{implementation}; template instances are emitted or not according
1253 to the location of the template definition. @xref{Template
1254 Instantiation}, for more information.
1256 This option is deprecated.
1258 @item -falt-external-templates
1259 Similar to -fexternal-templates, but template instances are emitted or
1260 not according to the place where they are first instantiated.
1261 @xref{Template Instantiation}, for more information.
1263 This option is deprecated.
1266 @itemx -fno-for-scope
1267 If -ffor-scope is specified, the scope of variables declared in
1268 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1269 as specified by the C++ standard.
1270 If -fno-for-scope is specified, the scope of variables declared in
1271 a @i{for-init-statement} extends to the end of the enclosing scope,
1272 as was the case in old versions of gcc, and other (traditional)
1273 implementations of C++.
1275 The default if neither flag is given to follow the standard,
1276 but to allow and give a warning for old-style code that would
1277 otherwise be invalid, or have different behavior.
1279 @item -fno-gnu-keywords
1280 Do not recognize @code{typeof} as a keyword, so that code can use this
1281 word as an identifier. You can use the keyword @code{__typeof__} instead.
1282 @samp{-ansi} implies @samp{-fno-gnu-keywords}.
1285 Treat the @code{namespace std} as a namespace, instead of ignoring
1286 it. For compatibility with earlier versions of g++, the compiler will,
1287 by default, ignore @code{namespace-declarations},
1288 @code{using-declarations}, @code{using-directives}, and
1289 @code{namespace-names}, if they involve @code{std}.
1291 @item -fhuge-objects
1292 Support virtual function calls for objects that exceed the size
1293 representable by a @samp{short int}. Users should not use this flag by
1294 default; if you need to use it, the compiler will tell you so.
1296 This flag is not useful when compiling with -fvtable-thunks.
1298 Like all options that change the ABI, all C++ code, @emph{including
1299 libgcc} must be built with the same setting of this option.
1301 @item -fno-implicit-templates
1302 Never emit code for non-inline templates which are instantiated
1303 implicitly (i.e. by use); only emit code for explicit instantiations.
1304 @xref{Template Instantiation}, for more information.
1306 @item -fno-implicit-inline-templates
1307 Don't emit code for implicit instantiations of inline templates, either.
1308 The default is to handle inlines differently so that compiles with and
1309 without optimization will need the same set of explicit instantiations.
1311 @item -fno-implement-inlines
1312 To save space, do not emit out-of-line copies of inline functions
1313 controlled by @samp{#pragma implementation}. This will cause linker
1314 errors if these functions are not inlined everywhere they are called.
1316 @item -fms-extensions
1317 Disable pedantic warnings about constructs used in MFC, such as implicit
1318 int and getting a pointer to member function via non-standard syntax.
1320 @item -fname-mangling-version-@var{n}
1321 Control the way in which names are mangled. Version 0 is compatible
1322 with versions of g++ before 2.8. Version 1 is the default. Version 1
1323 will allow correct mangling of function templates. For example,
1324 version 0 mangling does not mangle foo<int, double> and foo<int, char>
1325 given this declaration:
1328 template <class T, class U> void foo(T t);
1331 Like all options that change the ABI, all C++ code, @emph{including
1332 libgcc} must be built with the same setting of this option.
1334 @item -fno-operator-names
1335 Do not treat the operator name keywords @code{and}, @code{bitand},
1336 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1337 synonyms as keywords.
1339 @item -fno-optional-diags
1340 Disable diagnostics that the standard says a compiler does not need to
1341 issue. Currently, the only such diagnostic issued by g++ is the one for
1342 a name having multiple meanings within a class.
1345 Downgrade messages about nonconformant code from errors to warnings. By
1346 default, g++ effectively sets @samp{-pedantic-errors} without
1347 @samp{-pedantic}; this option reverses that. This behavior and this
1348 option are superseded by @samp{-pedantic}, which works as it does for GNU C.
1351 Enable automatic template instantiation. This option also implies
1352 @samp{-fno-implicit-templates}. @xref{Template Instantiation}, for more
1356 Disable generation of information about every class with virtual
1357 functions for use by the C++ runtime type identification features
1358 (@samp{dynamic_cast} and @samp{typeid}). If you don't use those parts
1359 of the language, you can save some space by using this flag. Note that
1360 exception handling uses the same information, but it will generate it as
1364 @itemx -fno-squangle
1365 @samp{-fsquangle} will enable a compressed form of name mangling for
1366 identifiers. In particular, it helps to shorten very long names by recognizing
1367 types and class names which occur more than once, replacing them with special
1368 short ID codes. This option also requires any C++ libraries being used to
1369 be compiled with this option as well. The compiler has this disabled (the
1370 equivalent of @samp{-fno-squangle}) by default.
1372 Like all options that change the ABI, all C++ code, @emph{including
1373 libgcc.a} must be built with the same setting of this option.
1375 @item -ftemplate-depth-@var{n}
1376 Set the maximum instantiation depth for template classes to @var{n}.
1377 A limit on the template instantiation depth is needed to detect
1378 endless recursions during template class instantiation. ANSI/ISO C++
1379 conforming programs must not rely on a maximum depth greater than 17.
1381 @item -fuse-cxa-atexit
1382 Register destructors for objects with static storage duration with the
1383 @code{__cxa_atexit} function rather than the @code{atexit} function.
1384 This option is required for fully standards-compliant handling of static
1385 destructors, but will only work if your C library supports
1386 @code{__cxa_atexit}.
1388 @item -fvtable-thunks
1389 Use @samp{thunks} to implement the virtual function dispatch table
1390 (@samp{vtable}). The traditional (cfront-style) approach to
1391 implementing vtables was to store a pointer to the function and two
1392 offsets for adjusting the @samp{this} pointer at the call site. Newer
1393 implementations store a single pointer to a @samp{thunk} function which
1394 does any necessary adjustment and then calls the target function.
1396 This option also enables a heuristic for controlling emission of
1397 vtables; if a class has any non-inline virtual functions, the vtable
1398 will be emitted in the translation unit containing the first one of
1401 Like all options that change the ABI, all C++ code, @emph{including
1402 libgcc.a} must be built with the same setting of this option.
1405 Do not search for header files in the standard directories specific to
1406 C++, but do still search the other standard directories. (This option
1407 is used when building the C++ library.)
1410 In addition, these optimization, warning, and code generation options
1411 have meanings only for C++ programs:
1414 @item -fno-default-inline
1415 Do not assume @samp{inline} for functions defined inside a class scope.
1416 @xref{Optimize Options,,Options That Control Optimization}. Note that these
1417 functions will have linkage like inline functions; they just won't be
1420 @item -Wctor-dtor-privacy (C++ only)
1421 Warn when a class seems unusable, because all the constructors or
1422 destructors in a class are private and the class has no friends or
1423 public static member functions.
1425 @item -Wnon-virtual-dtor (C++ only)
1426 Warn when a class declares a non-virtual destructor that should probably
1427 be virtual, because it looks like the class will be used polymorphically.
1429 @item -Wreorder (C++ only)
1430 @cindex reordering, warning
1431 @cindex warning for reordering of member initializers
1432 Warn when the order of member initializers given in the code does not
1433 match the order in which they must be executed. For instance:
1439 A(): j (0), i (1) @{ @}
1443 Here the compiler will warn that the member initializers for @samp{i}
1444 and @samp{j} will be rearranged to match the declaration order of the
1448 The following @samp{-W@dots{}} options are not affected by @samp{-Wall}.
1451 @item -Weffc++ (C++ only)
1452 Warn about violations of various style guidelines from Scott Meyers'
1453 @cite{Effective C++} books. If you use this option, you should be aware
1454 that the standard library headers do not obey all of these guidelines;
1455 you can use @samp{grep -v} to filter out those warnings.
1457 @item -Wno-deprecated (C++ only)
1458 Do not warn about usage of deprecated features. @xref{Deprecated Features}.
1460 @item -Wno-non-template-friend (C++ only)
1461 Disable warnings when non-templatized friend functions are declared
1462 within a template. With the advent of explicit template specification
1463 support in g++, if the name of the friend is an unqualified-id (ie,
1464 @samp{friend foo(int)}), the C++ language specification demands that the
1465 friend declare or define an ordinary, nontemplate function. (Section
1466 14.5.3). Before g++ implemented explicit specification, unqualified-ids
1467 could be interpreted as a particular specialization of a templatized
1468 function. Because this non-conforming behavior is no longer the default
1469 behavior for g++, @samp{-Wnon-template-friend} allows the compiler to
1470 check existing code for potential trouble spots, and is on by default.
1471 This new compiler behavior can be turned off with
1472 @samp{-Wno-non-template-friend} which keeps the conformant compiler code
1473 but disables the helpful warning.
1475 @item -Wold-style-cast (C++ only)
1476 Warn if an old-style (C-style) cast is used within a C++ program. The
1477 new-style casts (@samp{static_cast}, @samp{reinterpret_cast}, and
1478 @samp{const_cast}) are less vulnerable to unintended effects.
1480 @item -Woverloaded-virtual (C++ only)
1481 @cindex overloaded virtual fn, warning
1482 @cindex warning for overloaded virtual fn
1483 Warn when a derived class function declaration may be an error in
1484 defining a virtual function. In a derived class, the
1485 definitions of virtual functions must match the type signature of a
1486 virtual function declared in the base class. With this option, the
1487 compiler warns when you define a function with the same name as a
1488 virtual function, but with a type signature that does not match any
1489 declarations from the base class.
1491 @item -Wno-pmf-conversions (C++ only)
1492 Disable the diagnostic for converting a bound pointer to member function
1495 @item -Wsign-promo (C++ only)
1496 Warn when overload resolution chooses a promotion from unsigned or
1497 enumeral type to a signed type over a conversion to an unsigned type of
1498 the same size. Previous versions of g++ would try to preserve
1499 unsignedness, but the standard mandates the current behavior.
1501 @item -Wsynth (C++ only)
1502 @cindex warning for synthesized methods
1503 @cindex synthesized methods, warning
1504 Warn when g++'s synthesis behavior does not match that of cfront. For
1510 A& operator = (int);
1520 In this example, g++ will synthesize a default @samp{A& operator =
1521 (const A&);}, while cfront will use the user-defined @samp{operator =}.
1524 @node Language Independent Options
1525 @section Options to Control Diagnostic Messages Formatting
1526 @cindex options to control diagnostics formatting
1527 @cindex diagnostic messages
1528 @cindex message formatting
1530 Traditionally, diagnostic messages have been formatted irrespective of
1531 the output device's aspect (e.g. its width, ...). The options described
1532 below can be used to control the diagnostic messages formatting
1533 algorithm, e.g. how many characters per line, how often source location
1534 information should be reported. Right now, only the C++ front-end can
1535 honor these options. However it is expected, in the near future, that
1536 the remaining front-ends would be able to digest them correctly.
1539 @item -fmessage-length=@var{n}
1540 Try to format error messages so that they fit on lines of about @var{n}
1541 characters. The default is 72 characters for g++ and 0 for the rest of
1542 the front-ends supported by GCC. If @var{n} is zero, then no
1543 line-wrapping will be done; each error message will appear on a single
1546 @item -fdiagnostics-show-location=once
1547 Only meaningful in line-wrapping mode. Instructs the diagnostic messages
1548 reporter to emit @emph{once} source location information; that is, in
1549 case the message is too long to fit on a single physical line and has to
1550 be wrapped, the source location won't be emitted (as prefix) again,
1551 over and over, in subsequent continuation lines. This is the default
1554 @item -fdiagnostics-show-location=every-line
1555 Only meaningful in line-wrapping mode. Instructs the diagnostic
1556 messages reporter to emit the same source location information (as
1557 prefix) for physical lines that result from the process of breaking a
1558 a message which is too long to fit on a single line.
1562 @node Warning Options
1563 @section Options to Request or Suppress Warnings
1564 @cindex options to control warnings
1565 @cindex warning messages
1566 @cindex messages, warning
1567 @cindex suppressing warnings
1569 Warnings are diagnostic messages that report constructions which
1570 are not inherently erroneous but which are risky or suggest there
1571 may have been an error.
1573 You can request many specific warnings with options beginning @samp{-W},
1574 for example @samp{-Wimplicit} to request warnings on implicit
1575 declarations. Each of these specific warning options also has a
1576 negative form beginning @samp{-Wno-} to turn off warnings;
1577 for example, @samp{-Wno-implicit}. This manual lists only one of the
1578 two forms, whichever is not the default.
1580 These options control the amount and kinds of warnings produced by GCC:
1583 @cindex syntax checking
1585 Check the code for syntax errors, but don't do anything beyond that.
1588 Issue all the warnings demanded by strict ISO C and ISO C++;
1589 reject all programs that use forbidden extensions, and some other
1590 programs that do not follow ISO C and ISO C++. For ISO C, follows the
1591 version of the ISO C standard specified by any @samp{-std} option used.
1593 Valid ISO C and ISO C++ programs should compile properly with or without
1594 this option (though a rare few will require @option{-ansi} or a
1595 @option{-std} option specifying the required version of ISO C). However,
1596 without this option, certain GNU extensions and traditional C and C++
1597 features are supported as well. With this option, they are rejected.
1599 @samp{-pedantic} does not cause warning messages for use of the
1600 alternate keywords whose names begin and end with @samp{__}. Pedantic
1601 warnings are also disabled in the expression that follows
1602 @code{__extension__}. However, only system header files should use
1603 these escape routes; application programs should avoid them.
1604 @xref{Alternate Keywords}.
1606 Some users try to use @samp{-pedantic} to check programs for strict ISO
1607 C conformance. They soon find that it does not do quite what they want:
1608 it finds some non-ISO practices, but not all---only those for which
1609 ISO C @emph{requires} a diagnostic, and some others for which
1610 diagnostics have been added.
1612 A feature to report any failure to conform to ISO C might be useful in
1613 some instances, but would require considerable additional work and would
1614 be quite different from @samp{-pedantic}. We don't have plans to
1615 support such a feature in the near future.
1617 @item -pedantic-errors
1618 Like @samp{-pedantic}, except that errors are produced rather than
1622 Inhibit all warning messages.
1625 Inhibit warning messages about the use of @samp{#import}.
1627 @item -Wchar-subscripts
1628 Warn if an array subscript has type @code{char}. This is a common cause
1629 of error, as programmers often forget that this type is signed on some
1633 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
1634 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
1637 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
1638 the arguments supplied have types appropriate to the format string
1639 specified, and that the conversions specified in the format string make
1640 sense. This includes standard functions, and others specified by format
1641 attributes (@pxref{Function Attributes}), in the @code{printf},
1642 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
1643 not in the C standard) families.
1645 The formats are checked against the format features supported by GNU
1646 libc version 2.2. These include all ISO C89 and C99 features, as well
1647 as features from the Single Unix Specification and some BSD and GNU
1648 extensions. Other library implementations may not support all these
1649 features; GCC does not support warning about features that go beyond a
1650 particular library's limitations. However, if @samp{-pedantic} is used
1651 with @samp{-Wformat}, warnings will be given about format features not
1652 in the selected standard version (but not for @code{strfmon} formats,
1653 since those are not in any version of the C standard). @xref{C Dialect
1654 Options,,Options Controlling C Dialect}.
1656 @samp{-Wformat} is included in @samp{-Wall}. For more control over some
1657 aspects of format checking, the options @samp{-Wno-format-y2k},
1658 @samp{-Wno-format-extra-args}, @samp{-Wformat-nonliteral},
1659 @samp{-Wformat-security} and @samp{-Wformat=2} are available, but are
1660 not included in @samp{-Wall}.
1662 @item -Wno-format-y2k
1663 If @samp{-Wformat} is specified, do not warn about @code{strftime}
1664 formats which may yield only a two-digit year.
1666 @item -Wno-format-extra-args
1667 If @samp{-Wformat} is specified, do not warn about excess arguments to a
1668 @code{printf} or @code{scanf} format function. The C standard specifies
1669 that such arguments are ignored.
1671 @item -Wformat-nonliteral
1672 If @samp{-Wformat} is specified, also warn if the format string is not a
1673 string literal and so cannot be checked, unless the format function
1674 takes its format arguments as a @code{va_list}.
1676 @item -Wformat-security
1677 If @samp{-Wformat} is specified, also warn about uses of format
1678 functions that represent possible security problems. At present, this
1679 warns about calls to @code{printf} and @code{scanf} functions where the
1680 format string is not a string literal and there are no format arguments,
1681 as in @code{printf (foo);}. This may be a security hole if the format
1682 string came from untrusted input and contains @samp{%n}. (This is
1683 currently a subset of what @samp{-Wformat-nonliteral} warns about, but
1684 in future warnings may be added to @samp{-Wformat-security} that are not
1685 included in @samp{-Wformat-nonliteral}.)
1688 Enable @samp{-Wformat} plus format checks not included in
1689 @samp{-Wformat}. Currently equivalent to @samp{-Wformat
1690 -Wformat-nonliteral -Wformat-security}.
1692 @item -Wimplicit-int
1693 Warn when a declaration does not specify a type.
1695 @item -Wimplicit-function-declaration
1696 @itemx -Werror-implicit-function-declaration
1697 Give a warning (or error) whenever a function is used before being
1701 Same as @samp{-Wimplicit-int} and @samp{-Wimplicit-function-}@*
1705 Warn if the type of @samp{main} is suspicious. @samp{main} should be a
1706 function with external linkage, returning int, taking either zero
1707 arguments, two, or three arguments of appropriate types.
1710 Warn if a multicharacter constant (@samp{'FOOF'}) is used. Usually they
1711 indicate a typo in the user's code, as they have implementation-defined
1712 values, and should not be used in portable code.
1715 Warn if parentheses are omitted in certain contexts, such
1716 as when there is an assignment in a context where a truth value
1717 is expected, or when operators are nested whose precedence people
1718 often get confused about.
1720 Also warn about constructions where there may be confusion to which
1721 @code{if} statement an @code{else} branch belongs. Here is an example of
1734 In C, every @code{else} branch belongs to the innermost possible @code{if}
1735 statement, which in this example is @code{if (b)}. This is often not
1736 what the programmer expected, as illustrated in the above example by
1737 indentation the programmer chose. When there is the potential for this
1738 confusion, GNU C will issue a warning when this flag is specified.
1739 To eliminate the warning, add explicit braces around the innermost
1740 @code{if} statement so there is no way the @code{else} could belong to
1741 the enclosing @code{if}. The resulting code would look like this:
1755 @item -Wsequence-point
1756 Warn about code that may have undefined semantics because of violations
1757 of sequence point rules in the C standard.
1759 The C standard defines the order in which expressions in a C program are
1760 evaluated in terms of @dfn{sequence points}, which represent a partial
1761 ordering between the execution of parts of the program: those executed
1762 before the sequence point, and those executed after it. These occur
1763 after the evaluation of a full expression (one which is not part of a
1764 larger expression), after the evaluation of the first operand of a
1765 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
1766 function is called (but after the evaluation of its arguments and the
1767 expression denoting the called function), and in certain other places.
1768 Other than as expressed by the sequence point rules, the order of
1769 evaluation of subexpressions of an expression is not specified. All
1770 these rules describe only a partial order rather than a total order,
1771 since, for example, if two functions are called within one expression
1772 with no sequence point between them, the order in which the functions
1773 are called is not specified. However, the standards committee have
1774 ruled that function calls do not overlap.
1776 It is not specified when between sequence points modifications to the
1777 values of objects take effect. Programs whose behavior depends on this
1778 have undefined behavior; the C standard specifies that ``Between the
1779 previous and next sequence point an object shall have its stored value
1780 modified at most once by the evaluation of an expression. Furthermore,
1781 the prior value shall be read only to determine the value to be
1782 stored.''. If a program breaks these rules, the results on any
1783 particular implementation are entirely unpredictable.
1785 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
1786 = b[n++]} and @code{a[i++] = i;}. Some more complicated cases are not
1787 diagnosed by this option, and it may give an occasional false positive
1788 result, but in general it has been found fairly effective at detecting
1789 this sort of problem in programs.
1791 The present implementation of this option only works for C programs. A
1792 future implementation may also work for C++ programs.
1794 There is some controversy over the precise meaning of the sequence point
1795 rules in subtle cases. Alternative formal definitions may be found in
1796 Clive Feather's ``Annex S''
1797 @w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n925.htm}} and in
1798 Michael Norrish's thesis
1799 @w{@uref{http://www.cl.cam.ac.uk/users/mn200/PhD/thesis-report.ps.gz}}.
1800 Other discussions are by Raymond Mak
1801 @w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n926.htm}} and
1803 @w{@uref{http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n927.htm}}.
1806 Warn whenever a function is defined with a return-type that defaults to
1807 @code{int}. Also warn about any @code{return} statement with no
1808 return-value in a function whose return-type is not @code{void}.
1810 For C++, a function without return type always produces a diagnostic
1811 message, even when @samp{-Wno-return-type} is specified. The only
1812 exceptions are @samp{main} and functions defined in system headers.
1815 Warn whenever a @code{switch} statement has an index of enumeral type
1816 and lacks a @code{case} for one or more of the named codes of that
1817 enumeration. (The presence of a @code{default} label prevents this
1818 warning.) @code{case} labels outside the enumeration range also
1819 provoke warnings when this option is used.
1822 Warn if any trigraphs are encountered that might change the meaning of
1823 the program (trigraphs within comments are not warned about).
1825 @item -Wunused-function
1826 Warn whenever a static function is declared but not defined or a
1827 non\-inline static function is unused.
1829 @item -Wunused-label
1830 Warn whenever a label is declared but not used.
1832 To suppress this warning use the @samp{unused} attribute
1833 (@pxref{Variable Attributes}).
1835 @item -Wunused-parameter
1836 Warn whenever a function parameter is unused aside from its declaration.
1838 To suppress this warning use the @samp{unused} attribute
1839 (@pxref{Variable Attributes}).
1841 @item -Wunused-variable
1842 Warn whenever a local variable or non-constant static variable is unused
1843 aside from its declaration
1845 To suppress this warning use the @samp{unused} attribute
1846 (@pxref{Variable Attributes}).
1848 @item -Wunused-value
1849 Warn whenever a statement computes a result that is explicitly not used.
1851 To suppress this warning cast the expression to @samp{void}.
1854 All all the above @samp{-Wunused} options combined.
1856 In order to get a warning about an unused function parameter, you must
1857 either specify @samp{-W -Wunused} or separately specify
1858 @samp{-Wunused-parameter}.
1860 @item -Wuninitialized
1861 Warn if an automatic variable is used without first being initialized or
1862 if a variable may be clobbered by a @code{setjmp} call.
1864 These warnings are possible only in optimizing compilation,
1865 because they require data flow information that is computed only
1866 when optimizing. If you don't specify @samp{-O}, you simply won't
1869 These warnings occur only for variables that are candidates for
1870 register allocation. Therefore, they do not occur for a variable that
1871 is declared @code{volatile}, or whose address is taken, or whose size
1872 is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
1873 structures, unions or arrays, even when they are in registers.
1875 Note that there may be no warning about a variable that is used only
1876 to compute a value that itself is never used, because such
1877 computations may be deleted by data flow analysis before the warnings
1880 These warnings are made optional because GCC is not smart
1881 enough to see all the reasons why the code might be correct
1882 despite appearing to have an error. Here is one example of how
1901 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
1902 always initialized, but GCC doesn't know this. Here is
1903 another common case:
1908 if (change_y) save_y = y, y = new_y;
1910 if (change_y) y = save_y;
1915 This has no bug because @code{save_y} is used only if it is set.
1917 @cindex @code{longjmp} warnings
1918 This option also warns when a non-volatile automatic variable might be
1919 changed by a call to @code{longjmp}. These warnings as well are possible
1920 only in optimizing compilation.
1922 The compiler sees only the calls to @code{setjmp}. It cannot know
1923 where @code{longjmp} will be called; in fact, a signal handler could
1924 call it at any point in the code. As a result, you may get a warning
1925 even when there is in fact no problem because @code{longjmp} cannot
1926 in fact be called at the place which would cause a problem.
1928 Some spurious warnings can be avoided if you declare all the functions
1929 you use that never return as @code{noreturn}. @xref{Function
1932 @item -Wreorder (C++ only)
1933 @cindex reordering, warning
1934 @cindex warning for reordering of member initializers
1935 Warn when the order of member initializers given in the code does not
1936 match the order in which they must be executed. For instance:
1938 @item -Wunknown-pragmas
1939 @cindex warning for unknown pragmas
1940 @cindex unknown pragmas, warning
1941 @cindex pragmas, warning of unknown
1942 Warn when a #pragma directive is encountered which is not understood by
1943 GCC. If this command line option is used, warnings will even be issued
1944 for unknown pragmas in system header files. This is not the case if
1945 the warnings were only enabled by the @samp{-Wall} command line option.
1948 All of the above @samp{-W} options combined. This enables all the
1949 warnings about constructions that some users consider questionable, and
1950 that are easy to avoid (or modify to prevent the warning), even in
1951 conjunction with macros.
1953 @item -Wsystem-headers
1954 @cindex warnings from system headers
1955 @cindex system headers, warnings from
1956 Print warning messages for constructs found in system header files.
1957 Warnings from system headers are normally suppressed, on the assumption
1958 that they usually do not indicate real problems and would only make the
1959 compiler output harder to read. Using this command line option tells
1960 GCC to emit warnings from system headers as if they occurred in user
1961 code. However, note that using @samp{-Wall} in conjunction with this
1962 option will @emph{not} warn about unknown pragmas in system
1963 headers---for that, @samp{-Wunknown-pragmas} must also be used.
1966 The following @samp{-W@dots{}} options are not implied by @samp{-Wall}.
1967 Some of them warn about constructions that users generally do not
1968 consider questionable, but which occasionally you might wish to check
1969 for; others warn about constructions that are necessary or hard to avoid
1970 in some cases, and there is no simple way to modify the code to suppress
1975 Print extra warning messages for these events:
1979 A function can return either with or without a value. (Falling
1980 off the end of the function body is considered returning without
1981 a value.) For example, this function would evoke such a
1995 An expression-statement or the left-hand side of a comma expression
1996 contains no side effects.
1997 To suppress the warning, cast the unused expression to void.
1998 For example, an expression such as @samp{x[i,j]} will cause a warning,
1999 but @samp{x[(void)i,j]} will not.
2002 An unsigned value is compared against zero with @samp{<} or @samp{<=}.
2005 A comparison like @samp{x<=y<=z} appears; this is equivalent to
2006 @samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
2007 that of ordinary mathematical notation.
2010 Storage-class specifiers like @code{static} are not the first things in
2011 a declaration. According to the C Standard, this usage is obsolescent.
2014 The return type of a function has a type qualifier such as @code{const}.
2015 Such a type qualifier has no effect, since the value returned by a
2016 function is not an lvalue. (But don't warn about the GNU extension of
2017 @code{volatile void} return types. That extension will be warned about
2018 if @samp{-pedantic} is specified.)
2021 If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
2025 A comparison between signed and unsigned values could produce an
2026 incorrect result when the signed value is converted to unsigned.
2027 (But don't warn if @samp{-Wno-sign-compare} is also specified.)
2030 An aggregate has a partly bracketed initializer.
2031 For example, the following code would evoke such a warning,
2032 because braces are missing around the initializer for @code{x.h}:
2035 struct s @{ int f, g; @};
2036 struct t @{ struct s h; int i; @};
2037 struct t x = @{ 1, 2, 3 @};
2041 An aggregate has an initializer which does not initialize all members.
2042 For example, the following code would cause such a warning, because
2043 @code{x.h} would be implicitly initialized to zero:
2046 struct s @{ int f, g, h; @};
2047 struct s x = @{ 3, 4 @};
2052 Warn if floating point values are used in equality comparisons.
2054 The idea behind this is that sometimes it is convenient (for the
2055 programmer) to consider floating-point values as approximations to
2056 infinitely precise real numbers. If you are doing this, then you need
2057 to compute (by analysing the code, or in some other way) the maximum or
2058 likely maximum error that the computation introduces, and allow for it
2059 when performing comparisons (and when producing output, but that's a
2060 different problem). In particular, instead of testing for equality, you
2061 would check to see whether the two values have ranges that overlap; and
2062 this is done with the relational operators, so equality comparisons are
2065 @item -Wtraditional (C only)
2066 Warn about certain constructs that behave differently in traditional and
2071 Macro arguments occurring within string constants in the macro body.
2072 These would substitute the argument in traditional C, but are part of
2073 the constant in ISO C.
2076 A function declared external in one block and then used after the end of
2080 A @code{switch} statement has an operand of type @code{long}.
2083 A non-@code{static} function declaration follows a @code{static} one.
2084 This construct is not accepted by some traditional C compilers.
2087 The ISO type of an integer constant has a different width or
2088 signedness from its traditional type. This warning is only issued if
2089 the base of the constant is ten. I.e. hexadecimal or octal values, which
2090 typically represent bit patterns, are not warned about.
2093 Usage of ISO string concatenation is detected.
2096 A function macro appears without arguments.
2099 The unary plus operator.
2102 Initialization of automatic aggregates.
2105 Identifier conflicts with labels. Traditional C lacks a separate
2106 namespace for labels.
2109 Initialization of unions. If the initializer is zero, the warning is
2110 omitted. This is done under the assumption that the zero initializer in
2111 user code appears conditioned on e.g. @code{__STDC__} to avoid missing
2112 initializer warnings and relies on default initialization to zero in the
2116 The `U' integer constant suffix, or the `F' or `L' floating point
2117 constant suffixes. (Traditonal C does support the `L' suffix on integer
2118 constants.) Note, these suffixes appear in macros defined in the system
2119 headers of most modern systems, e.g. the _MIN/_MAX macros in limits.h.
2120 Use of these macros can lead to spurious warnings as they do not
2121 necessarily reflect whether the code in question is any less portable to
2122 traditional C given that suitable backup definitions are provided.
2126 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
2129 Warn whenever a local variable shadows another local variable.
2131 @item -Wid-clash-@var{len}
2132 Warn whenever two distinct identifiers match in the first @var{len}
2133 characters. This may help you prepare a program that will compile
2134 with certain obsolete, brain-damaged compilers.
2136 @item -Wlarger-than-@var{len}
2137 Warn whenever an object of larger than @var{len} bytes is defined.
2139 @item -Wpointer-arith
2140 Warn about anything that depends on the ``size of'' a function type or
2141 of @code{void}. GNU C assigns these types a size of 1, for
2142 convenience in calculations with @code{void *} pointers and pointers
2145 @item -Wbad-function-cast (C only)
2146 Warn whenever a function call is cast to a non-matching type.
2147 For example, warn if @code{int malloc()} is cast to @code{anything *}.
2150 Warn whenever a pointer is cast so as to remove a type qualifier from
2151 the target type. For example, warn if a @code{const char *} is cast
2152 to an ordinary @code{char *}.
2155 Warn whenever a pointer is cast such that the required alignment of the
2156 target is increased. For example, warn if a @code{char *} is cast to
2157 an @code{int *} on machines where integers can only be accessed at
2158 two- or four-byte boundaries.
2160 @item -Wwrite-strings
2161 Give string constants the type @code{const char[@var{length}]} so that
2162 copying the address of one into a non-@code{const} @code{char *}
2163 pointer will get a warning. These warnings will help you find at
2164 compile time code that can try to write into a string constant, but
2165 only if you have been very careful about using @code{const} in
2166 declarations and prototypes. Otherwise, it will just be a nuisance;
2167 this is why we did not make @samp{-Wall} request these warnings.
2170 Warn if a prototype causes a type conversion that is different from what
2171 would happen to the same argument in the absence of a prototype. This
2172 includes conversions of fixed point to floating and vice versa, and
2173 conversions changing the width or signedness of a fixed point argument
2174 except when the same as the default promotion.
2176 Also, warn if a negative integer constant expression is implicitly
2177 converted to an unsigned type. For example, warn about the assignment
2178 @code{x = -1} if @code{x} is unsigned. But do not warn about explicit
2179 casts like @code{(unsigned) -1}.
2181 @item -Wsign-compare
2182 @cindex warning for comparison of signed and unsigned values
2183 @cindex comparison of signed and unsigned values, warning
2184 @cindex signed and unsigned values, comparison warning
2185 Warn when a comparison between signed and unsigned values could produce
2186 an incorrect result when the signed value is converted to unsigned.
2187 This warning is also enabled by @samp{-W}; to get the other warnings
2188 of @samp{-W} without this warning, use @samp{-W -Wno-sign-compare}.
2190 @item -Waggregate-return
2191 Warn if any functions that return structures or unions are defined or
2192 called. (In languages where you can return an array, this also elicits
2195 @item -Wstrict-prototypes (C only)
2196 Warn if a function is declared or defined without specifying the
2197 argument types. (An old-style function definition is permitted without
2198 a warning if preceded by a declaration which specifies the argument
2201 @item -Wmissing-prototypes (C only)
2202 Warn if a global function is defined without a previous prototype
2203 declaration. This warning is issued even if the definition itself
2204 provides a prototype. The aim is to detect global functions that fail
2205 to be declared in header files.
2207 @item -Wmissing-declarations
2208 Warn if a global function is defined without a previous declaration.
2209 Do so even if the definition itself provides a prototype.
2210 Use this option to detect global functions that are not declared in
2213 @item -Wmissing-noreturn
2214 Warn about functions which might be candidates for attribute @code{noreturn}.
2215 Note these are only possible candidates, not absolute ones. Care should
2216 be taken to manually verify functions actually do not ever return before
2217 adding the @code{noreturn} attribute, otherwise subtle code generation
2218 bugs could be introduced. You will not get a warning for @code{main} in
2219 hosted C environments.
2221 @item -Wmissing-format-attribute
2222 If @samp{-Wformat} is enabled, also warn about functions which might be
2223 candidates for @code{format} attributes. Note these are only possible
2224 candidates, not absolute ones. GCC will guess that @code{format}
2225 attributes might be appropriate for any function that calls a function
2226 like @code{vprintf} or @code{vscanf}, but this might not always be the
2227 case, and some functions for which @code{format} attributes are
2228 appropriate may not be detected. This option has no effect unless
2229 @samp{-Wformat} is enabled (possibly by @samp{-Wall}).
2232 Warn if a structure is given the packed attribute, but the packed
2233 attribute has no effect on the layout or size of the structure.
2234 Such structures may be mis-aligned for little benefit. For
2235 instance, in this code, the variable @code{f.x} in @code{struct bar}
2236 will be misaligned even though @code{struct bar} does not itself
2237 have the packed attribute:
2244 @} __attribute__((packed));
2253 Warn if padding is included in a structure, either to align an element
2254 of the structure or to align the whole structure. Sometimes when this
2255 happens it is possible to rearrange the fields of the structure to
2256 reduce the padding and so make the structure smaller.
2258 @item -Wredundant-decls
2259 Warn if anything is declared more than once in the same scope, even in
2260 cases where multiple declaration is valid and changes nothing.
2262 @item -Wnested-externs (C only)
2263 Warn if an @code{extern} declaration is encountered within a function.
2265 @item -Wunreachable-code
2266 Warn if the compiler detects that code will never be executed.
2268 This option is intended to warn when the compiler detects that at
2269 least a whole line of source code will never be executed, because
2270 some condition is never satisfied or because it is after a
2271 procedure that never returns.
2273 It is possible for this option to produce a warning even though there
2274 are circumstances under which part of the affected line can be executed,
2275 so care should be taken when removing apparently-unreachable code.
2277 For instance, when a function is inlined, a warning may mean that the
2278 line is unreachable in only one inlined copy of the function.
2280 This option is not made part of @samp{-Wall} because in a debugging
2281 version of a program there is often substantial code which checks
2282 correct functioning of the program and is, hopefully, unreachable
2283 because the program does work. Another common use of unreachable
2284 code is to provide behaviour which is selectable at compile-time.
2287 Warn if a function can not be inlined and it was declared as inline.
2290 Warn if @samp{long long} type is used. This is default. To inhibit
2291 the warning messages, use @samp{-Wno-long-long}. Flags
2292 @samp{-Wlong-long} and @samp{-Wno-long-long} are taken into account
2293 only when @samp{-pedantic} flag is used.
2295 @item -Wdisabled-optimization
2296 Warn if a requested optimization pass is disabled. This warning does
2297 not generally indicate that there is anything wrong with your code; it
2298 merely indicates that GCC's optimizers were unable to handle the code
2299 effectively. Often, the problem is that your code is too big or too
2300 complex; GCC will refuse to optimize programs when the optimization
2301 itself is likely to take inordinate amounts of time.
2304 Make all warnings into errors.
2307 @node Debugging Options
2308 @section Options for Debugging Your Program or GCC
2309 @cindex options, debugging
2310 @cindex debugging information options
2312 GCC has various special options that are used for debugging
2313 either your program or GCC:
2317 Produce debugging information in the operating system's native format
2318 (stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
2321 On most systems that use stabs format, @samp{-g} enables use of extra
2322 debugging information that only GDB can use; this extra information
2323 makes debugging work better in GDB but will probably make other debuggers
2325 refuse to read the program. If you want to control for certain whether
2326 to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
2327 @samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf-1+}, or @samp{-gdwarf-1}
2330 Unlike most other C compilers, GCC allows you to use @samp{-g} with
2331 @samp{-O}. The shortcuts taken by optimized code may occasionally
2332 produce surprising results: some variables you declared may not exist
2333 at all; flow of control may briefly move where you did not expect it;
2334 some statements may not be executed because they compute constant
2335 results or their values were already at hand; some statements may
2336 execute in different places because they were moved out of loops.
2338 Nevertheless it proves possible to debug optimized output. This makes
2339 it reasonable to use the optimizer for programs that might have bugs.
2341 The following options are useful when GCC is generated with the
2342 capability for more than one debugging format.
2345 Produce debugging information for use by GDB. This means to use the
2346 most expressive format available (DWARF 2, stabs, or the native format
2347 if neither of those are supported), including GDB extensions if at all
2351 Produce debugging information in stabs format (if that is supported),
2352 without GDB extensions. This is the format used by DBX on most BSD
2353 systems. On MIPS, Alpha and System V Release 4 systems this option
2354 produces stabs debugging output which is not understood by DBX or SDB.
2355 On System V Release 4 systems this option requires the GNU assembler.
2358 Produce debugging information in stabs format (if that is supported),
2359 using GNU extensions understood only by the GNU debugger (GDB). The
2360 use of these extensions is likely to make other debuggers crash or
2361 refuse to read the program.
2364 Produce debugging information in COFF format (if that is supported).
2365 This is the format used by SDB on most System V systems prior to
2369 Produce debugging information in XCOFF format (if that is supported).
2370 This is the format used by the DBX debugger on IBM RS/6000 systems.
2373 Produce debugging information in XCOFF format (if that is supported),
2374 using GNU extensions understood only by the GNU debugger (GDB). The
2375 use of these extensions is likely to make other debuggers crash or
2376 refuse to read the program, and may cause assemblers other than the GNU
2377 assembler (GAS) to fail with an error.
2380 Produce debugging information in DWARF version 1 format (if that is
2381 supported). This is the format used by SDB on most System V Release 4
2385 Produce debugging information in DWARF version 1 format (if that is
2386 supported), using GNU extensions understood only by the GNU debugger
2387 (GDB). The use of these extensions is likely to make other debuggers
2388 crash or refuse to read the program.
2391 Produce debugging information in DWARF version 2 format (if that is
2392 supported). This is the format used by DBX on IRIX 6.
2395 @itemx -ggdb@var{level}
2396 @itemx -gstabs@var{level}
2397 @itemx -gcoff@var{level}
2398 @itemx -gxcoff@var{level}
2399 @itemx -gdwarf@var{level}
2400 @itemx -gdwarf-2@var{level}
2401 Request debugging information and also use @var{level} to specify how
2402 much information. The default level is 2.
2404 Level 1 produces minimal information, enough for making backtraces in
2405 parts of the program that you don't plan to debug. This includes
2406 descriptions of functions and external variables, but no information
2407 about local variables and no line numbers.
2409 Level 3 includes extra information, such as all the macro definitions
2410 present in the program. Some debuggers support macro expansion when
2415 Generate extra code to write profile information suitable for the
2416 analysis program @code{prof}. You must use this option when compiling
2417 the source files you want data about, and you must also use it when
2420 @cindex @code{gprof}
2422 Generate extra code to write profile information suitable for the
2423 analysis program @code{gprof}. You must use this option when compiling
2424 the source files you want data about, and you must also use it when
2429 Generate extra code to write profile information for basic blocks, which will
2430 record the number of times each basic block is executed, the basic block start
2431 address, and the function name containing the basic block. If @samp{-g} is
2432 used, the line number and filename of the start of the basic block will also be
2433 recorded. If not overridden by the machine description, the default action is
2434 to append to the text file @file{bb.out}.
2436 This data could be analyzed by a program like @code{tcov}. Note,
2437 however, that the format of the data is not what @code{tcov} expects.
2438 Eventually GNU @code{gprof} should be extended to process this data.
2441 Makes the compiler print out each function name as it is compiled, and
2442 print some statistics about each pass when it finishes.
2445 Generate extra code to profile basic blocks. Your executable will
2446 produce output that is a superset of that produced when @samp{-a} is
2447 used. Additional output is the source and target address of the basic
2448 blocks where a jump takes place, the number of times a jump is executed,
2449 and (optionally) the complete sequence of basic blocks being executed.
2450 The output is appended to file @file{bb.out}.
2452 You can examine different profiling aspects without recompilation. Your
2453 executable will read a list of function names from file @file{bb.in}.
2454 Profiling starts when a function on the list is entered and stops when
2455 that invocation is exited. To exclude a function from profiling, prefix
2456 its name with `-'. If a function name is not unique, you can
2457 disambiguate it by writing it in the form
2458 @samp{/path/filename.d:functionname}. Your executable will write the
2459 available paths and filenames in file @file{bb.out}.
2461 Several function names have a special meaning:
2464 Write source, target and frequency of jumps to file @file{bb.out}.
2465 @item __bb_hidecall__
2466 Exclude function calls from frequency count.
2467 @item __bb_showret__
2468 Include function returns in frequency count.
2470 Write the sequence of basic blocks executed to file @file{bbtrace.gz}.
2471 The file will be compressed using the program @samp{gzip}, which must
2472 exist in your @env{PATH}. On systems without the @samp{popen}
2473 function, the file will be named @file{bbtrace} and will not be
2474 compressed. @strong{Profiling for even a few seconds on these systems
2475 will produce a very large file.} Note: @code{__bb_hidecall__} and
2476 @code{__bb_showret__} will not affect the sequence written to
2480 Here's a short example using different profiling parameters
2481 in file @file{bb.in}. Assume function @code{foo} consists of basic blocks
2482 1 and 2 and is called twice from block 3 of function @code{main}. After
2483 the calls, block 3 transfers control to block 4 of @code{main}.
2485 With @code{__bb_trace__} and @code{main} contained in file @file{bb.in},
2486 the following sequence of blocks is written to file @file{bbtrace.gz}:
2487 0 3 1 2 1 2 4. The return from block 2 to block 3 is not shown, because
2488 the return is to a point inside the block and not to the top. The
2489 block address 0 always indicates, that control is transferred
2490 to the trace from somewhere outside the observed functions. With
2491 @samp{-foo} added to @file{bb.in}, the blocks of function
2492 @code{foo} are removed from the trace, so only 0 3 4 remains.
2494 With @code{__bb_jumps__} and @code{main} contained in file @file{bb.in},
2495 jump frequencies will be written to file @file{bb.out}. The
2496 frequencies are obtained by constructing a trace of blocks
2497 and incrementing a counter for every neighbouring pair of blocks
2498 in the trace. The trace 0 3 1 2 1 2 4 displays the following
2502 Jump from block 0x0 to block 0x3 executed 1 time(s)
2503 Jump from block 0x3 to block 0x1 executed 1 time(s)
2504 Jump from block 0x1 to block 0x2 executed 2 time(s)
2505 Jump from block 0x2 to block 0x1 executed 1 time(s)
2506 Jump from block 0x2 to block 0x4 executed 1 time(s)
2509 With @code{__bb_hidecall__}, control transfer due to call instructions
2510 is removed from the trace, that is the trace is cut into three parts: 0
2511 3 4, 0 1 2 and 0 1 2. With @code{__bb_showret__}, control transfer due
2512 to return instructions is added to the trace. The trace becomes: 0 3 1
2513 2 3 1 2 3 4. Note, that this trace is not the same, as the sequence
2514 written to @file{bbtrace.gz}. It is solely used for counting jump
2517 @item -fprofile-arcs
2518 Instrument @dfn{arcs} during compilation. For each function of your
2519 program, GCC creates a program flow graph, then finds a spanning tree
2520 for the graph. Only arcs that are not on the spanning tree have to be
2521 instrumented: the compiler adds code to count the number of times that these
2522 arcs are executed. When an arc is the only exit or only entrance to a
2523 block, the instrumentation code can be added to the block; otherwise, a
2524 new basic block must be created to hold the instrumentation code.
2526 Since not every arc in the program must be instrumented, programs
2527 compiled with this option run faster than programs compiled with
2528 @samp{-a}, which adds instrumentation code to every basic block in the
2529 program. The tradeoff: since @code{gcov} does not have
2530 execution counts for all branches, it must start with the execution
2531 counts for the instrumented branches, and then iterate over the program
2532 flow graph until the entire graph has been solved. Hence, @code{gcov}
2533 runs a little more slowly than a program which uses information from
2536 @samp{-fprofile-arcs} also makes it possible to estimate branch
2537 probabilities, and to calculate basic block execution counts. In
2538 general, basic block execution counts do not give enough information to
2539 estimate all branch probabilities. When the compiled program exits, it
2540 saves the arc execution counts to a file called
2541 @file{@var{sourcename}.da}. Use the compiler option
2542 @samp{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
2543 Control Optimization}) when recompiling, to optimize using estimated
2544 branch probabilities.
2547 @item -ftest-coverage
2548 Create data files for the @code{gcov} code-coverage utility
2549 (@pxref{Gcov,, @code{gcov}: a GCC Test Coverage Program}).
2550 The data file names begin with the name of your source file:
2553 @item @var{sourcename}.bb
2554 A mapping from basic blocks to line numbers, which @code{gcov} uses to
2555 associate basic block execution counts with line numbers.
2557 @item @var{sourcename}.bbg
2558 A list of all arcs in the program flow graph. This allows @code{gcov}
2559 to reconstruct the program flow graph, so that it can compute all basic
2560 block and arc execution counts from the information in the
2561 @code{@var{sourcename}.da} file (this last file is the output from
2562 @samp{-fprofile-arcs}).
2565 @item -d@var{letters}
2566 Says to make debugging dumps during compilation at times specified by
2567 @var{letters}. This is used for debugging the compiler. The file names
2568 for most of the dumps are made by appending a pass number and a word to
2569 the source file name (e.g. @file{foo.c.00.rtl} or @file{foo.c.01.sibling}).
2570 Here are the possible letters for use in @var{letters}, and their meanings:
2574 Annotate the assembler output with miscellaneous debugging information.
2576 Dump after computing branch probabilities, to @file{@var{file}.11.bp}.
2578 Dump after block reordering, to @file{@var{file}.26.bbro}.
2580 Dump after instruction combination, to the file @file{@var{file}.14.combine}.
2582 Dump after the first if conversion, to the file @file{@var{file}.15.ce}.
2584 Dump after delayed branch scheduling, to @file{@var{file}.29.dbr}.
2586 Dump all macro definitions, at the end of preprocessing, in addition to
2589 Dump after SSA optimizations, to @file{@var{file}.05.ssa} and
2590 @file{@var{file}.06.ussa}.
2592 Dump after the second if conversion, to @file{@var{file}.24.ce2}.
2594 Dump after life analysis, to @file{@var{file}.13.life}.
2596 Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.04.addressof}.
2598 Dump after global register allocation, to @file{@var{file}.19.greg}.
2600 Dump after post-reload CSE and other optimizations, to @file{@var{file}.20.postreload}.
2602 Dump after GCSE, to @file{@var{file}.08.gcse}.
2604 Dump after sibling call optimizations, to @file{@var{file}.01.sibling}.
2606 Dump after the first jump optimization, to @file{@var{file}.02.jump}.
2608 Dump after the last jump optimization, to @file{@var{file}.27.jump2}.
2610 Dump after conversion from registers to stack, to @file{@var{file}.29.stack}.
2612 Dump after local register allocation, to @file{@var{file}.18.lreg}.
2614 Dump after loop optimization, to @file{@var{file}.09.loop}.
2616 Dump after performing the machine dependent reorganisation pass, to
2617 @file{@var{file}.28.mach}.
2619 Dump after register renumbering, to @file{@var{file}.23.rnreg}.
2621 Dump after the register move pass, to @file{@var{file}.16.regmove}.
2623 Dump after RTL generation, to @file{@var{file}.00.rtl}.
2625 Dump after the second instruction scheduling pass, to
2626 @file{@var{file}.25.sched2}.
2628 Dump after CSE (including the jump optimization that sometimes follows
2629 CSE), to @file{@var{file}.03.cse}.
2631 Dump after the first instruction scheduling pass, to
2632 @file{@var{file}.17.sched}.
2634 Dump after the second CSE pass (including the jump optimization that
2635 sometimes follows CSE), to @file{@var{file}.10.cse2}.
2637 Dump after the second flow pass, to @file{@var{file}.21.flow2}.
2639 Dump after dead code elimination, to @file{@var{file}.06.dce}.
2641 Dump after the peephole pass, to @file{@var{file}.22.peephole2}.
2643 Produce all the dumps listed above.
2645 Print statistics on memory usage, at the end of the run, to
2648 Annotate the assembler output with a comment indicating which
2649 pattern and alternative was used. The length of each instruction is
2652 Dump the RTL in the assembler output as a comment before each instruction.
2653 Also turns on @samp{-dp} annotation.
2655 For each of the other indicated dump files (except for
2656 @file{@var{file}.00.rtl}), dump a representation of the control flow graph
2657 suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
2659 Just generate RTL for a function instead of compiling it. Usually used
2662 Dump debugging information during parsing, to standard error.
2665 @item -fdump-unnumbered
2666 When doing debugging dumps (see -d option above), suppress instruction
2667 numbers and line number note output. This makes it more feasible to
2668 use diff on debugging dumps for compiler invocations with different
2669 options, in particular with and without -g.
2671 @item -fdump-translation-unit-@var{file} (C and C++ only)
2672 Dump a representation of the tree structure for the entire translation
2675 @item -fpretend-float
2676 When running a cross-compiler, pretend that the target machine uses the
2677 same floating point format as the host machine. This causes incorrect
2678 output of the actual floating constants, but the actual instruction
2679 sequence will probably be the same as GCC would make when running on
2683 Store the usual ``temporary'' intermediate files permanently; place them
2684 in the current directory and name them based on the source file. Thus,
2685 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
2686 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}. This creates a
2687 preprocessed @file{foo.i} output file even though the compiler now
2688 normally uses an integrated preprocessor.
2691 Report the CPU time taken by each subprocess in the compilation
2692 sequence. For C source files, this is the compiler proper and assembler
2693 (plus the linker if linking is done). The output looks like this:
2700 The first number on each line is the ``user time,'' that is time spent
2701 executing the program itself. The second number is ``system time,''
2702 time spent executing operating system routines on behalf of the program.
2703 Both numbers are in seconds.
2705 @item -print-file-name=@var{library}
2706 Print the full absolute name of the library file @var{library} that
2707 would be used when linking---and don't do anything else. With this
2708 option, GCC does not compile or link anything; it just prints the
2711 @item -print-prog-name=@var{program}
2712 Like @samp{-print-file-name}, but searches for a program such as @samp{cpp}.
2714 @item -print-libgcc-file-name
2715 Same as @samp{-print-file-name=libgcc.a}.
2717 This is useful when you use @samp{-nostdlib} or @samp{-nodefaultlibs}
2718 but you do want to link with @file{libgcc.a}. You can do
2721 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
2724 @item -print-search-dirs
2725 Print the name of the configured installation directory and a list of
2726 program and library directories gcc will search---and don't do anything else.
2728 This is useful when gcc prints the error message
2729 @samp{installation problem, cannot exec cpp0: No such file or directory}.
2730 To resolve this you either need to put @file{cpp0} and the other compiler
2731 components where gcc expects to find them, or you can set the environment
2732 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
2733 Don't forget the trailing '/'.
2734 @xref{Environment Variables}.
2737 @node Optimize Options
2738 @section Options That Control Optimization
2739 @cindex optimize options
2740 @cindex options, optimization
2742 These options control various sorts of optimizations:
2747 Optimize. Optimizing compilation takes somewhat more time, and a lot
2748 more memory for a large function.
2750 Without @samp{-O}, the compiler's goal is to reduce the cost of
2751 compilation and to make debugging produce the expected results.
2752 Statements are independent: if you stop the program with a breakpoint
2753 between statements, you can then assign a new value to any variable or
2754 change the program counter to any other statement in the function and
2755 get exactly the results you would expect from the source code.
2757 Without @samp{-O}, the compiler only allocates variables declared
2758 @code{register} in registers. The resulting compiled code is a little
2759 worse than produced by PCC without @samp{-O}.
2761 With @samp{-O}, the compiler tries to reduce code size and execution
2764 When you specify @samp{-O}, the compiler turns on @samp{-fthread-jumps}
2765 and @samp{-fdefer-pop} on all machines. The compiler turns on
2766 @samp{-fdelayed-branch} on machines that have delay slots, and
2767 @samp{-fomit-frame-pointer} on machines that can support debugging even
2768 without a frame pointer. On some machines the compiler also turns
2769 on other flags.@refill
2772 Optimize even more. GCC performs nearly all supported optimizations
2773 that do not involve a space-speed tradeoff. The compiler does not
2774 perform loop unrolling or function inlining when you specify @samp{-O2}.
2775 As compared to @samp{-O}, this option increases both compilation time
2776 and the performance of the generated code.
2778 @samp{-O2} turns on all optional optimizations except for loop unrolling,
2779 function inlining, and register renaming. It also turns on the
2780 @samp{-fforce-mem} option on all machines and frame pointer elimination
2781 on machines where doing so does not interfere with debugging.
2784 Optimize yet more. @samp{-O3} turns on all optimizations specified by
2785 @samp{-O2} and also turns on the @samp{-finline-functions} and
2786 @samp{-frename-registers} options.
2792 Optimize for size. @samp{-Os} enables all @samp{-O2} optimizations that
2793 do not typically increase code size. It also performs further
2794 optimizations designed to reduce code size.
2796 If you use multiple @samp{-O} options, with or without level numbers,
2797 the last such option is the one that is effective.
2800 Options of the form @samp{-f@var{flag}} specify machine-independent
2801 flags. Most flags have both positive and negative forms; the negative
2802 form of @samp{-ffoo} would be @samp{-fno-foo}. In the table below,
2803 only one of the forms is listed---the one which is not the default.
2804 You can figure out the other form by either removing @samp{no-} or
2809 Do not store floating point variables in registers, and inhibit other
2810 options that might change whether a floating point value is taken from a
2813 @cindex floating point precision
2814 This option prevents undesirable excess precision on machines such as
2815 the 68000 where the floating registers (of the 68881) keep more
2816 precision than a @code{double} is supposed to have. Similarly for the
2817 x86 architecture. For most programs, the excess precision does only
2818 good, but a few programs rely on the precise definition of IEEE floating
2819 point. Use @samp{-ffloat-store} for such programs, after modifying
2820 them to store all pertinent intermediate computations into variables.
2822 @item -fno-default-inline
2823 Do not make member functions inline by default merely because they are
2824 defined inside the class scope (C++ only). Otherwise, when you specify
2825 @w{@samp{-O}}, member functions defined inside class scope are compiled
2826 inline by default; i.e., you don't need to add @samp{inline} in front of
2827 the member function name.
2829 @item -fno-defer-pop
2830 Always pop the arguments to each function call as soon as that function
2831 returns. For machines which must pop arguments after a function call,
2832 the compiler normally lets arguments accumulate on the stack for several
2833 function calls and pops them all at once.
2836 Force memory operands to be copied into registers before doing
2837 arithmetic on them. This produces better code by making all memory
2838 references potential common subexpressions. When they are not common
2839 subexpressions, instruction combination should eliminate the separate
2840 register-load. The @samp{-O2} option turns on this option.
2843 Force memory address constants to be copied into registers before
2844 doing arithmetic on them. This may produce better code just as
2845 @samp{-fforce-mem} may.
2847 @item -fomit-frame-pointer
2848 Don't keep the frame pointer in a register for functions that
2849 don't need one. This avoids the instructions to save, set up and
2850 restore frame pointers; it also makes an extra register available
2851 in many functions. @strong{It also makes debugging impossible on
2855 On some machines, such as the Vax, this flag has no effect, because
2856 the standard calling sequence automatically handles the frame pointer
2857 and nothing is saved by pretending it doesn't exist. The
2858 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2859 whether a target machine supports this flag. @xref{Registers}.@refill
2862 On some machines, such as the Vax, this flag has no effect, because
2863 the standard calling sequence automatically handles the frame pointer
2864 and nothing is saved by pretending it doesn't exist. The
2865 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
2866 whether a target machine supports this flag. @xref{Registers,,Register
2867 Usage, gcc.info, Using and Porting GCC}.@refill
2870 @item -foptimize-sibling-calls
2871 Optimize sibling and tail recursive calls.
2874 This option generates traps for signed overflow on addition, subtraction,
2875 multiplication operations.
2878 Don't pay attention to the @code{inline} keyword. Normally this option
2879 is used to keep the compiler from expanding any functions inline.
2880 Note that if you are not optimizing, no functions can be expanded inline.
2882 @item -finline-functions
2883 Integrate all simple functions into their callers. The compiler
2884 heuristically decides which functions are simple enough to be worth
2885 integrating in this way.
2887 If all calls to a given function are integrated, and the function is
2888 declared @code{static}, then the function is normally not output as
2889 assembler code in its own right.
2891 @item -finline-limit=@var{n}
2892 By default, gcc limits the size of functions that can be inlined. This flag
2893 allows the control of this limit for functions that are explicitly marked as
2894 inline (ie marked with the inline keyword or defined within the class
2895 definition in c++). @var{n} is the size of functions that can be inlined in
2896 number of pseudo instructions (not counting parameter handling). The default
2897 value of n is 10000. Increasing this value can result in more inlined code at
2898 the cost of compilation time and memory consumption. Decreasing usually makes
2899 the compilation faster and less code will be inlined (which presumably
2900 means slower programs). This option is particularly useful for programs that
2901 use inlining heavily such as those based on recursive templates with c++.
2903 @emph{Note:} pseudo instruction represents, in this particular context, an
2904 abstract measurement of function's size. In no way, it represents a count
2905 of assembly instructions and as such its exact meaning might change from one
2906 release to an another.
2908 @item -fkeep-inline-functions
2909 Even if all calls to a given function are integrated, and the function
2910 is declared @code{static}, nevertheless output a separate run-time
2911 callable version of the function. This switch does not affect
2912 @code{extern inline} functions.
2914 @item -fkeep-static-consts
2915 Emit variables declared @code{static const} when optimization isn't turned
2916 on, even if the variables aren't referenced.
2918 GCC enables this option by default. If you want to force the compiler to
2919 check if the variable was referenced, regardless of whether or not
2920 optimization is turned on, use the @samp{-fno-keep-static-consts} option.
2922 @item -fno-function-cse
2923 Do not put function addresses in registers; make each instruction that
2924 calls a constant function contain the function's address explicitly.
2926 This option results in less efficient code, but some strange hacks
2927 that alter the assembler output may be confused by the optimizations
2928 performed when this option is not used.
2931 This option allows GCC to violate some ISO or IEEE rules and/or
2932 specifications in the interest of optimizing code for speed. For
2933 example, it allows the compiler to assume arguments to the @code{sqrt}
2934 function are non-negative numbers and that no floating-point values
2937 This option should never be turned on by any @samp{-O} option since
2938 it can result in incorrect output for programs which depend on
2939 an exact implementation of IEEE or ISO rules/specifications for
2942 @item -fno-math-errno
2943 Do not set ERRNO after calling math functions that are executed
2944 with a single instruction, e.g., sqrt. A program that relies on
2945 IEEE exceptions for math error handling may want to use this flag
2946 for speed while maintaining IEEE arithmetic compatibility.
2948 The default is @samp{-fmath-errno}. The @samp{-ffast-math} option
2949 sets @samp{-fno-math-errno}.
2952 @c following causes underfulls.. they don't look great, but we deal.
2954 The following options control specific optimizations. The @samp{-O2}
2955 option turns on all of these optimizations except @samp{-funroll-loops}
2956 and @samp{-funroll-all-loops}. On most machines, the @samp{-O} option
2957 turns on the @samp{-fthread-jumps} and @samp{-fdelayed-branch} options,
2958 but specific machines may handle it differently.
2960 You can use the following flags in the rare cases when ``fine-tuning''
2961 of optimizations to be performed is desired.
2964 @item -fstrength-reduce
2965 Perform the optimizations of loop strength reduction and
2966 elimination of iteration variables.
2968 @item -fthread-jumps
2969 Perform optimizations where we check to see if a jump branches to a
2970 location where another comparison subsumed by the first is found. If
2971 so, the first branch is redirected to either the destination of the
2972 second branch or a point immediately following it, depending on whether
2973 the condition is known to be true or false.
2975 @item -fcse-follow-jumps
2976 In common subexpression elimination, scan through jump instructions
2977 when the target of the jump is not reached by any other path. For
2978 example, when CSE encounters an @code{if} statement with an
2979 @code{else} clause, CSE will follow the jump when the condition
2982 @item -fcse-skip-blocks
2983 This is similar to @samp{-fcse-follow-jumps}, but causes CSE to
2984 follow jumps which conditionally skip over blocks. When CSE
2985 encounters a simple @code{if} statement with no else clause,
2986 @samp{-fcse-skip-blocks} causes CSE to follow the jump around the
2987 body of the @code{if}.
2989 @item -frerun-cse-after-loop
2990 Re-run common subexpression elimination after loop optimizations has been
2993 @item -frerun-loop-opt
2994 Run the loop optimizer twice.
2997 Perform a global common subexpression elimination pass.
2998 This pass also performs global constant and copy propagation.
3000 @item -fdelete-null-pointer-checks
3001 Use global dataflow analysis to identify and eliminate useless null
3002 pointer checks. Programs which rely on NULL pointer dereferences @emph{not}
3003 halting the program may not work properly with this option. Use
3004 -fno-delete-null-pointer-checks to disable this optimizing for programs
3005 which depend on that behavior.
3007 @item -fexpensive-optimizations
3008 Perform a number of minor optimizations that are relatively expensive.
3010 @item -foptimize-register-move
3012 Attempt to reassign register numbers in move instructions and as
3013 operands of other simple instructions in order to maximize the amount of
3014 register tying. This is especially helpful on machines with two-operand
3015 instructions. GCC enables this optimization by default with @samp{-O2}
3018 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
3021 @item -fdelayed-branch
3022 If supported for the target machine, attempt to reorder instructions
3023 to exploit instruction slots available after delayed branch
3026 @item -fschedule-insns
3027 If supported for the target machine, attempt to reorder instructions to
3028 eliminate execution stalls due to required data being unavailable. This
3029 helps machines that have slow floating point or memory load instructions
3030 by allowing other instructions to be issued until the result of the load
3031 or floating point instruction is required.
3033 @item -fschedule-insns2
3034 Similar to @samp{-fschedule-insns}, but requests an additional pass of
3035 instruction scheduling after register allocation has been done. This is
3036 especially useful on machines with a relatively small number of
3037 registers and where memory load instructions take more than one cycle.
3039 @item -ffunction-sections
3040 @itemx -fdata-sections
3041 Place each function or data item into its own section in the output
3042 file if the target supports arbitrary sections. The name of the
3043 function or the name of the data item determines the section's name
3046 Use these options on systems where the linker can perform optimizations
3047 to improve locality of reference in the instruction space. HPPA
3048 processors running HP-UX and Sparc processors running Solaris 2 have
3049 linkers with such optimizations. Other systems using the ELF object format
3050 as well as AIX may have these optimizations in the future.
3052 Only use these options when there are significant benefits from doing
3053 so. When you specify these options, the assembler and linker will
3054 create larger object and executable files and will also be slower.
3055 You will not be able to use @code{gprof} on all systems if you
3056 specify this option and you may have problems with debugging if
3057 you specify both this option and @samp{-g}.
3059 @item -fcaller-saves
3060 Enable values to be allocated in registers that will be clobbered by
3061 function calls, by emitting extra instructions to save and restore the
3062 registers around such calls. Such allocation is done only when it
3063 seems to result in better code than would otherwise be produced.
3065 This option is always enabled by default on certain machines, usually
3066 those which have no call-preserved registers to use instead.
3068 For all machines, optimization level 2 and higher enables this flag by
3071 @item -funroll-loops
3072 Perform the optimization of loop unrolling. This is only done for loops
3073 whose number of iterations can be determined at compile time or run time.
3074 @samp{-funroll-loops} implies both @samp{-fstrength-reduce} and
3075 @samp{-frerun-cse-after-loop}.
3077 @item -funroll-all-loops
3078 Perform the optimization of loop unrolling. This is done for all loops
3079 and usually makes programs run more slowly. @samp{-funroll-all-loops}
3080 implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
3082 @item -fmove-all-movables
3083 Forces all invariant computations in loops to be moved
3086 @item -freduce-all-givs
3087 Forces all general-induction variables in loops to be
3090 @emph{Note:} When compiling programs written in Fortran,
3091 @samp{-fmove-all-movables} and @samp{-freduce-all-givs} are enabled
3092 by default when you use the optimizer.
3094 These options may generate better or worse code; results are highly
3095 dependent on the structure of loops within the source code.
3097 These two options are intended to be removed someday, once
3098 they have helped determine the efficacy of various
3099 approaches to improving loop optimizations.
3101 Please let us (@w{@email{gcc@@gcc.gnu.org}} and @w{@email{fortran@@gnu.org}})
3102 know how use of these options affects
3103 the performance of your production code.
3104 We're very interested in code that runs @emph{slower}
3105 when these options are @emph{enabled}.
3108 Disable any machine-specific peephole optimizations.
3110 @item -fbranch-probabilities
3111 After running a program compiled with @samp{-fprofile-arcs}
3112 (@pxref{Debugging Options,, Options for Debugging Your Program or
3113 @command{gcc}}), you can compile it a second time using
3114 @samp{-fbranch-probabilities}, to improve optimizations based on
3115 guessing the path a branch might take.
3118 With @samp{-fbranch-probabilities}, GCC puts a @samp{REG_EXEC_COUNT}
3119 note on the first instruction of each basic block, and a
3120 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
3121 These can be used to improve optimization. Currently, they are only
3122 used in one place: in @file{reorg.c}, instead of guessing which path a
3123 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
3124 exactly determine which path is taken more often.
3127 @item -fno-guess-branch-probability
3128 Sometimes gcc will opt to guess branch probabilities when none are
3129 available from either profile directed feedback (@samp{-fprofile-arcs})
3130 or @samp{__builtin_expect}. In a hard real-time system, people don't
3131 want different runs of the compiler to produce code that has different
3132 behavior; minimizing non-determinism is of paramount import. This
3133 switch allows users to reduce non-determinism, possibly at the expense
3134 of inferior optimization.
3136 @item -fstrict-aliasing
3137 Allows the compiler to assume the strictest aliasing rules applicable to
3138 the language being compiled. For C (and C++), this activates
3139 optimizations based on the type of expressions. In particular, an
3140 object of one type is assumed never to reside at the same address as an
3141 object of a different type, unless the types are almost the same. For
3142 example, an @code{unsigned int} can alias an @code{int}, but not a
3143 @code{void*} or a @code{double}. A character type may alias any other
3146 Pay special attention to code like this:
3159 The practice of reading from a different union member than the one most
3160 recently written to (called ``type-punning'') is common. Even with
3161 @samp{-fstrict-aliasing}, type-punning is allowed, provided the memory
3162 is accessed through the union type. So, the code above will work as
3163 expected. However, this code might not:
3175 Every language that wishes to perform language-specific alias analysis
3176 should define a function that computes, given an @code{tree}
3177 node, an alias set for the node. Nodes in different alias sets are not
3178 allowed to alias. For an example, see the C front-end function
3179 @code{c_get_alias_set}.
3182 @item -falign-functions
3183 @itemx -falign-functions=@var{n}
3184 Align the start of functions to the next power-of-two greater than
3185 @var{n}, skipping up to @var{n} bytes. For instance,
3186 @samp{-falign-functions=32} aligns functions to the next 32-byte
3187 boundary, but @samp{-falign-functions=24} would align to the next
3188 32-byte boundary only if this can be done by skipping 23 bytes or less.
3190 @samp{-fno-align-functions} and @samp{-falign-functions=1} are
3191 equivalent and mean that functions will not be aligned.
3193 Some assemblers only support this flag when @var{n} is a power of two;
3194 in that case, it is rounded up.
3196 If @var{n} is not specified, use a machine-dependent default.
3198 @item -falign-labels
3199 @itemx -falign-labels=@var{n}
3200 Align all branch targets to a power-of-two boundary, skipping up to
3201 @var{n} bytes like @samp{-falign-functions}. This option can easily
3202 make code slower, because it must insert dummy operations for when the
3203 branch target is reached in the usual flow of the code.
3205 If @samp{-falign-loops} or @samp{-falign-jumps} are applicable and
3206 are greater than this value, then their values are used instead.
3208 If @var{n} is not specified, use a machine-dependent default which is
3209 very likely to be @samp{1}, meaning no alignment.
3212 @itemx -falign-loops=@var{n}
3213 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
3214 like @samp{-falign-functions}. The hope is that the loop will be
3215 executed many times, which will make up for any execution of the dummy
3218 If @var{n} is not specified, use a machine-dependent default.
3221 @itemx -falign-jumps=@var{n}
3222 Align branch targets to a power-of-two boundary, for branch targets
3223 where the targets can only be reached by jumping, skipping up to @var{n}
3224 bytes like @samp{-falign-functions}. In this case, no dummy operations
3227 If @var{n} is not specified, use a machine-dependent default.
3230 Perform optimizations in static single assignment form. Each function's
3231 flow graph is translated into SSA form, optimizations are performed, and
3232 the flow graph is translated back from SSA form. User's should not
3233 specify this option, since it is not yet ready for production use.
3236 Perform dead-code elimination in SSA form. Requires @samp{-fssa}. Like
3237 @samp{-fssa}, this is an experimental feature.
3239 @item -fsingle-precision-constant
3240 Treat floating point constant as single precision constant instead of
3241 implicitly converting it to double precision constant.
3243 @item -frename-registers
3244 Attempt to avoid false dependancies in scheduled code by making use
3245 of registers left over after register allocation. This optimization
3246 will most benefit processors with lots of registers. It can, however,
3247 make debugging impossible, since variables will no longer stay in
3248 a ``home register''.
3251 @node Preprocessor Options
3252 @section Options Controlling the Preprocessor
3253 @cindex preprocessor options
3254 @cindex options, preprocessor
3256 These options control the C preprocessor, which is run on each C source
3257 file before actual compilation.
3259 If you use the @samp{-E} option, nothing is done except preprocessing.
3260 Some of these options make sense only together with @samp{-E} because
3261 they cause the preprocessor output to be unsuitable for actual
3265 @item -include @var{file}
3266 Process @var{file} as input before processing the regular input file.
3267 In effect, the contents of @var{file} are compiled first. Any @samp{-D}
3268 and @samp{-U} options on the command line are always processed before
3269 @samp{-include @var{file}}, regardless of the order in which they are
3270 written. All the @samp{-include} and @samp{-imacros} options are
3271 processed in the order in which they are written.
3273 @item -imacros @var{file}
3274 Process @var{file} as input, discarding the resulting output, before
3275 processing the regular input file. Because the output generated from
3276 @var{file} is discarded, the only effect of @samp{-imacros @var{file}}
3277 is to make the macros defined in @var{file} available for use in the
3278 main input. All the @samp{-include} and @samp{-imacros} options are
3279 processed in the order in which they are written.
3281 @item -idirafter @var{dir}
3282 @cindex second include path
3283 Add the directory @var{dir} to the second include path. The directories
3284 on the second include path are searched when a header file is not found
3285 in any of the directories in the main include path (the one that
3288 @item -iprefix @var{prefix}
3289 Specify @var{prefix} as the prefix for subsequent @samp{-iwithprefix}
3292 @item -iwithprefix @var{dir}
3293 Add a directory to the second include path. The directory's name is
3294 made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was
3295 specified previously with @samp{-iprefix}. If you have not specified a
3296 prefix yet, the directory containing the installed passes of the
3297 compiler is used as the default.
3299 @item -iwithprefixbefore @var{dir}
3300 Add a directory to the main include path. The directory's name is made
3301 by concatenating @var{prefix} and @var{dir}, as in the case of
3302 @samp{-iwithprefix}.
3304 @item -isystem @var{dir}
3305 Add a directory to the beginning of the second include path, marking it
3306 as a system directory, so that it gets the same special treatment as
3307 is applied to the standard system directories.
3310 Do not search the standard system directories for header files. Only
3311 the directories you have specified with @samp{-I} options (and the
3312 current directory, if appropriate) are searched. @xref{Directory
3313 Options}, for information on @samp{-I}.
3315 By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
3316 search path to only those directories you specify explicitly.
3320 When searching for a header file in a directory, remap file names if a
3321 file named @file{header.gcc} exists in that directory. This can be used
3322 to work around limitations of file systems with file name restrictions.
3323 The @file{header.gcc} file should contain a series of lines with two
3324 tokens on each line: the first token is the name to map, and the second
3325 token is the actual name to use.
3328 Do not predefine any nonstandard macros. (Including architecture flags).
3331 Run only the C preprocessor. Preprocess all the C source files
3332 specified and output the results to standard output or to the
3333 specified output file.
3336 Tell the preprocessor not to discard comments. Used with the
3340 Tell the preprocessor not to generate @samp{#line} directives.
3341 Used with the @samp{-E} option.
3344 @cindex dependencies, make
3347 Instead of outputting the result of preprocessing, output a rule
3348 suitable for @code{make} describing the dependencies of the main source
3349 file. The preprocessor outputs one @code{make} rule containing the
3350 object file name for that source file, a colon, and the names of all the
3351 included files. If there are many included files then the rule is split
3352 into several lines using @samp{\}-newline.
3354 @samp{-M} implies @samp{-E}.
3358 Like @samp{-M}, but mention only the files included with @samp{#include
3359 "@var{file}"}. System header files included with @samp{#include
3360 <@var{file}>} are omitted.
3364 Like @samp{-M} but the dependency information is written to a file
3365 rather than stdout. @code{gcc} will use the same file name and
3366 directory as the object file, but with the suffix ".d" instead.
3368 This is in addition to compiling the main file as specified ---
3369 @samp{-MD} does not inhibit ordinary compilation the way @samp{-M} does,
3370 unless you also specify @samp{-MG}.
3372 With Mach, you can use the utility @code{md} to merge multiple
3373 dependency files into a single dependency file suitable for using with
3374 the @samp{make} command.
3378 Like @samp{-MD} except mention only user header files, not system
3381 @item -MF @var{file}
3383 When used with @samp{-M} or @samp{-MM}, specifies a file to write the
3384 dependencies to. This allows the preprocessor to write the preprocessed
3385 file to stdout normally. If no @samp{-MF} switch is given, CPP sends
3386 the rules to stdout and suppresses normal preprocessed output.
3388 Another way to specify output of a @code{make} rule is by setting
3389 the environment variable @env{DEPENDENCIES_OUTPUT} (@pxref{Environment
3394 When used with @samp{-M} or @samp{-MM}, @samp{-MG} says to treat missing
3395 header files as generated files and assume they live in the same
3396 directory as the source file. It suppresses preprocessed output, as a
3397 missing header file is ordinarily an error.
3399 This feature is used in automatic updating of makefiles.
3403 This option instructs CPP to add a phony target for each dependency
3404 other than the main file, causing each to depend on nothing. These
3405 dummy rules work around errors @code{make} gives if you remove header
3406 files without updating the @code{Makefile} to match.
3408 This is typical output:-
3411 /tmp/test.o: /tmp/test.c /tmp/test.h
3416 @item -MQ @var{target}
3417 @item -MT @var{target}
3420 By default CPP uses the main file name, including any path, and appends
3421 the object suffix, normally ``.o'', to it to obtain the name of the
3422 target for dependency generation. With @samp{-MT} you can specify a
3423 target yourself, overriding the default one.
3425 If you want multiple targets, you can specify them as a single argument
3426 to @samp{-MT}, or use multiple @samp{-MT} options.
3428 The targets you specify are output in the order they appear on the
3429 command line. @samp{-MQ} is identical to @samp{-MT}, except that the
3430 target name is quoted for Make, but with @samp{-MT} it isn't. For
3431 example, -MT '$(objpfx)foo.o' gives
3434 $(objpfx)foo.o: /tmp/foo.c
3437 but -MQ '$(objpfx)foo.o' gives
3440 $$(objpfx)foo.o: /tmp/foo.c
3443 The default target is automatically quoted, as if it were given with
3447 Print the name of each header file used, in addition to other normal
3450 @item -A@var{question}(@var{answer})
3451 Assert the answer @var{answer} for @var{question}, in case it is tested
3452 with a preprocessing conditional such as @samp{#if
3453 #@var{question}(@var{answer})}. @samp{-A-} disables the standard
3454 assertions that normally describe the target machine.
3457 Define macro @var{macro} with the string @samp{1} as its definition.
3459 @item -D@var{macro}=@var{defn}
3460 Define macro @var{macro} as @var{defn}. All instances of @samp{-D} on
3461 the command line are processed before any @samp{-U} options.
3463 Any @samp{-D} and @samp{-U} options on the command line are processed in
3464 order, and always before @samp{-imacros @var{file}}, regardless of the
3465 order in which they are written.
3468 Undefine macro @var{macro}. @samp{-U} options are evaluated after all
3469 @samp{-D} options, but before any @samp{-include} and @samp{-imacros}
3472 Any @samp{-D} and @samp{-U} options on the command line are processed in
3473 order, and always before @samp{-imacros @var{file}}, regardless of the
3474 order in which they are written.
3477 Tell the preprocessor to output only a list of the macro definitions
3478 that are in effect at the end of preprocessing. Used with the @samp{-E}
3482 Tell the preprocessing to pass all macro definitions into the output, in
3483 their proper sequence in the rest of the output.
3486 Like @samp{-dD} except that the macro arguments and contents are omitted.
3487 Only @samp{#define @var{name}} is included in the output.
3491 Output @samp{#include} directives in addition to the result of
3496 Process ISO standard trigraph sequences. These are three-character
3497 sequences, all starting with @samp{??}, that are defined by ISO C to
3498 stand for single characters. For example, @samp{??/} stands for
3499 @samp{\}, so @samp{'??/n'} is a character constant for a newline. By
3500 default, GCC ignores trigraphs, but in standard-conforming modes it
3501 converts them. See the @samp{-std} and @samp{-ansi} options.
3503 The nine trigraph sequences are
3534 Trigraph support is not popular, so many compilers do not implement it
3535 properly. Portable code should not rely on trigraphs being either
3536 converted or ignored.
3538 @item -Wp\,@var{option}
3539 Pass @var{option} as an option to the preprocessor. If @var{option}
3540 contains commas, it is split into multiple options at the commas.
3543 @node Assembler Options
3544 @section Passing Options to the Assembler
3546 @c prevent bad page break with this line
3547 You can pass options to the assembler.
3550 @item -Wa\,@var{option}
3551 Pass @var{option} as an option to the assembler. If @var{option}
3552 contains commas, it is split into multiple options at the commas.
3556 @section Options for Linking
3557 @cindex link options
3558 @cindex options, linking
3560 These options come into play when the compiler links object files into
3561 an executable output file. They are meaningless if the compiler is
3562 not doing a link step.
3566 @item @var{object-file-name}
3567 A file name that does not end in a special recognized suffix is
3568 considered to name an object file or library. (Object files are
3569 distinguished from libraries by the linker according to the file
3570 contents.) If linking is done, these object files are used as input
3576 If any of these options is used, then the linker is not run, and
3577 object file names should not be used as arguments. @xref{Overall
3581 @item -l@var{library}
3582 Search the library named @var{library} when linking.
3584 It makes a difference where in the command you write this option; the
3585 linker searches processes libraries and object files in the order they
3586 are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
3587 after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers
3588 to functions in @samp{z}, those functions may not be loaded.
3590 The linker searches a standard list of directories for the library,
3591 which is actually a file named @file{lib@var{library}.a}. The linker
3592 then uses this file as if it had been specified precisely by name.
3594 The directories searched include several standard system directories
3595 plus any that you specify with @samp{-L}.
3597 Normally the files found this way are library files---archive files
3598 whose members are object files. The linker handles an archive file by
3599 scanning through it for members which define symbols that have so far
3600 been referenced but not defined. But if the file that is found is an
3601 ordinary object file, it is linked in the usual fashion. The only
3602 difference between using an @samp{-l} option and specifying a file name
3603 is that @samp{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
3604 and searches several directories.
3607 You need this special case of the @samp{-l} option in order to
3608 link an Objective C program.
3611 Do not use the standard system startup files when linking.
3612 The standard system libraries are used normally, unless @option{-nostdlib}
3613 or @option{-nodefaultlibs} is used.
3615 @item -nodefaultlibs
3616 Do not use the standard system libraries when linking.
3617 Only the libraries you specify will be passed to the linker.
3618 The standard startup files are used normally, unless @option{-nostartfiles}
3619 is used. The compiler may generate calls to memcmp, memset, and memcpy
3620 for System V (and ISO C) environments or to bcopy and bzero for
3621 BSD environments. These entries are usually resolved by entries in
3622 libc. These entry points should be supplied through some other
3623 mechanism when this option is specified.
3626 Do not use the standard system startup files or libraries when linking.
3627 No startup files and only the libraries you specify will be passed to
3628 the linker. The compiler may generate calls to memcmp, memset, and memcpy
3629 for System V (and ISO C) environments or to bcopy and bzero for
3630 BSD environments. These entries are usually resolved by entries in
3631 libc. These entry points should be supplied through some other
3632 mechanism when this option is specified.
3634 @cindex @code{-lgcc}, use with @code{-nostdlib}
3635 @cindex @code{-nostdlib} and unresolved references
3636 @cindex unresolved references and @code{-nostdlib}
3637 @cindex @code{-lgcc}, use with @code{-nodefaultlibs}
3638 @cindex @code{-nodefaultlibs} and unresolved references
3639 @cindex unresolved references and @code{-nodefaultlibs}
3640 One of the standard libraries bypassed by @samp{-nostdlib} and
3641 @samp{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
3642 that GCC uses to overcome shortcomings of particular machines, or special
3643 needs for some languages.
3645 (@xref{Interface,,Interfacing to GCC Output}, for more discussion of
3649 (@xref{Interface,,Interfacing to GCC Output,gcc.info,Porting GCC},
3650 for more discussion of @file{libgcc.a}.)
3652 In most cases, you need @file{libgcc.a} even when you want to avoid
3653 other standard libraries. In other words, when you specify @samp{-nostdlib}
3654 or @samp{-nodefaultlibs} you should usually specify @samp{-lgcc} as well.
3655 This ensures that you have no unresolved references to internal GCC
3656 library subroutines. (For example, @samp{__main}, used to ensure C++
3657 constructors will be called; @pxref{Collect2,,@command{collect2}}.)
3660 Remove all symbol table and relocation information from the executable.
3663 On systems that support dynamic linking, this prevents linking with the shared
3664 libraries. On other systems, this option has no effect.
3667 Produce a shared object which can then be linked with other objects to
3668 form an executable. Not all systems support this option. For predictable
3669 results, you must also specify the same set of options that were used to
3670 generate code (@samp{-fpic}, @samp{-fPIC}, or model suboptions)
3671 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
3672 needs to build supplementary stub code for constructors to work. On
3673 multi-libbed systems, @samp{gcc -shared} must select the correct support
3674 libraries to link against. Failing to supply the correct flags may lead
3675 to subtle defects. Supplying them in cases where they are not necessary
3678 @item -shared-libgcc
3679 @itemx -static-libgcc
3680 On systems that provide @file{libgcc} as a shared library, these options
3681 force the use of either the shared or static version respectively.
3682 If no shared version of @file{libgcc} was built when the compiler was
3683 configured, these options have no effect.
3685 There are several situations in which an application should use the
3686 shared @file{libgcc} instead of the static version. The most common
3687 of these is when the application wishes to throw and catch exceptions
3688 across different shared libraries. In that case, each of the libraries
3689 as well as the application itself should use the shared @file{libgcc}.
3691 At present the GCC driver makes no attempt to recognize the situations
3692 in which the shared @file{libgcc} should be used, and defaults to using
3693 the static @file{libgcc} always. This will likely change in the future,
3694 at which time @samp{-static-libgcc} becomes useful as a means for
3695 overriding GCC's choice.
3698 Bind references to global symbols when building a shared object. Warn
3699 about any unresolved references (unless overridden by the link editor
3700 option @samp{-Xlinker -z -Xlinker defs}). Only a few systems support
3703 @item -Xlinker @var{option}
3704 Pass @var{option} as an option to the linker. You can use this to
3705 supply system-specific linker options which GCC does not know how to
3708 If you want to pass an option that takes an argument, you must use
3709 @samp{-Xlinker} twice, once for the option and once for the argument.
3710 For example, to pass @samp{-assert definitions}, you must write
3711 @samp{-Xlinker -assert -Xlinker definitions}. It does not work to write
3712 @samp{-Xlinker "-assert definitions"}, because this passes the entire
3713 string as a single argument, which is not what the linker expects.
3715 @item -Wl\,@var{option}
3716 Pass @var{option} as an option to the linker. If @var{option} contains
3717 commas, it is split into multiple options at the commas.
3719 @item -u @var{symbol}
3720 Pretend the symbol @var{symbol} is undefined, to force linking of
3721 library modules to define it. You can use @samp{-u} multiple times with
3722 different symbols to force loading of additional library modules.
3725 @node Directory Options
3726 @section Options for Directory Search
3727 @cindex directory options
3728 @cindex options, directory search
3731 These options specify directories to search for header files, for
3732 libraries and for parts of the compiler:
3736 Add the directory @var{dir} to the head of the list of directories to be
3737 searched for header files. This can be used to override a system header
3738 file, substituting your own version, since these directories are
3739 searched before the system header file directories. If you use more
3740 than one @samp{-I} option, the directories are scanned in left-to-right
3741 order; the standard system directories come after.
3744 Any directories you specify with @samp{-I} options before the @samp{-I-}
3745 option are searched only for the case of @samp{#include "@var{file}"};
3746 they are not searched for @samp{#include <@var{file}>}.
3748 If additional directories are specified with @samp{-I} options after
3749 the @samp{-I-}, these directories are searched for all @samp{#include}
3750 directives. (Ordinarily @emph{all} @samp{-I} directories are used
3753 In addition, the @samp{-I-} option inhibits the use of the current
3754 directory (where the current input file came from) as the first search
3755 directory for @samp{#include "@var{file}"}. There is no way to
3756 override this effect of @samp{-I-}. With @samp{-I.} you can specify
3757 searching the directory which was current when the compiler was
3758 invoked. That is not exactly the same as what the preprocessor does
3759 by default, but it is often satisfactory.
3761 @samp{-I-} does not inhibit the use of the standard system directories
3762 for header files. Thus, @samp{-I-} and @samp{-nostdinc} are
3766 Add directory @var{dir} to the list of directories to be searched
3769 @item -B@var{prefix}
3770 This option specifies where to find the executables, libraries,
3771 include files, and data files of the compiler itself.
3773 The compiler driver program runs one or more of the subprograms
3774 @file{cpp}, @file{cc1}, @file{as} and @file{ld}. It tries
3775 @var{prefix} as a prefix for each program it tries to run, both with and
3776 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
3778 For each subprogram to be run, the compiler driver first tries the
3779 @samp{-B} prefix, if any. If that name is not found, or if @samp{-B}
3780 was not specified, the driver tries two standard prefixes, which are
3781 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}. If neither of
3782 those results in a file name that is found, the unmodified program
3783 name is searched for using the directories specified in your
3784 @env{PATH} environment variable.
3786 @samp{-B} prefixes that effectively specify directory names also apply
3787 to libraries in the linker, because the compiler translates these
3788 options into @samp{-L} options for the linker. They also apply to
3789 includes files in the preprocessor, because the compiler translates these
3790 options into @samp{-isystem} options for the preprocessor. In this case,
3791 the compiler appends @samp{include} to the prefix.
3793 The run-time support file @file{libgcc.a} can also be searched for using
3794 the @samp{-B} prefix, if needed. If it is not found there, the two
3795 standard prefixes above are tried, and that is all. The file is left
3796 out of the link if it is not found by those means.
3798 Another way to specify a prefix much like the @samp{-B} prefix is to use
3799 the environment variable @env{GCC_EXEC_PREFIX}. @xref{Environment
3802 @item -specs=@var{file}
3803 Process @var{file} after the compiler reads in the standard @file{specs}
3804 file, in order to override the defaults that the @file{gcc} driver
3805 program uses when determining what switches to pass to @file{cc1},
3806 @file{cc1plus}, @file{as}, @file{ld}, etc. More than one
3807 @samp{-specs=}@var{file} can be specified on the command line, and they
3808 are processed in order, from left to right.
3814 @section Specifying subprocesses and the switches to pass to them
3816 @command{gcc} is a driver program. It performs its job by invoking a
3817 sequence of other programs to do the work of compiling, assembling and
3818 linking. GCC interprets its command-line parameters and uses these to
3819 deduce which programs it should invoke, and which command-line options
3820 it ought to place on their command lines. This behaviour is controlled
3821 by @dfn{spec strings}. In most cases there is one spec string for each
3822 program that GCC can invoke, but a few programs have multiple spec
3823 strings to control their behaviour. The spec strings built into GCC can
3824 be overridden by using the @samp{-specs=} command-line switch to specify
3827 @dfn{Spec files} are plaintext files that are used to construct spec
3828 strings. They consist of a sequence of directives separated by blank
3829 lines. The type of directive is determined by the first non-whitespace
3830 character on the line and it can be one of the following:
3833 @item %@var{command}
3834 Issues a @var{command} to the spec file processor. The commands that can
3838 @item %include <@var{file}>
3840 Search for @var{file} and insert its text at the current point in the
3843 @item %include_noerr <@var{file}>
3844 @cindex %include_noerr
3845 Just like @samp{%include}, but do not generate an error message if the include
3846 file cannot be found.
3848 @item %rename @var{old_name} @var{new_name}
3850 Rename the spec string @var{old_name} to @var{new_name}.
3854 @item *[@var{spec_name}]:
3855 This tells the compiler to create, override or delete the named spec
3856 string. All lines after this directive up to the next directive or
3857 blank line are considered to be the text for the spec string. If this
3858 results in an empty string then the spec will be deleted. (Or, if the
3859 spec did not exist, then nothing will happened.) Otherwise, if the spec
3860 does not currently exist a new spec will be created. If the spec does
3861 exist then its contents will be overridden by the text of this
3862 directive, unless the first character of that text is the @samp{+}
3863 character, in which case the text will be appended to the spec.
3865 @item [@var{suffix}]:
3866 Creates a new @samp{[@var{suffix}] spec} pair. All lines after this directive
3867 and up to the next directive or blank line are considered to make up the
3868 spec string for the indicated suffix. When the compiler encounters an
3869 input file with the named suffix, it will processes the spec string in
3870 order to work out how to compile that file. For example:
3877 This says that any input file whose name ends in @samp{.ZZ} should be
3878 passed to the program @samp{z-compile}, which should be invoked with the
3879 command-line switch @samp{-input} and with the result of performing the
3880 @samp{%i} substitution. (See below.)
3882 As an alternative to providing a spec string, the text that follows a
3883 suffix directive can be one of the following:
3886 @item @@@var{language}
3887 This says that the suffix is an alias for a known @var{language}. This is
3888 similar to using the @option{-x} command-line switch to GCC to specify a
3889 language explicitly. For example:
3896 Says that .ZZ files are, in fact, C++ source files.
3899 This causes an error messages saying:
3902 @var{name} compiler not installed on this system.
3906 GCC already has an extensive list of suffixes built into it.
3907 This directive will add an entry to the end of the list of suffixes, but
3908 since the list is searched from the end backwards, it is effectively
3909 possible to override earlier entries using this technique.
3913 GCC has the following spec strings built into it. Spec files can
3914 override these strings or create their own. Note that individual
3915 targets can also add their own spec strings to this list.
3918 asm Options to pass to the assembler
3919 asm_final Options to pass to the assembler post-processor
3920 cpp Options to pass to the C preprocessor
3921 cc1 Options to pass to the C compiler
3922 cc1plus Options to pass to the C++ compiler
3923 endfile Object files to include at the end of the link
3924 link Options to pass to the linker
3925 lib Libraries to include on the command line to the linker
3926 libgcc Decides which GCC support library to pass to the linker
3927 linker Sets the name of the linker
3928 predefines Defines to be passed to the C preprocessor
3929 signed_char Defines to pass to CPP to say whether @code{char} is signed by default
3930 startfile Object files to include at the start of the link
3933 Here is a small example of a spec file:
3939 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
3942 This example renames the spec called @samp{lib} to @samp{old_lib} and
3943 then overrides the previous definition of @samp{lib} with a new one.
3944 The new definition adds in some extra command-line options before
3945 including the text of the old definition.
3947 @dfn{Spec strings} are a list of command-line options to be passed to their
3948 corresponding program. In addition, the spec strings can contain
3949 @samp{%}-prefixed sequences to substitute variable text or to
3950 conditionally insert text into the command line. Using these constructs
3951 it is possible to generate quite complex command lines.
3953 Here is a table of all defined @samp{%}-sequences for spec
3954 strings. Note that spaces are not generated automatically around the
3955 results of expanding these sequences. Therefore you can concatenate them
3956 together or combine them with constant text in a single argument.
3960 Substitute one @samp{%} into the program name or argument.
3963 Substitute the name of the input file being processed.
3966 Substitute the basename of the input file being processed.
3967 This is the substring up to (and not including) the last period
3968 and not including the directory.
3971 This is the same as @samp{%b}, but include the file suffix (text after
3975 Marks the argument containing or following the @samp{%d} as a
3976 temporary file name, so that that file will be deleted if GCC exits
3977 successfully. Unlike @samp{%g}, this contributes no text to the
3980 @item %g@var{suffix}
3981 Substitute a file name that has suffix @var{suffix} and is chosen
3982 once per compilation, and mark the argument in the same way as
3983 @samp{%d}. To reduce exposure to denial-of-service attacks, the file
3984 name is now chosen in a way that is hard to predict even when previously
3985 chosen file names are known. For example, @samp{%g.s ... %g.o ... %g.s}
3986 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}. @var{suffix} matches
3987 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
3988 treated exactly as if @samp{%O} had been preprocessed. Previously, @samp{%g}
3989 was simply substituted with a file name chosen once per compilation,
3990 without regard to any appended suffix (which was therefore treated
3991 just like ordinary text), making such attacks more likely to succeed.
3993 @item %u@var{suffix}
3994 Like @samp{%g}, but generates a new temporary file name even if
3995 @samp{%u@var{suffix}} was already seen.
3997 @item %U@var{suffix}
3998 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
3999 new one if there is no such last file name. In the absence of any
4000 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
4001 the same suffix @emph{space}, so @samp{%g.s ... %U.s ... %g.s ... %U.s}
4002 would involve the generation of two distinct file names, one
4003 for each @samp{%g.s} and another for each @samp{%U.s}. Previously, @samp{%U} was
4004 simply substituted with a file name chosen for the previous @samp{%u},
4005 without regard to any appended suffix.
4007 @item %j@var{SUFFIX}
4008 Substitutes the name of the HOST_BIT_BUCKET, if any, and if it is
4009 writable, and if save-temps is off; otherwise, substitute the name
4010 of a temporary file, just like @samp{%u}. This temporary file is not
4011 meant for communication between processes, but rather as a junk
4014 @item %.@var{SUFFIX}
4015 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
4016 when it is subsequently output with @samp{%*}. @var{SUFFIX} is
4017 terminated by the next space or %.
4020 Marks the argument containing or following the @samp{%w} as the
4021 designated output file of this compilation. This puts the argument
4022 into the sequence of arguments that @samp{%o} will substitute later.
4025 Substitutes the names of all the output files, with spaces
4026 automatically placed around them. You should write spaces
4027 around the @samp{%o} as well or the results are undefined.
4028 @samp{%o} is for use in the specs for running the linker.
4029 Input files whose names have no recognized suffix are not compiled
4030 at all, but they are included among the output files, so they will
4034 Substitutes the suffix for object files. Note that this is
4035 handled specially when it immediately follows @samp{%g, %u, or %U},
4036 because of the need for those to form complete file names. The
4037 handling is such that @samp{%O} is treated exactly as if it had already
4038 been substituted, except that @samp{%g, %u, and %U} do not currently
4039 support additional @var{suffix} characters following @samp{%O} as they would
4040 following, for example, @samp{.o}.
4043 Substitutes the standard macro predefinitions for the
4044 current target machine. Use this when running @code{cpp}.
4047 Like @samp{%p}, but puts @samp{__} before and after the name of each
4048 predefined macro, except for macros that start with @samp{__} or with
4049 @samp{_@var{L}}, where @var{L} is an uppercase letter. This is for ISO
4053 Substitute a @samp{-iprefix} option made from GCC_EXEC_PREFIX.
4056 Current argument is the name of a library or startup file of some sort.
4057 Search for that file in a standard list of directories and substitute
4058 the full name found.
4061 Print @var{str} as an error message. @var{str} is terminated by a newline.
4062 Use this when inconsistent options are detected.
4065 Output @samp{-} if the input for the current command is coming from a pipe.
4068 Substitute the contents of spec string @var{name} at this point.
4071 Like @samp{%(...)} but put @samp{__} around @samp{-D} arguments.
4073 @item %x@{@var{option}@}
4074 Accumulate an option for @samp{%X}.
4077 Output the accumulated linker options specified by @samp{-Wl} or a @samp{%x}
4081 Output the accumulated assembler options specified by @samp{-Wa}.
4084 Output the accumulated preprocessor options specified by @samp{-Wp}.
4087 Substitute the major version number of GCC.
4088 (For version 2.9.5, this is 2.)
4091 Substitute the minor version number of GCC.
4092 (For version 2.9.5, this is 9.)
4095 Substitute the patch level number of GCC.
4096 (For version 2.9.5, this is 5.)
4099 Process the @code{asm} spec. This is used to compute the
4100 switches to be passed to the assembler.
4103 Process the @code{asm_final} spec. This is a spec string for
4104 passing switches to an assembler post-processor, if such a program is
4108 Process the @code{link} spec. This is the spec for computing the
4109 command line passed to the linker. Typically it will make use of the
4110 @samp{%L %G %S %D and %E} sequences.
4113 Dump out a @samp{-L} option for each directory that GCC believes might
4114 contain startup files. If the target supports multilibs then the
4115 current multilib directory will be prepended to each of these paths.
4118 Output the multilib directory with directory seperators replaced with
4119 "_". If multilib directories are not set, or the multilib directory is
4120 "." then this option emits nothing.
4123 Process the @code{lib} spec. This is a spec string for deciding which
4124 libraries should be included on the command line to the linker.
4127 Process the @code{libgcc} spec. This is a spec string for deciding
4128 which GCC support library should be included on the command line to the linker.
4131 Process the @code{startfile} spec. This is a spec for deciding which
4132 object files should be the first ones passed to the linker. Typically
4133 this might be a file named @file{crt0.o}.
4136 Process the @code{endfile} spec. This is a spec string that specifies
4137 the last object files that will be passed to the linker.
4140 Process the @code{cpp} spec. This is used to construct the arguments
4141 to be passed to the C preprocessor.
4144 Process the @code{signed_char} spec. This is intended to be used
4145 to tell cpp whether a char is signed. It typically has the definition:
4147 %@{funsigned-char:-D__CHAR_UNSIGNED__@}
4151 Process the @code{cc1} spec. This is used to construct the options to be
4152 passed to the actual C compiler (@samp{cc1}).
4155 Process the @code{cc1plus} spec. This is used to construct the options to be
4156 passed to the actual C++ compiler (@samp{cc1plus}).
4159 Substitute the variable part of a matched option. See below.
4160 Note that each comma in the substituted string is replaced by
4164 Substitutes the @code{-S} switch, if that switch was given to GCC.
4165 If that switch was not specified, this substitutes nothing. Note that
4166 the leading dash is omitted when specifying this option, and it is
4167 automatically inserted if the substitution is performed. Thus the spec
4168 string @samp{%@{foo@}} would match the command-line option @samp{-foo}
4169 and would output the command line option @samp{-foo}.
4171 @item %W@{@code{S}@}
4172 Like %@{@code{S}@} but mark last argument supplied within as a file to be
4175 @item %@{@code{S}*@}
4176 Substitutes all the switches specified to GCC whose names start
4177 with @code{-S}, but which also take an argument. This is used for
4178 switches like @samp{-o, -D, -I}, etc. GCC considers @samp{-o foo} as being
4179 one switch whose names starts with @samp{o}. %@{o*@} would substitute this
4180 text, including the space. Thus two arguments would be generated.
4182 @item %@{^@code{S}*@}
4183 Like %@{@code{S}*@}, but don't put a blank between a switch and its
4184 argument. Thus %@{^o*@} would only generate one argument, not two.
4186 @item %@{@code{S}*&@code{T}*@}
4187 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
4188 (the order of @code{S} and @code{T} in the spec is not significant).
4189 There can be any number of ampersand-separated variables; for each the
4190 wild card is optional. Useful for CPP as @samp{%@{D*&U*&A*@}}.
4192 @item %@{<@code{S}@}
4193 Remove all occurrences of @code{-S} from the command line. Note - this
4194 command is position dependent. @samp{%} commands in the spec string
4195 before this option will see @code{-S}, @samp{%} commands in the spec
4196 string after this option will not.
4198 @item %@{@code{S}*:@code{X}@}
4199 Substitutes @code{X} if one or more switches whose names start with
4200 @code{-S} are specified to GCC. Note that the tail part of the
4201 @code{-S} option (i.e. the part matched by the @samp{*}) will be substituted
4202 for each occurrence of @samp{%*} within @code{X}.
4204 @item %@{@code{S}:@code{X}@}
4205 Substitutes @code{X}, but only if the @samp{-S} switch was given to GCC.
4207 @item %@{!@code{S}:@code{X}@}
4208 Substitutes @code{X}, but only if the @samp{-S} switch was @emph{not} given to GCC.
4210 @item %@{|@code{S}:@code{X}@}
4211 Like %@{@code{S}:@code{X}@}, but if no @code{S} switch, substitute @samp{-}.
4213 @item %@{|!@code{S}:@code{X}@}
4214 Like %@{!@code{S}:@code{X}@}, but if there is an @code{S} switch, substitute @samp{-}.
4216 @item %@{.@code{S}:@code{X}@}
4217 Substitutes @code{X}, but only if processing a file with suffix @code{S}.
4219 @item %@{!.@code{S}:@code{X}@}
4220 Substitutes @code{X}, but only if @emph{not} processing a file with suffix @code{S}.
4222 @item %@{@code{S}|@code{P}:@code{X}@}
4223 Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC. This may be
4224 combined with @samp{!} and @samp{.} sequences as well, although they
4225 have a stronger binding than the @samp{|}. For example a spec string
4229 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
4232 will output the following command-line options from the following input
4233 command-line options:
4238 -d fred.c -foo -baz -boggle
4239 -d jim.d -bar -baz -boggle
4244 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or
4245 %@{!@code{S}:@code{X}@} construct may contain other nested @samp{%} constructs
4246 or spaces, or even newlines. They are processed as usual, as described
4249 The @samp{-O, -f, -m, and -W} switches are handled specifically in these
4250 constructs. If another value of @samp{-O} or the negated form of a @samp{-f, -m, or
4251 -W} switch is found later in the command line, the earlier switch
4252 value is ignored, except with @{@code{S}*@} where @code{S} is just one
4253 letter, which passes all matching options.
4255 The character @samp{|} at the beginning of the predicate text is used to indicate
4256 that a command should be piped to the following command, but only if @samp{-pipe}
4259 It is built into GCC which switches take arguments and which do not.
4260 (You might think it would be useful to generalize this to allow each
4261 compiler's spec to say which switches take arguments. But this cannot
4262 be done in a consistent fashion. GCC cannot even decide which input
4263 files have been specified without knowing which switches take arguments,
4264 and it must know which input files to compile in order to tell which
4267 GCC also knows implicitly that arguments starting in @samp{-l} are to be
4268 treated as compiler output files, and passed to the linker in their
4269 proper position among the other output files.
4271 @c man begin OPTIONS
4273 @node Target Options
4274 @section Specifying Target Machine and Compiler Version
4275 @cindex target options
4276 @cindex cross compiling
4277 @cindex specifying machine version
4278 @cindex specifying compiler version and target machine
4279 @cindex compiler version, specifying
4280 @cindex target machine, specifying
4282 By default, GCC compiles code for the same type of machine that you
4283 are using. However, it can also be installed as a cross-compiler, to
4284 compile for some other type of machine. In fact, several different
4285 configurations of GCC, for different target machines, can be
4286 installed side by side. Then you specify which one to use with the
4289 In addition, older and newer versions of GCC can be installed side
4290 by side. One of them (probably the newest) will be the default, but
4291 you may sometimes wish to use another.
4294 @item -b @var{machine}
4295 The argument @var{machine} specifies the target machine for compilation.
4296 This is useful when you have installed GCC as a cross-compiler.
4298 The value to use for @var{machine} is the same as was specified as the
4299 machine type when configuring GCC as a cross-compiler. For
4300 example, if a cross-compiler was configured with @samp{configure
4301 i386v}, meaning to compile for an 80386 running System V, then you
4302 would specify @samp{-b i386v} to run that cross compiler.
4304 When you do not specify @samp{-b}, it normally means to compile for
4305 the same type of machine that you are using.
4307 @item -V @var{version}
4308 The argument @var{version} specifies which version of GCC to run.
4309 This is useful when multiple versions are installed. For example,
4310 @var{version} might be @samp{2.0}, meaning to run GCC version 2.0.
4312 The default version, when you do not specify @samp{-V}, is the last
4313 version of GCC that you installed.
4316 The @samp{-b} and @samp{-V} options actually work by controlling part of
4317 the file name used for the executable files and libraries used for
4318 compilation. A given version of GCC, for a given target machine, is
4319 normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill
4321 Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
4322 changing the names of these directories or adding alternate names (or
4323 symbolic links). If in directory @file{/usr/local/lib/gcc-lib/} the
4324 file @file{80386} is a link to the file @file{i386v}, then @samp{-b
4325 80386} becomes an alias for @samp{-b i386v}.
4327 In one respect, the @samp{-b} or @samp{-V} do not completely change
4328 to a different compiler: the top-level driver program @command{gcc}
4329 that you originally invoked continues to run and invoke the other
4330 executables (preprocessor, compiler per se, assembler and linker)
4331 that do the real work. However, since no real work is done in the
4332 driver program, it usually does not matter that the driver program
4333 in use is not the one for the specified target. It is common for the
4334 interface to the other executables to change incompatibly between
4335 compiler versions, so unless the version specified is very close to that
4336 of the driver (for example, @samp{-V 3.0} with a driver program from GCC
4337 version 3.0.1), use of @samp{-V} may not work; for example, using
4338 @samp{-V 2.95.2} will not work with a driver program from GCC 3.0.
4340 The only way that the driver program depends on the target machine is
4341 in the parsing and handling of special machine-specific options.
4342 However, this is controlled by a file which is found, along with the
4343 other executables, in the directory for the specified version and
4344 target machine. As a result, a single installed driver program adapts
4345 to any specified target machine, and sufficiently similar compiler
4348 The driver program executable does control one significant thing,
4349 however: the default version and target machine. Therefore, you can
4350 install different instances of the driver program, compiled for
4351 different targets or versions, under different names.
4353 For example, if the driver for version 2.0 is installed as @command{ogcc}
4354 and that for version 2.1 is installed as @command{gcc}, then the command
4355 @command{gcc} will use version 2.1 by default, while @command{ogcc} will use
4356 2.0 by default. However, you can choose either version with either
4357 command with the @samp{-V} option.
4359 @node Submodel Options
4360 @section Hardware Models and Configurations
4361 @cindex submodel options
4362 @cindex specifying hardware config
4363 @cindex hardware models and configurations, specifying
4364 @cindex machine dependent options
4366 Earlier we discussed the standard option @samp{-b} which chooses among
4367 different installed compilers for completely different target
4368 machines, such as Vax vs. 68000 vs. 80386.
4370 In addition, each of these target machine types can have its own
4371 special options, starting with @samp{-m}, to choose among various
4372 hardware models or configurations---for example, 68010 vs 68020,
4373 floating coprocessor or none. A single installed version of the
4374 compiler can compile for any model or configuration, according to the
4377 Some configurations of the compiler also support additional special
4378 options, usually for compatibility with other compilers on the same
4382 These options are defined by the macro @code{TARGET_SWITCHES} in the
4383 machine description. The default for the options is also defined by
4384 that macro, which enables you to change the defaults.
4400 * RS/6000 and PowerPC Options::
4405 * Intel 960 Options::
4406 * DEC Alpha Options::
4410 * System V Options::
4411 * TMS320C3x/C4x Options::
4421 @node M680x0 Options
4422 @subsection M680x0 Options
4423 @cindex M680x0 options
4425 These are the @samp{-m} options defined for the 68000 series. The default
4426 values for these options depends on which style of 68000 was selected when
4427 the compiler was configured; the defaults for the most common choices are
4433 Generate output for a 68000. This is the default
4434 when the compiler is configured for 68000-based systems.
4436 Use this option for microcontrollers with a 68000 or EC000 core,
4437 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
4441 Generate output for a 68020. This is the default
4442 when the compiler is configured for 68020-based systems.
4445 Generate output containing 68881 instructions for floating point.
4446 This is the default for most 68020 systems unless @samp{-nfp} was
4447 specified when the compiler was configured.
4450 Generate output for a 68030. This is the default when the compiler is
4451 configured for 68030-based systems.
4454 Generate output for a 68040. This is the default when the compiler is
4455 configured for 68040-based systems.
4457 This option inhibits the use of 68881/68882 instructions that have to be
4458 emulated by software on the 68040. Use this option if your 68040 does not
4459 have code to emulate those instructions.
4462 Generate output for a 68060. This is the default when the compiler is
4463 configured for 68060-based systems.
4465 This option inhibits the use of 68020 and 68881/68882 instructions that
4466 have to be emulated by software on the 68060. Use this option if your 68060
4467 does not have code to emulate those instructions.
4470 Generate output for a CPU32. This is the default
4471 when the compiler is configured for CPU32-based systems.
4473 Use this option for microcontrollers with a
4474 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
4475 68336, 68340, 68341, 68349 and 68360.
4478 Generate output for a 520X "coldfire" family cpu. This is the default
4479 when the compiler is configured for 520X-based systems.
4481 Use this option for microcontroller with a 5200 core, including
4482 the MCF5202, MCF5203, MCF5204 and MCF5202.
4486 Generate output for a 68040, without using any of the new instructions.
4487 This results in code which can run relatively efficiently on either a
4488 68020/68881 or a 68030 or a 68040. The generated code does use the
4489 68881 instructions that are emulated on the 68040.
4492 Generate output for a 68060, without using any of the new instructions.
4493 This results in code which can run relatively efficiently on either a
4494 68020/68881 or a 68030 or a 68040. The generated code does use the
4495 68881 instructions that are emulated on the 68060.
4498 Generate output containing Sun FPA instructions for floating point.
4501 Generate output containing library calls for floating point.
4502 @strong{Warning:} the requisite libraries are not available for all m68k
4503 targets. Normally the facilities of the machine's usual C compiler are
4504 used, but this can't be done directly in cross-compilation. You must
4505 make your own arrangements to provide suitable library functions for
4506 cross-compilation. The embedded targets @samp{m68k-*-aout} and
4507 @samp{m68k-*-coff} do provide software floating point support.
4510 Consider type @code{int} to be 16 bits wide, like @code{short int}.
4513 Do not use the bit-field instructions. The @samp{-m68000}, @samp{-mcpu32}
4514 and @samp{-m5200} options imply @w{@samp{-mnobitfield}}.
4517 Do use the bit-field instructions. The @samp{-m68020} option implies
4518 @samp{-mbitfield}. This is the default if you use a configuration
4519 designed for a 68020.
4522 Use a different function-calling convention, in which functions
4523 that take a fixed number of arguments return with the @code{rtd}
4524 instruction, which pops their arguments while returning. This
4525 saves one instruction in the caller since there is no need to pop
4526 the arguments there.
4528 This calling convention is incompatible with the one normally
4529 used on Unix, so you cannot use it if you need to call libraries
4530 compiled with the Unix compiler.
4532 Also, you must provide function prototypes for all functions that
4533 take variable numbers of arguments (including @code{printf});
4534 otherwise incorrect code will be generated for calls to those
4537 In addition, seriously incorrect code will result if you call a
4538 function with too many arguments. (Normally, extra arguments are
4539 harmlessly ignored.)
4541 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
4542 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
4545 @itemx -mno-align-int
4546 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
4547 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
4548 boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-mno-align-int}).
4549 Aligning variables on 32-bit boundaries produces code that runs somewhat
4550 faster on processors with 32-bit busses at the expense of more memory.
4552 @strong{Warning:} if you use the @samp{-malign-int} switch, GCC will
4553 align structures containing the above types differently than
4554 most published application binary interface specifications for the m68k.
4557 Use the pc-relative addressing mode of the 68000 directly, instead of
4558 using a global offset table. At present, this option implies -fpic,
4559 allowing at most a 16-bit offset for pc-relative addressing. -fPIC is
4560 not presently supported with -mpcrel, though this could be supported for
4561 68020 and higher processors.
4563 @item -mno-strict-align
4564 @itemx -mstrict-align
4565 @kindex -mstrict-align
4566 Do not (do) assume that unaligned memory references will be handled by
4571 @node M68hc1x Options
4572 @subsection M68hc1x Options
4573 @cindex M68hc1x options
4575 These are the @samp{-m} options defined for the 68hc11 and 68hc12
4576 microcontrollers. The default values for these options depends on
4577 which style of microcontroller was selected when the compiler was configured;
4578 the defaults for the most common choices are given below.
4583 Generate output for a 68HC11. This is the default
4584 when the compiler is configured for 68HC11-based systems.
4588 Generate output for a 68HC12. This is the default
4589 when the compiler is configured for 68HC12-based systems.
4592 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
4596 Consider type @code{int} to be 16 bits wide, like @code{short int}.
4598 @item -msoft-reg-count=@var{count}
4599 Specify the number of pseudo-soft registers which are used for the
4600 code generation. The maximum number is 32. Using more pseudo-soft
4601 register may or may not result in better code depending on the program.
4602 The default is 4 for 68HC11 and 2 for 68HC12.
4607 @subsection VAX Options
4610 These @samp{-m} options are defined for the Vax:
4614 Do not output certain jump instructions (@code{aobleq} and so on)
4615 that the Unix assembler for the Vax cannot handle across long
4619 Do output those jump instructions, on the assumption that you
4620 will assemble with the GNU assembler.
4623 Output code for g-format floating point numbers instead of d-format.
4627 @subsection SPARC Options
4628 @cindex SPARC options
4630 These @samp{-m} switches are supported on the SPARC:
4635 Specify @samp{-mapp-regs} to generate output using the global registers
4636 2 through 4, which the SPARC SVR4 ABI reserves for applications. This
4639 To be fully SVR4 ABI compliant at the cost of some performance loss,
4640 specify @samp{-mno-app-regs}. You should compile libraries and system
4641 software with this option.
4645 Generate output containing floating point instructions. This is the
4650 Generate output containing library calls for floating point.
4651 @strong{Warning:} the requisite libraries are not available for all SPARC
4652 targets. Normally the facilities of the machine's usual C compiler are
4653 used, but this cannot be done directly in cross-compilation. You must make
4654 your own arrangements to provide suitable library functions for
4655 cross-compilation. The embedded targets @samp{sparc-*-aout} and
4656 @samp{sparclite-*-*} do provide software floating point support.
4658 @samp{-msoft-float} changes the calling convention in the output file;
4659 therefore, it is only useful if you compile @emph{all} of a program with
4660 this option. In particular, you need to compile @file{libgcc.a}, the
4661 library that comes with GCC, with @samp{-msoft-float} in order for
4664 @item -mhard-quad-float
4665 Generate output containing quad-word (long double) floating point
4668 @item -msoft-quad-float
4669 Generate output containing library calls for quad-word (long double)
4670 floating point instructions. The functions called are those specified
4671 in the SPARC ABI. This is the default.
4673 As of this writing, there are no sparc implementations that have hardware
4674 support for the quad-word floating point instructions. They all invoke
4675 a trap handler for one of these instructions, and then the trap handler
4676 emulates the effect of the instruction. Because of the trap handler overhead,
4677 this is much slower than calling the ABI library routines. Thus the
4678 @samp{-msoft-quad-float} option is the default.
4682 With @samp{-mepilogue} (the default), the compiler always emits code for
4683 function exit at the end of each function. Any function exit in
4684 the middle of the function (such as a return statement in C) will
4685 generate a jump to the exit code at the end of the function.
4687 With @samp{-mno-epilogue}, the compiler tries to emit exit code inline
4688 at every function exit.
4692 With @samp{-mflat}, the compiler does not generate save/restore instructions
4693 and will use a "flat" or single register window calling convention.
4694 This model uses %i7 as the frame pointer and is compatible with the normal
4695 register window model. Code from either may be intermixed.
4696 The local registers and the input registers (0-5) are still treated as
4697 "call saved" registers and will be saved on the stack as necessary.
4699 With @samp{-mno-flat} (the default), the compiler emits save/restore
4700 instructions (except for leaf functions) and is the normal mode of operation.
4702 @item -mno-unaligned-doubles
4703 @itemx -munaligned-doubles
4704 Assume that doubles have 8 byte alignment. This is the default.
4706 With @samp{-munaligned-doubles}, GCC assumes that doubles have 8 byte
4707 alignment only if they are contained in another type, or if they have an
4708 absolute address. Otherwise, it assumes they have 4 byte alignment.
4709 Specifying this option avoids some rare compatibility problems with code
4710 generated by other compilers. It is not the default because it results
4711 in a performance loss, especially for floating point code.
4713 @item -mno-faster-structs
4714 @itemx -mfaster-structs
4715 With @samp{-mfaster-structs}, the compiler assumes that structures
4716 should have 8 byte alignment. This enables the use of pairs of
4717 @code{ldd} and @code{std} instructions for copies in structure
4718 assignment, in place of twice as many @code{ld} and @code{st} pairs.
4719 However, the use of this changed alignment directly violates the Sparc
4720 ABI. Thus, it's intended only for use on targets where the developer
4721 acknowledges that their resulting code will not be directly in line with
4722 the rules of the ABI.
4726 These two options select variations on the SPARC architecture.
4728 By default (unless specifically configured for the Fujitsu SPARClite),
4729 GCC generates code for the v7 variant of the SPARC architecture.
4731 @samp{-mv8} will give you SPARC v8 code. The only difference from v7
4732 code is that the compiler emits the integer multiply and integer
4733 divide instructions which exist in SPARC v8 but not in SPARC v7.
4735 @samp{-msparclite} will give you SPARClite code. This adds the integer
4736 multiply, integer divide step and scan (@code{ffs}) instructions which
4737 exist in SPARClite but not in SPARC v7.
4739 These options are deprecated and will be deleted in a future GCC release.
4740 They have been replaced with @samp{-mcpu=xxx}.
4744 These two options select the processor for which the code is optimised.
4746 With @samp{-mcypress} (the default), the compiler optimizes code for the
4747 Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series.
4748 This is also appropriate for the older SparcStation 1, 2, IPX etc.
4750 With @samp{-msupersparc} the compiler optimizes code for the SuperSparc cpu, as
4751 used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
4752 of the full SPARC v8 instruction set.
4754 These options are deprecated and will be deleted in a future GCC release.
4755 They have been replaced with @samp{-mcpu=xxx}.
4757 @item -mcpu=@var{cpu_type}
4758 Set the instruction set, register set, and instruction scheduling parameters
4759 for machine type @var{cpu_type}. Supported values for @var{cpu_type} are
4760 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
4761 @samp{hypersparc}, @samp{sparclite86x}, @samp{f930}, @samp{f934},
4762 @samp{sparclet}, @samp{tsc701}, @samp{v9}, and @samp{ultrasparc}.
4764 Default instruction scheduling parameters are used for values that select
4765 an architecture and not an implementation. These are @samp{v7}, @samp{v8},
4766 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
4768 Here is a list of each supported architecture and their supported
4773 v8: supersparc, hypersparc
4774 sparclite: f930, f934, sparclite86x
4779 @item -mtune=@var{cpu_type}
4780 Set the instruction scheduling parameters for machine type
4781 @var{cpu_type}, but do not set the instruction set or register set that the
4782 option @samp{-mcpu=}@var{cpu_type} would.
4784 The same values for @samp{-mcpu=}@var{cpu_type} are used for
4785 @samp{-mtune=}@*@var{cpu_type}, though the only useful values are those that
4786 select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
4787 @samp{hypersparc}, @samp{f930}, @samp{f934}, @samp{sparclite86x},
4788 @samp{tsc701}, @samp{ultrasparc}.
4792 These @samp{-m} switches are supported in addition to the above
4793 on the SPARCLET processor.
4796 @item -mlittle-endian
4797 Generate code for a processor running in little-endian mode.
4800 Treat register @code{%g0} as a normal register.
4801 GCC will continue to clobber it as necessary but will not assume
4802 it always reads as 0.
4804 @item -mbroken-saverestore
4805 Generate code that does not use non-trivial forms of the @code{save} and
4806 @code{restore} instructions. Early versions of the SPARCLET processor do
4807 not correctly handle @code{save} and @code{restore} instructions used with
4808 arguments. They correctly handle them used without arguments. A @code{save}
4809 instruction used without arguments increments the current window pointer
4810 but does not allocate a new stack frame. It is assumed that the window
4811 overflow trap handler will properly handle this case as will interrupt
4815 These @samp{-m} switches are supported in addition to the above
4816 on SPARC V9 processors in 64 bit environments.
4819 @item -mlittle-endian
4820 Generate code for a processor running in little-endian mode.
4824 Generate code for a 32 bit or 64 bit environment.
4825 The 32 bit environment sets int, long and pointer to 32 bits.
4826 The 64 bit environment sets int to 32 bits and long and pointer
4829 @item -mcmodel=medlow
4830 Generate code for the Medium/Low code model: the program must be linked
4831 in the low 32 bits of the address space. Pointers are 64 bits.
4832 Programs can be statically or dynamically linked.
4834 @item -mcmodel=medmid
4835 Generate code for the Medium/Middle code model: the program must be linked
4836 in the low 44 bits of the address space, the text segment must be less than
4837 2G bytes, and data segment must be within 2G of the text segment.
4838 Pointers are 64 bits.
4840 @item -mcmodel=medany
4841 Generate code for the Medium/Anywhere code model: the program may be linked
4842 anywhere in the address space, the text segment must be less than
4843 2G bytes, and data segment must be within 2G of the text segment.
4844 Pointers are 64 bits.
4846 @item -mcmodel=embmedany
4847 Generate code for the Medium/Anywhere code model for embedded systems:
4848 assume a 32 bit text and a 32 bit data segment, both starting anywhere
4849 (determined at link time). Register %g4 points to the base of the
4850 data segment. Pointers still 64 bits.
4851 Programs are statically linked, PIC is not supported.
4854 @itemx -mno-stack-bias
4855 With @samp{-mstack-bias}, GCC assumes that the stack pointer, and
4856 frame pointer if present, are offset by -2047 which must be added back
4857 when making stack frame references.
4858 Otherwise, assume no such offset is present.
4861 @node Convex Options
4862 @subsection Convex Options
4863 @cindex Convex options
4865 These @samp{-m} options are defined for Convex:
4869 Generate output for C1. The code will run on any Convex machine.
4870 The preprocessor symbol @code{__convex__c1__} is defined.
4873 Generate output for C2. Uses instructions not available on C1.
4874 Scheduling and other optimizations are chosen for max performance on C2.
4875 The preprocessor symbol @code{__convex_c2__} is defined.
4878 Generate output for C32xx. Uses instructions not available on C1.
4879 Scheduling and other optimizations are chosen for max performance on C32.
4880 The preprocessor symbol @code{__convex_c32__} is defined.
4883 Generate output for C34xx. Uses instructions not available on C1.
4884 Scheduling and other optimizations are chosen for max performance on C34.
4885 The preprocessor symbol @code{__convex_c34__} is defined.
4888 Generate output for C38xx. Uses instructions not available on C1.
4889 Scheduling and other optimizations are chosen for max performance on C38.
4890 The preprocessor symbol @code{__convex_c38__} is defined.
4893 Generate code which puts an argument count in the word preceding each
4894 argument list. This is compatible with regular CC, and a few programs
4895 may need the argument count word. GDB and other source-level debuggers
4896 do not need it; this info is in the symbol table.
4899 Omit the argument count word. This is the default.
4901 @item -mvolatile-cache
4902 Allow volatile references to be cached. This is the default.
4904 @item -mvolatile-nocache
4905 Volatile references bypass the data cache, going all the way to memory.
4906 This is only needed for multi-processor code that does not use standard
4907 synchronization instructions. Making non-volatile references to volatile
4908 locations will not necessarily work.
4911 Type long is 32 bits, the same as type int. This is the default.
4914 Type long is 64 bits, the same as type long long. This option is useless,
4915 because no library support exists for it.
4918 @node AMD29K Options
4919 @subsection AMD29K Options
4920 @cindex AMD29K options
4922 These @samp{-m} options are defined for the AMD Am29000:
4927 @cindex DW bit (29k)
4928 Generate code that assumes the @code{DW} bit is set, i.e., that byte and
4929 halfword operations are directly supported by the hardware. This is the
4934 Generate code that assumes the @code{DW} bit is not set.
4938 @cindex byte writes (29k)
4939 Generate code that assumes the system supports byte and halfword write
4940 operations. This is the default.
4944 Generate code that assumes the systems does not support byte and
4945 halfword write operations. @samp{-mnbw} implies @samp{-mndw}.
4949 @cindex memory model (29k)
4950 Use a small memory model that assumes that all function addresses are
4951 either within a single 256 KB segment or at an absolute address of less
4952 than 256k. This allows the @code{call} instruction to be used instead
4953 of a @code{const}, @code{consth}, @code{calli} sequence.
4957 Use the normal memory model: Generate @code{call} instructions only when
4958 calling functions in the same file and @code{calli} instructions
4959 otherwise. This works if each file occupies less than 256 KB but allows
4960 the entire executable to be larger than 256 KB. This is the default.
4963 Always use @code{calli} instructions. Specify this option if you expect
4964 a single file to compile into more than 256 KB of code.
4968 @cindex processor selection (29k)
4969 Generate code for the Am29050.
4973 Generate code for the Am29000. This is the default.
4975 @item -mkernel-registers
4976 @kindex -mkernel-registers
4977 @cindex kernel and user registers (29k)
4978 Generate references to registers @code{gr64-gr95} instead of to
4979 registers @code{gr96-gr127}. This option can be used when compiling
4980 kernel code that wants a set of global registers disjoint from that used
4983 Note that when this option is used, register names in @samp{-f} flags
4984 must use the normal, user-mode, names.
4986 @item -muser-registers
4987 @kindex -muser-registers
4988 Use the normal set of global registers, @code{gr96-gr127}. This is the
4992 @itemx -mno-stack-check
4993 @kindex -mstack-check
4994 @cindex stack checks (29k)
4995 Insert (or do not insert) a call to @code{__msp_check} after each stack
4996 adjustment. This is often used for kernel code.
4999 @itemx -mno-storem-bug
5000 @kindex -mstorem-bug
5001 @cindex storem bug (29k)
5002 @samp{-mstorem-bug} handles 29k processors which cannot handle the
5003 separation of a mtsrim insn and a storem instruction (most 29000 chips
5004 to date, but not the 29050).
5006 @item -mno-reuse-arg-regs
5007 @itemx -mreuse-arg-regs
5008 @kindex -mreuse-arg-regs
5009 @samp{-mno-reuse-arg-regs} tells the compiler to only use incoming argument
5010 registers for copying out arguments. This helps detect calling a function
5011 with fewer arguments than it was declared with.
5013 @item -mno-impure-text
5014 @itemx -mimpure-text
5015 @kindex -mimpure-text
5016 @samp{-mimpure-text}, used in addition to @samp{-shared}, tells the compiler to
5017 not pass @samp{-assert pure-text} to the linker when linking a shared object.
5020 @kindex -msoft-float
5021 Generate output containing library calls for floating point.
5022 @strong{Warning:} the requisite libraries are not part of GCC.
5023 Normally the facilities of the machine's usual C compiler are used, but
5024 this can't be done directly in cross-compilation. You must make your
5025 own arrangements to provide suitable library functions for
5030 Do not generate multm or multmu instructions. This is useful for some embedded
5031 systems which do not have trap handlers for these instructions.
5035 @subsection ARM Options
5038 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
5043 @kindex -mapcs-frame
5044 Generate a stack frame that is compliant with the ARM Procedure Call
5045 Standard for all functions, even if this is not strictly necessary for
5046 correct execution of the code. Specifying @samp{-fomit-frame-pointer}
5047 with this option will cause the stack frames not to be generated for
5048 leaf functions. The default is @samp{-mno-apcs-frame}.
5052 This is a synonym for @samp{-mapcs-frame}.
5056 Generate code for a processor running with a 26-bit program counter,
5057 and conforming to the function calling standards for the APCS 26-bit
5058 option. This option replaces the @samp{-m2} and @samp{-m3} options
5059 of previous releases of the compiler.
5063 Generate code for a processor running with a 32-bit program counter,
5064 and conforming to the function calling standards for the APCS 32-bit
5065 option. This option replaces the @samp{-m6} option of previous releases
5068 @item -mapcs-stack-check
5069 @kindex -mapcs-stack-check
5070 @kindex -mno-apcs-stack-check
5071 Generate code to check the amount of stack space available upon entry to
5072 every function (that actually uses some stack space). If there is
5073 insufficient space available then either the function
5074 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
5075 called, depending upon the amount of stack space required. The run time
5076 system is required to provide these functions. The default is
5077 @samp{-mno-apcs-stack-check}, since this produces smaller code.
5080 @kindex -mapcs-float
5081 @kindex -mno-apcs-float
5082 Pass floating point arguments using the float point registers. This is
5083 one of the variants of the APCS. This option is recommended if the
5084 target hardware has a floating point unit or if a lot of floating point
5085 arithmetic is going to be performed by the code. The default is
5086 @samp{-mno-apcs-float}, since integer only code is slightly increased in
5087 size if @samp{-mapcs-float} is used.
5089 @item -mapcs-reentrant
5090 @kindex -mapcs-reentrant
5091 @kindex -mno-apcs-reentrant
5092 Generate reentrant, position independent code. This is the equivalent
5093 to specifying the @samp{-fpic} option. The default is
5094 @samp{-mno-apcs-reentrant}.
5096 @item -mthumb-interwork
5097 @kindex -mthumb-interwork
5098 @kindex -mno-thumb-interwork
5099 Generate code which supports calling between the ARM and THUMB
5100 instruction sets. Without this option the two instruction sets cannot
5101 be reliably used inside one program. The default is
5102 @samp{-mno-thumb-interwork}, since slightly larger code is generated
5103 when @samp{-mthumb-interwork} is specified.
5105 @item -mno-sched-prolog
5106 @kindex -mno-sched-prolog
5107 @kindex -msched-prolog
5108 Prevent the reordering of instructions in the function prolog, or the
5109 merging of those instruction with the instructions in the function's
5110 body. This means that all functions will start with a recognizable set
5111 of instructions (or in fact one of a choice from a small set of
5112 different function prologues), and this information can be used to
5113 locate the start if functions inside an executable piece of code. The
5114 default is @samp{-msched-prolog}.
5117 Generate output containing floating point instructions. This is the
5121 Generate output containing library calls for floating point.
5122 @strong{Warning:} the requisite libraries are not available for all ARM
5123 targets. Normally the facilities of the machine's usual C compiler are
5124 used, but this cannot be done directly in cross-compilation. You must make
5125 your own arrangements to provide suitable library functions for
5128 @samp{-msoft-float} changes the calling convention in the output file;
5129 therefore, it is only useful if you compile @emph{all} of a program with
5130 this option. In particular, you need to compile @file{libgcc.a}, the
5131 library that comes with GCC, with @samp{-msoft-float} in order for
5134 @item -mlittle-endian
5135 Generate code for a processor running in little-endian mode. This is
5136 the default for all standard configurations.
5139 Generate code for a processor running in big-endian mode; the default is
5140 to compile code for a little-endian processor.
5142 @item -mwords-little-endian
5143 This option only applies when generating code for big-endian processors.
5144 Generate code for a little-endian word order but a big-endian byte
5145 order. That is, a byte order of the form @samp{32107654}. Note: this
5146 option should only be used if you require compatibility with code for
5147 big-endian ARM processors generated by versions of the compiler prior to
5150 @item -malignment-traps
5151 @kindex -malignment-traps
5152 Generate code that will not trap if the MMU has alignment traps enabled.
5153 On ARM architectures prior to ARMv4, there were no instructions to
5154 access half-word objects stored in memory. However, when reading from
5155 memory a feature of the ARM architecture allows a word load to be used,
5156 even if the address is unaligned, and the processor core will rotate the
5157 data as it is being loaded. This option tells the compiler that such
5158 misaligned accesses will cause a MMU trap and that it should instead
5159 synthesise the access as a series of byte accesses. The compiler can
5160 still use word accesses to load half-word data if it knows that the
5161 address is aligned to a word boundary.
5163 This option is ignored when compiling for ARM architecture 4 or later,
5164 since these processors have instructions to directly access half-word
5167 @item -mno-alignment-traps
5168 @kindex -mno-alignment-traps
5169 Generate code that assumes that the MMU will not trap unaligned
5170 accesses. This produces better code when the target instruction set
5171 does not have half-word memory operations (implementations prior to
5174 Note that you cannot use this option to access unaligned word objects,
5175 since the processor will only fetch one 32-bit aligned object from
5178 The default setting for most targets is -mno-alignment-traps, since
5179 this produces better code when there are no half-word memory
5180 instructions available.
5182 @item -mshort-load-bytes
5183 @kindex -mshort-load-bytes
5184 This is a deprecated alias for @samp{-malignment-traps}.
5186 @item -mno-short-load-bytes
5187 @kindex -mno-short-load-bytes
5188 This is a deprecated alias for @samp{-mno-alignment-traps}.
5190 @item -mshort-load-words
5191 @kindex -mshort-load-words
5192 This is a deprecated alias for @samp{-mno-alignment-traps}.
5194 @item -mno-short-load-words
5195 @kindex -mno-short-load-words
5196 This is a deprecated alias for @samp{-malignment-traps}.
5200 This option only applies to RISC iX. Emulate the native BSD-mode
5201 compiler. This is the default if @samp{-ansi} is not specified.
5205 This option only applies to RISC iX. Emulate the native X/Open-mode
5208 @item -mno-symrename
5209 @kindex -mno-symrename
5210 This option only applies to RISC iX. Do not run the assembler
5211 post-processor, @samp{symrename}, after code has been assembled.
5212 Normally it is necessary to modify some of the standard symbols in
5213 preparation for linking with the RISC iX C library; this option
5214 suppresses this pass. The post-processor is never run when the
5215 compiler is built for cross-compilation.
5219 This specifies the name of the target ARM processor. GCC uses this name
5220 to determine what kind of instructions it can use when generating
5221 assembly code. Permissible names are: arm2, arm250, arm3, arm6, arm60,
5222 arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi,
5223 arm70, arm700, arm700i, arm710, arm710c, arm7100, arm7500, arm7500fe,
5224 arm7tdmi, arm8, strongarm, strongarm110, strongarm1100, arm8, arm810,
5225 arm9, arm920, arm920t, arm9tdmi.
5227 @itemx -mtune=<name>
5229 This option is very similar to the @samp{-mcpu=} option, except that
5230 instead of specifying the actual target processor type, and hence
5231 restricting which instructions can be used, it specifies that GCC should
5232 tune the performance of the code as if the target were of the type
5233 specified in this option, but still choosing the instructions that it
5234 will generate based on the cpu specified by a @samp{-mcpu=} option.
5235 For some arm implementations better performance can be obtained by using
5240 This specifies the name of the target ARM architecture. GCC uses this
5241 name to determine what kind of instructions it can use when generating
5242 assembly code. This option can be used in conjunction with or instead
5243 of the @samp{-mcpu=} option. Permissible names are: armv2, armv2a,
5244 armv3, armv3m, armv4, armv4t, armv5.
5246 @item -mfpe=<number>
5247 @itemx -mfp=<number>
5250 This specifies the version of the floating point emulation available on
5251 the target. Permissible values are 2 and 3. @samp{-mfp=} is a synonym
5252 for @samp{-mfpe=} to support older versions of GCC.
5254 @item -mstructure-size-boundary=<n>
5255 @kindex -mstructure-size-boundary
5256 The size of all structures and unions will be rounded up to a multiple
5257 of the number of bits set by this option. Permissible values are 8 and
5258 32. The default value varies for different toolchains. For the COFF
5259 targeted toolchain the default value is 8. Specifying the larger number
5260 can produce faster, more efficient code, but can also increase the size
5261 of the program. The two values are potentially incompatible. Code
5262 compiled with one value cannot necessarily expect to work with code or
5263 libraries compiled with the other value, if they exchange information
5264 using structures or unions. Programmers are encouraged to use the 32
5265 value as future versions of the toolchain may default to this value.
5267 @item -mabort-on-noreturn
5268 @kindex -mabort-on-noreturn
5269 @kindex -mnoabort-on-noreturn
5270 Generate a call to the function abort at the end of a noreturn function.
5271 It will be executed if the function tries to return.
5274 @itemx -mno-long-calls
5275 Tells the compiler to perform function calls by first loading the
5276 address of the function into a register and then performing a subroutine
5277 call on this register. This switch is needed if the target function
5278 will lie outside of the 64 megabyte addressing range of the offset based
5279 version of subroutine call instruction.
5281 Even if this switch is enabled, not all function calls will be turned
5282 into long calls. The heuristic is that static functions, functions
5283 which have the @samp{short-call} attribute, functions that are inside
5284 the scope of a @samp{#pragma no_long_calls} directive and functions whose
5285 definitions have already been compiled within the current compilation
5286 unit, will not be turned into long calls. The exception to this rule is
5287 that weak function definitions, functions with the @samp{long-call}
5288 attribute or the @samp{section} attribute, and functions that are within
5289 the scope of a @samp{#pragma long_calls} directive, will always be
5290 turned into long calls.
5292 This feature is not enabled by default. Specifying
5293 @samp{--no-long-calls} will restore the default behaviour, as will
5294 placing the function calls within the scope of a @samp{#pragma
5295 long_calls_off} directive. Note these switches have no effect on how
5296 the compiler generates code to handle function calls via function
5299 @item -mnop-fun-dllimport
5300 @kindex -mnop-fun-dllimport
5301 Disable the support for the @emph{dllimport} attribute.
5303 @item -msingle-pic-base
5304 @kindex -msingle-pic-base
5305 Treat the register used for PIC addressing as read-only, rather than
5306 loading it in the prologue for each function. The run-time system is
5307 responsible for initialising this register with an appropriate value
5308 before execution begins.
5310 @item -mpic-register=<reg>
5311 @kindex -mpic-register=
5312 Specify the register to be used for PIC addressing. The default is R10
5313 unless stack-checking is enabled, when R9 is used.
5318 @subsection Thumb Options
5319 @cindex Thumb Options
5323 @item -mthumb-interwork
5324 @kindex -mthumb-interwork
5325 @kindex -mno-thumb-interwork
5326 Generate code which supports calling between the THUMB and ARM
5327 instruction sets. Without this option the two instruction sets cannot
5328 be reliably used inside one program. The default is
5329 @samp{-mno-thumb-interwork}, since slightly smaller code is generated
5333 @kindex -mtpcs-frame
5334 @kindex -mno-tpcs-frame
5335 Generate a stack frame that is compliant with the Thumb Procedure Call
5336 Standard for all non-leaf functions. (A leaf function is one that does
5337 not call any other functions). The default is @samp{-mno-apcs-frame}.
5339 @item -mtpcs-leaf-frame
5340 @kindex -mtpcs-leaf-frame
5341 @kindex -mno-tpcs-leaf-frame
5342 Generate a stack frame that is compliant with the Thumb Procedure Call
5343 Standard for all leaf functions. (A leaf function is one that does
5344 not call any other functions). The default is @samp{-mno-apcs-leaf-frame}.
5346 @item -mlittle-endian
5347 @kindex -mlittle-endian
5348 Generate code for a processor running in little-endian mode. This is
5349 the default for all standard configurations.
5352 @kindex -mbig-endian
5353 Generate code for a processor running in big-endian mode.
5355 @item -mstructure-size-boundary=<n>
5356 @kindex -mstructure-size-boundary
5357 The size of all structures and unions will be rounded up to a multiple
5358 of the number of bits set by this option. Permissible values are 8 and
5359 32. The default value varies for different toolchains. For the COFF
5360 targeted toolchain the default value is 8. Specifying the larger number
5361 can produced faster, more efficient code, but can also increase the size
5362 of the program. The two values are potentially incompatible. Code
5363 compiled with one value cannot necessarily expect to work with code or
5364 libraries compiled with the other value, if they exchange information
5365 using structures or unions. Programmers are encouraged to use the 32
5366 value as future versions of the toolchain may default to this value.
5368 @item -mnop-fun-dllimport
5369 @kindex -mnop-fun-dllimport
5370 Disable the support for the @emph{dllimport} attribute.
5372 @item -mcallee-super-interworking
5373 @kindex -mcallee-super-interworking
5374 Gives all externally visible functions in the file being compiled an ARM
5375 instruction set header which switches to Thumb mode before executing the
5376 rest of the function. This allows these functions to be called from
5377 non-interworking code.
5379 @item -mcaller-super-interworking
5380 @kindex -mcaller-super-interworking
5381 Allows calls via function pointers (including virtual functions) to
5382 execute correctly regardless of whether the target code has been
5383 compiled for interworking or not. There is a small overhead in the cost
5384 of executing a function pointer if this option is enabled.
5386 @item -msingle-pic-base
5387 @kindex -msingle-pic-base
5388 Treat the register used for PIC addressing as read-only, rather than
5389 loading it in the prologue for each function. The run-time system is
5390 responsible for initialising this register with an appropriate value
5391 before execution begins.
5393 @item -mpic-register=<reg>
5394 @kindex -mpic-register=
5395 Specify the register to be used for PIC addressing. The default is R10.
5399 @node MN10200 Options
5400 @subsection MN10200 Options
5401 @cindex MN10200 options
5402 These @samp{-m} options are defined for Matsushita MN10200 architectures:
5406 Indicate to the linker that it should perform a relaxation optimization pass
5407 to shorten branches, calls and absolute memory addresses. This option only
5408 has an effect when used on the command line for the final link step.
5410 This option makes symbolic debugging impossible.
5413 @node MN10300 Options
5414 @subsection MN10300 Options
5415 @cindex MN10300 options
5416 These @samp{-m} options are defined for Matsushita MN10300 architectures:
5420 Generate code to avoid bugs in the multiply instructions for the MN10300
5421 processors. This is the default.
5424 Do not generate code to avoid bugs in the multiply instructions for the
5428 Generate code which uses features specific to the AM33 processor.
5431 Do not generate code which uses features specific to the AM33 processor. This
5435 Indicate to the linker that it should perform a relaxation optimization pass
5436 to shorten branches, calls and absolute memory addresses. This option only
5437 has an effect when used on the command line for the final link step.
5439 This option makes symbolic debugging impossible.
5443 @node M32R/D Options
5444 @subsection M32R/D Options
5445 @cindex M32R/D options
5447 These @samp{-m} options are defined for Mitsubishi M32R/D architectures:
5450 @item -mcode-model=small
5451 Assume all objects live in the lower 16MB of memory (so that their addresses
5452 can be loaded with the @code{ld24} instruction), and assume all subroutines
5453 are reachable with the @code{bl} instruction.
5454 This is the default.
5456 The addressability of a particular object can be set with the
5457 @code{model} attribute.
5459 @item -mcode-model=medium
5460 Assume objects may be anywhere in the 32 bit address space (the compiler
5461 will generate @code{seth/add3} instructions to load their addresses), and
5462 assume all subroutines are reachable with the @code{bl} instruction.
5464 @item -mcode-model=large
5465 Assume objects may be anywhere in the 32 bit address space (the compiler
5466 will generate @code{seth/add3} instructions to load their addresses), and
5467 assume subroutines may not be reachable with the @code{bl} instruction
5468 (the compiler will generate the much slower @code{seth/add3/jl}
5469 instruction sequence).
5472 Disable use of the small data area. Variables will be put into
5473 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
5474 @code{section} attribute has been specified).
5475 This is the default.
5477 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
5478 Objects may be explicitly put in the small data area with the
5479 @code{section} attribute using one of these sections.
5482 Put small global and static data in the small data area, but do not
5483 generate special code to reference them.
5486 Put small global and static data in the small data area, and generate
5487 special instructions to reference them.
5490 @cindex smaller data references
5491 Put global and static objects less than or equal to @var{num} bytes
5492 into the small data or bss sections instead of the normal data or bss
5493 sections. The default value of @var{num} is 8.
5494 The @samp{-msdata} option must be set to one of @samp{sdata} or @samp{use}
5495 for this option to have any effect.
5497 All modules should be compiled with the same @samp{-G @var{num}} value.
5498 Compiling with different values of @var{num} may or may not work; if it
5499 doesn't the linker will give an error message - incorrect code will not be
5505 @subsection M88K Options
5506 @cindex M88k options
5508 These @samp{-m} options are defined for Motorola 88k architectures:
5513 Generate code that works well on both the m88100 and the
5518 Generate code that works best for the m88100, but that also
5523 Generate code that works best for the m88110, and may not run
5528 Obsolete option to be removed from the next revision.
5531 @item -midentify-revision
5532 @kindex -midentify-revision
5534 @cindex identifying source, compiler (88k)
5535 Include an @code{ident} directive in the assembler output recording the
5536 source file name, compiler name and version, timestamp, and compilation
5539 @item -mno-underscores
5540 @kindex -mno-underscores
5541 @cindex underscores, avoiding (88k)
5542 In assembler output, emit symbol names without adding an underscore
5543 character at the beginning of each name. The default is to use an
5544 underscore as prefix on each name.
5546 @item -mocs-debug-info
5547 @itemx -mno-ocs-debug-info
5548 @kindex -mocs-debug-info
5549 @kindex -mno-ocs-debug-info
5551 @cindex debugging, 88k OCS
5552 Include (or omit) additional debugging information (about registers used
5553 in each stack frame) as specified in the 88open Object Compatibility
5554 Standard, ``OCS''. This extra information allows debugging of code that
5555 has had the frame pointer eliminated. The default for DG/UX, SVr4, and
5556 Delta 88 SVr3.2 is to include this information; other 88k configurations
5557 omit this information by default.
5559 @item -mocs-frame-position
5560 @kindex -mocs-frame-position
5561 @cindex register positions in frame (88k)
5562 When emitting COFF debugging information for automatic variables and
5563 parameters stored on the stack, use the offset from the canonical frame
5564 address, which is the stack pointer (register 31) on entry to the
5565 function. The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
5566 @samp{-mocs-frame-position}; other 88k configurations have the default
5567 @samp{-mno-ocs-frame-position}.
5569 @item -mno-ocs-frame-position
5570 @kindex -mno-ocs-frame-position
5571 @cindex register positions in frame (88k)
5572 When emitting COFF debugging information for automatic variables and
5573 parameters stored on the stack, use the offset from the frame pointer
5574 register (register 30). When this option is in effect, the frame
5575 pointer is not eliminated when debugging information is selected by the
5578 @item -moptimize-arg-area
5579 @itemx -mno-optimize-arg-area
5580 @kindex -moptimize-arg-area
5581 @kindex -mno-optimize-arg-area
5582 @cindex arguments in frame (88k)
5583 Control how function arguments are stored in stack frames.
5584 @samp{-moptimize-arg-area} saves space by optimizing them, but this
5585 conflicts with the 88open specifications. The opposite alternative,
5586 @samp{-mno-optimize-arg-area}, agrees with 88open standards. By default
5587 GCC does not optimize the argument area.
5589 @item -mshort-data-@var{num}
5590 @kindex -mshort-data-@var{num}
5591 @cindex smaller data references (88k)
5592 @cindex r0-relative references (88k)
5593 Generate smaller data references by making them relative to @code{r0},
5594 which allows loading a value using a single instruction (rather than the
5595 usual two). You control which data references are affected by
5596 specifying @var{num} with this option. For example, if you specify
5597 @samp{-mshort-data-512}, then the data references affected are those
5598 involving displacements of less than 512 bytes.
5599 @samp{-mshort-data-@var{num}} is not effective for @var{num} greater
5602 @item -mserialize-volatile
5603 @kindex -mserialize-volatile
5604 @itemx -mno-serialize-volatile
5605 @kindex -mno-serialize-volatile
5606 @cindex sequential consistency on 88k
5607 Do, or don't, generate code to guarantee sequential consistency
5608 of volatile memory references. By default, consistency is
5611 The order of memory references made by the MC88110 processor does
5612 not always match the order of the instructions requesting those
5613 references. In particular, a load instruction may execute before
5614 a preceding store instruction. Such reordering violates
5615 sequential consistency of volatile memory references, when there
5616 are multiple processors. When consistency must be guaranteed,
5617 GNU C generates special instructions, as needed, to force
5618 execution in the proper order.
5620 The MC88100 processor does not reorder memory references and so
5621 always provides sequential consistency. However, by default, GNU
5622 C generates the special instructions to guarantee consistency
5623 even when you use @samp{-m88100}, so that the code may be run on an
5624 MC88110 processor. If you intend to run your code only on the
5625 MC88100 processor, you may use @samp{-mno-serialize-volatile}.
5627 The extra code generated to guarantee consistency may affect the
5628 performance of your application. If you know that you can safely
5629 forgo this guarantee, you may use @samp{-mno-serialize-volatile}.
5635 @cindex assembler syntax, 88k
5637 Turn on (@samp{-msvr4}) or off (@samp{-msvr3}) compiler extensions
5638 related to System V release 4 (SVr4). This controls the following:
5642 Which variant of the assembler syntax to emit.
5644 @samp{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
5645 that is used on System V release 4.
5647 @samp{-msvr4} makes GCC issue additional declaration directives used in
5651 @samp{-msvr4} is the default for the m88k-motorola-sysv4 and
5652 m88k-dg-dgux m88k configurations. @samp{-msvr3} is the default for all
5653 other m88k configurations.
5655 @item -mversion-03.00
5656 @kindex -mversion-03.00
5657 This option is obsolete, and is ignored.
5658 @c ??? which asm syntax better for GAS? option there too?
5660 @item -mno-check-zero-division
5661 @itemx -mcheck-zero-division
5662 @kindex -mno-check-zero-division
5663 @kindex -mcheck-zero-division
5664 @cindex zero division on 88k
5665 Do, or don't, generate code to guarantee that integer division by
5666 zero will be detected. By default, detection is guaranteed.
5668 Some models of the MC88100 processor fail to trap upon integer
5669 division by zero under certain conditions. By default, when
5670 compiling code that might be run on such a processor, GNU C
5671 generates code that explicitly checks for zero-valued divisors
5672 and traps with exception number 503 when one is detected. Use of
5673 mno-check-zero-division suppresses such checking for code
5674 generated to run on an MC88100 processor.
5676 GNU C assumes that the MC88110 processor correctly detects all
5677 instances of integer division by zero. When @samp{-m88110} is
5678 specified, both @samp{-mcheck-zero-division} and
5679 @samp{-mno-check-zero-division} are ignored, and no explicit checks for
5680 zero-valued divisors are generated.
5682 @item -muse-div-instruction
5683 @kindex -muse-div-instruction
5684 @cindex divide instruction, 88k
5685 Use the div instruction for signed integer division on the
5686 MC88100 processor. By default, the div instruction is not used.
5688 On the MC88100 processor the signed integer division instruction
5689 div) traps to the operating system on a negative operand. The
5690 operating system transparently completes the operation, but at a
5691 large cost in execution time. By default, when compiling code
5692 that might be run on an MC88100 processor, GNU C emulates signed
5693 integer division using the unsigned integer division instruction
5694 divu), thereby avoiding the large penalty of a trap to the
5695 operating system. Such emulation has its own, smaller, execution
5696 cost in both time and space. To the extent that your code's
5697 important signed integer division operations are performed on two
5698 nonnegative operands, it may be desirable to use the div
5699 instruction directly.
5701 On the MC88110 processor the div instruction (also known as the
5702 divs instruction) processes negative operands without trapping to
5703 the operating system. When @samp{-m88110} is specified,
5704 @samp{-muse-div-instruction} is ignored, and the div instruction is used
5705 for signed integer division.
5707 Note that the result of dividing INT_MIN by -1 is undefined. In
5708 particular, the behavior of such a division with and without
5709 @samp{-muse-div-instruction} may differ.
5711 @item -mtrap-large-shift
5712 @itemx -mhandle-large-shift
5713 @kindex -mtrap-large-shift
5714 @kindex -mhandle-large-shift
5715 @cindex bit shift overflow (88k)
5716 @cindex large bit shifts (88k)
5717 Include code to detect bit-shifts of more than 31 bits; respectively,
5718 trap such shifts or emit code to handle them properly. By default GCC
5719 makes no special provision for large bit shifts.
5721 @item -mwarn-passed-structs
5722 @kindex -mwarn-passed-structs
5723 @cindex structure passing (88k)
5724 Warn when a function passes a struct as an argument or result.
5725 Structure-passing conventions have changed during the evolution of the C
5726 language, and are often the source of portability problems. By default,
5727 GCC issues no such warning.
5730 @node RS/6000 and PowerPC Options
5731 @subsection IBM RS/6000 and PowerPC Options
5732 @cindex RS/6000 and PowerPC Options
5733 @cindex IBM RS/6000 and PowerPC Options
5735 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
5743 @itemx -mpowerpc-gpopt
5744 @itemx -mno-powerpc-gpopt
5745 @itemx -mpowerpc-gfxopt
5746 @itemx -mno-powerpc-gfxopt
5748 @itemx -mno-powerpc64
5752 @kindex -mpowerpc-gpopt
5753 @kindex -mpowerpc-gfxopt
5755 GCC supports two related instruction set architectures for the
5756 RS/6000 and PowerPC. The @dfn{POWER} instruction set are those
5757 instructions supported by the @samp{rios} chip set used in the original
5758 RS/6000 systems and the @dfn{PowerPC} instruction set is the
5759 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
5760 the IBM 4xx microprocessors.
5762 Neither architecture is a subset of the other. However there is a
5763 large common subset of instructions supported by both. An MQ
5764 register is included in processors supporting the POWER architecture.
5766 You use these options to specify which instructions are available on the
5767 processor you are using. The default value of these options is
5768 determined when configuring GCC. Specifying the
5769 @samp{-mcpu=@var{cpu_type}} overrides the specification of these
5770 options. We recommend you use the @samp{-mcpu=@var{cpu_type}} option
5771 rather than the options listed above.
5773 The @samp{-mpower} option allows GCC to generate instructions that
5774 are found only in the POWER architecture and to use the MQ register.
5775 Specifying @samp{-mpower2} implies @samp{-power} and also allows GCC
5776 to generate instructions that are present in the POWER2 architecture but
5777 not the original POWER architecture.
5779 The @samp{-mpowerpc} option allows GCC to generate instructions that
5780 are found only in the 32-bit subset of the PowerPC architecture.
5781 Specifying @samp{-mpowerpc-gpopt} implies @samp{-mpowerpc} and also allows
5782 GCC to use the optional PowerPC architecture instructions in the
5783 General Purpose group, including floating-point square root. Specifying
5784 @samp{-mpowerpc-gfxopt} implies @samp{-mpowerpc} and also allows GCC to
5785 use the optional PowerPC architecture instructions in the Graphics
5786 group, including floating-point select.
5788 The @samp{-mpowerpc64} option allows GCC to generate the additional
5789 64-bit instructions that are found in the full PowerPC64 architecture
5790 and to treat GPRs as 64-bit, doubleword quantities. GCC defaults to
5791 @samp{-mno-powerpc64}.
5793 If you specify both @samp{-mno-power} and @samp{-mno-powerpc}, GCC
5794 will use only the instructions in the common subset of both
5795 architectures plus some special AIX common-mode calls, and will not use
5796 the MQ register. Specifying both @samp{-mpower} and @samp{-mpowerpc}
5797 permits GCC to use any instruction from either architecture and to
5798 allow use of the MQ register; specify this for the Motorola MPC601.
5800 @item -mnew-mnemonics
5801 @itemx -mold-mnemonics
5802 @kindex -mnew-mnemonics
5803 @kindex -mold-mnemonics
5804 Select which mnemonics to use in the generated assembler code.
5805 @samp{-mnew-mnemonics} requests output that uses the assembler mnemonics
5806 defined for the PowerPC architecture, while @samp{-mold-mnemonics}
5807 requests the assembler mnemonics defined for the POWER architecture.
5808 Instructions defined in only one architecture have only one mnemonic;
5809 GCC uses that mnemonic irrespective of which of these options is
5812 GCC defaults to the mnemonics appropriate for the architecture in
5813 use. Specifying @samp{-mcpu=@var{cpu_type}} sometimes overrides the
5814 value of these option. Unless you are building a cross-compiler, you
5815 should normally not specify either @samp{-mnew-mnemonics} or
5816 @samp{-mold-mnemonics}, but should instead accept the default.
5818 @item -mcpu=@var{cpu_type}
5820 Set architecture type, register usage, choice of mnemonics, and
5821 instruction scheduling parameters for machine type @var{cpu_type}.
5822 Supported values for @var{cpu_type} are @samp{rios}, @samp{rios1},
5823 @samp{rsc}, @samp{rios2}, @samp{rs64a}, @samp{601}, @samp{602},
5824 @samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620},
5825 @samp{630}, @samp{740}, @samp{750}, @samp{power}, @samp{power2},
5826 @samp{powerpc}, @samp{403}, @samp{505}, @samp{801}, @samp{821},
5827 @samp{823}, and @samp{860} and @samp{common}. @samp{-mcpu=power},
5828 @samp{-mcpu=power2}, @samp{-mcpu=powerpc}, and @samp{-mcpu=powerpc64}
5829 specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not MPC601),
5830 and 64-bit PowerPC architecture machine types, with an appropriate,
5831 generic processor model assumed for scheduling purposes.@refill
5833 Specifying any of the following options:
5834 @samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
5835 @samp{-mcpu=power}, or @samp{-mcpu=power2}
5836 enables the @samp{-mpower} option and disables the @samp{-mpowerpc} option;
5837 @samp{-mcpu=601} enables both the @samp{-mpower} and @samp{-mpowerpc} options.
5838 All of @samp{-mcpu=rs64a}, @samp{-mcpu=602}, @samp{-mcpu=603},
5839 @samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=620}, @samp{-mcpu=630},
5840 @samp{-mcpu=740}, and @samp{-mcpu=750}
5841 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
5842 Exactly similarly, all of @samp{-mcpu=403},
5843 @samp{-mcpu=505}, @samp{-mcpu=821}, @samp{-mcpu=860} and @samp{-mcpu=powerpc}
5844 enable the @samp{-mpowerpc} option and disable the @samp{-mpower} option.
5845 @samp{-mcpu=common} disables both the
5846 @samp{-mpower} and @samp{-mpowerpc} options.@refill
5848 AIX versions 4 or greater selects @samp{-mcpu=common} by default, so
5849 that code will operate on all members of the RS/6000 POWER and PowerPC
5850 families. In that case, GCC will use only the instructions in the
5851 common subset of both architectures plus some special AIX common-mode
5852 calls, and will not use the MQ register. GCC assumes a generic
5853 processor model for scheduling purposes.
5855 Specifying any of the options @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
5856 @samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} also
5857 disables the @samp{new-mnemonics} option. Specifying @samp{-mcpu=601},
5858 @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e}, @samp{-mcpu=604},
5859 @samp{-mcpu=620}, @samp{-mcpu=630}, @samp{-mcpu=403}, @samp{-mcpu=505},
5860 @samp{-mcpu=821}, @samp{-mcpu=860} or @samp{-mcpu=powerpc} also enables
5861 the @samp{new-mnemonics} option.@refill
5863 Specifying @samp{-mcpu=403}, @samp{-mcpu=821}, or @samp{-mcpu=860} also
5864 enables the @samp{-msoft-float} option.
5866 @item -mtune=@var{cpu_type}
5867 Set the instruction scheduling parameters for machine type
5868 @var{cpu_type}, but do not set the architecture type, register usage,
5869 choice of mnemonics like @samp{-mcpu=}@var{cpu_type} would. The same
5870 values for @var{cpu_type} are used for @samp{-mtune=}@var{cpu_type} as
5871 for @samp{-mcpu=}@var{cpu_type}. The @samp{-mtune=}@var{cpu_type}
5872 option overrides the @samp{-mcpu=}@var{cpu_type} option in terms of
5873 instruction scheduling parameters.
5876 @itemx -mno-fp-in-toc
5877 @itemx -mno-sum-in-toc
5878 @itemx -mminimal-toc
5879 @kindex -mminimal-toc
5880 Modify generation of the TOC (Table Of Contents), which is created for
5881 every executable file. The @samp{-mfull-toc} option is selected by
5882 default. In that case, GCC will allocate at least one TOC entry for
5883 each unique non-automatic variable reference in your program. GCC
5884 will also place floating-point constants in the TOC. However, only
5885 16,384 entries are available in the TOC.
5887 If you receive a linker error message that saying you have overflowed
5888 the available TOC space, you can reduce the amount of TOC space used
5889 with the @samp{-mno-fp-in-toc} and @samp{-mno-sum-in-toc} options.
5890 @samp{-mno-fp-in-toc} prevents GCC from putting floating-point
5891 constants in the TOC and @samp{-mno-sum-in-toc} forces GCC to
5892 generate code to calculate the sum of an address and a constant at
5893 run-time instead of putting that sum into the TOC. You may specify one
5894 or both of these options. Each causes GCC to produce very slightly
5895 slower and larger code at the expense of conserving TOC space.
5897 If you still run out of space in the TOC even when you specify both of
5898 these options, specify @samp{-mminimal-toc} instead. This option causes
5899 GCC to make only one TOC entry for every file. When you specify this
5900 option, GCC will produce code that is slower and larger but which
5901 uses extremely little TOC space. You may wish to use this option
5902 only on files that contain less frequently executed code. @refill
5908 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
5909 @code{long} type, and the infrastructure needed to support them.
5910 Specifying @samp{-maix64} implies @samp{-mpowerpc64} and
5911 @samp{-mpowerpc}, while @samp{-maix32} disables the 64-bit ABI and
5912 implies @samp{-mno-powerpc64}. GCC defaults to @samp{-maix32}.
5917 On AIX, pass floating-point arguments to prototyped functions beyond the
5918 register save area (RSA) on the stack in addition to argument FPRs. The
5919 AIX calling convention was extended but not initially documented to
5920 handle an obscure K&R C case of calling a function that takes the
5921 address of its arguments with fewer arguments than declared. AIX XL
5922 compilers access floating point arguments which do not fit in the
5923 RSA from the stack when a subroutine is compiled without
5924 optimization. Because always storing floating-point arguments on the
5925 stack is inefficient and rarely needed, this option is not enabled by
5926 default and only is necessary when calling subroutines compiled by AIX
5927 XL compilers without optimization.
5931 Support @dfn{AIX Threads}. Link an application written to use
5932 @dfn{pthreads} with special libraries and startup code to enable the
5937 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE). Link an
5938 application written to use message passing with special startup code to
5939 enable the application to run. The system must have PE installed in the
5940 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
5941 must be overridden with the @samp{-specs=} option to specify the
5942 appropriate directory location. The Parallel Environment does not
5943 support threads, so the @samp{-mpe} option and the @samp{-mthreads}
5944 option are incompatible.
5948 @kindex -msoft-float
5949 Generate code that does not use (uses) the floating-point register set.
5950 Software floating point emulation is provided if you use the
5951 @samp{-msoft-float} option, and pass the option to GCC when linking.
5954 @itemx -mno-multiple
5955 Generate code that uses (does not use) the load multiple word
5956 instructions and the store multiple word instructions. These
5957 instructions are generated by default on POWER systems, and not
5958 generated on PowerPC systems. Do not use @samp{-mmultiple} on little
5959 endian PowerPC systems, since those instructions do not work when the
5960 processor is in little endian mode. The exceptions are PPC740 and
5961 PPC750 which permit the instructions usage in little endian mode.
5966 Generate code that uses (does not use) the load string instructions
5967 and the store string word instructions to save multiple registers and
5968 do small block moves. These instructions are generated by default on
5969 POWER systems, and not generated on PowerPC systems. Do not use
5970 @samp{-mstring} on little endian PowerPC systems, since those
5971 instructions do not work when the processor is in little endian mode.
5972 The exceptions are PPC740 and PPC750 which permit the instructions
5973 usage in little endian mode.
5978 Generate code that uses (does not use) the load or store instructions
5979 that update the base register to the address of the calculated memory
5980 location. These instructions are generated by default. If you use
5981 @samp{-mno-update}, there is a small window between the time that the
5982 stack pointer is updated and the address of the previous frame is
5983 stored, which means code that walks the stack frame across interrupts or
5984 signals may get corrupted data.
5987 @itemx -mno-fused-madd
5988 @kindex -mfused-madd
5989 Generate code that uses (does not use) the floating point multiply and
5990 accumulate instructions. These instructions are generated by default if
5991 hardware floating is used.
5993 @item -mno-bit-align
5996 On System V.4 and embedded PowerPC systems do not (do) force structures
5997 and unions that contain bit fields to be aligned to the base type of the
6000 For example, by default a structure containing nothing but 8
6001 @code{unsigned} bitfields of length 1 would be aligned to a 4 byte
6002 boundary and have a size of 4 bytes. By using @samp{-mno-bit-align},
6003 the structure would be aligned to a 1 byte boundary and be one byte in
6006 @item -mno-strict-align
6007 @itemx -mstrict-align
6008 @kindex -mstrict-align
6009 On System V.4 and embedded PowerPC systems do not (do) assume that
6010 unaligned memory references will be handled by the system.
6013 @itemx -mno-relocatable
6014 @kindex -mrelocatable
6015 On embedded PowerPC systems generate code that allows (does not allow)
6016 the program to be relocated to a different address at runtime. If you
6017 use @samp{-mrelocatable} on any module, all objects linked together must
6018 be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}.
6020 @item -mrelocatable-lib
6021 @itemx -mno-relocatable-lib
6022 On embedded PowerPC systems generate code that allows (does not allow)
6023 the program to be relocated to a different address at runtime. Modules
6024 compiled with @samp{-mrelocatable-lib} can be linked with either modules
6025 compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or
6026 with modules compiled with the @samp{-mrelocatable} options.
6030 On System V.4 and embedded PowerPC systems do not (do) assume that
6031 register 2 contains a pointer to a global area pointing to the addresses
6032 used in the program.
6035 @itemx -mlittle-endian
6036 On System V.4 and embedded PowerPC systems compile code for the
6037 processor in little endian mode. The @samp{-mlittle-endian} option is
6038 the same as @samp{-mlittle}.
6042 On System V.4 and embedded PowerPC systems compile code for the
6043 processor in big endian mode. The @samp{-mbig-endian} option is
6044 the same as @samp{-mbig}.
6047 On System V.4 and embedded PowerPC systems compile code using calling
6048 conventions that adheres to the March 1995 draft of the System V
6049 Application Binary Interface, PowerPC processor supplement. This is the
6050 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
6052 @item -mcall-sysv-eabi
6053 Specify both @samp{-mcall-sysv} and @samp{-meabi} options.
6055 @item -mcall-sysv-noeabi
6056 Specify both @samp{-mcall-sysv} and @samp{-mno-eabi} options.
6059 On System V.4 and embedded PowerPC systems compile code using calling
6060 conventions that are similar to those used on AIX. This is the
6061 default if you configured GCC using @samp{powerpc-*-eabiaix}.
6063 @item -mcall-solaris
6064 On System V.4 and embedded PowerPC systems compile code for the Solaris
6068 On System V.4 and embedded PowerPC systems compile code for the
6069 Linux-based GNU system.
6072 @itemx -mno-prototype
6073 On System V.4 and embedded PowerPC systems assume that all calls to
6074 variable argument functions are properly prototyped. Otherwise, the
6075 compiler must insert an instruction before every non prototyped call to
6076 set or clear bit 6 of the condition code register (@var{CR}) to
6077 indicate whether floating point values were passed in the floating point
6078 registers in case the function takes a variable arguments. With
6079 @samp{-mprototype}, only calls to prototyped variable argument functions
6080 will set or clear the bit.
6083 On embedded PowerPC systems, assume that the startup module is called
6084 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
6085 @file{libc.a}. This is the default for @samp{powerpc-*-eabisim}.
6089 On embedded PowerPC systems, assume that the startup module is called
6090 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
6094 On embedded PowerPC systems, assume that the startup module is called
6095 @file{crt0.o} and the standard C libraries are @file{libads.a} and
6099 On embedded PowerPC systems, assume that the startup module is called
6100 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
6104 On System V.4 and embedded PowerPC systems, specify that you are
6105 compiling for a VxWorks system.
6108 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
6109 header to indicate that @samp{eabi} extended relocations are used.
6113 On System V.4 and embedded PowerPC systems do (do not) adhere to the
6114 Embedded Applications Binary Interface (eabi) which is a set of
6115 modifications to the System V.4 specifications. Selecting @option{-meabi}
6116 means that the stack is aligned to an 8 byte boundary, a function
6117 @code{__eabi} is called to from @code{main} to set up the eabi
6118 environment, and the @samp{-msdata} option can use both @code{r2} and
6119 @code{r13} to point to two separate small data areas. Selecting
6120 @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
6121 do not call an initialization function from @code{main}, and the
6122 @samp{-msdata} option will only use @code{r13} to point to a single
6123 small data area. The @samp{-meabi} option is on by default if you
6124 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
6127 On System V.4 and embedded PowerPC systems, put small initialized
6128 @code{const} global and static data in the @samp{.sdata2} section, which
6129 is pointed to by register @code{r2}. Put small initialized
6130 non-@code{const} global and static data in the @samp{.sdata} section,
6131 which is pointed to by register @code{r13}. Put small uninitialized
6132 global and static data in the @samp{.sbss} section, which is adjacent to
6133 the @samp{.sdata} section. The @samp{-msdata=eabi} option is
6134 incompatible with the @samp{-mrelocatable} option. The
6135 @samp{-msdata=eabi} option also sets the @samp{-memb} option.
6138 On System V.4 and embedded PowerPC systems, put small global and static
6139 data in the @samp{.sdata} section, which is pointed to by register
6140 @code{r13}. Put small uninitialized global and static data in the
6141 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
6142 The @samp{-msdata=sysv} option is incompatible with the
6143 @samp{-mrelocatable} option.
6145 @item -msdata=default
6147 On System V.4 and embedded PowerPC systems, if @samp{-meabi} is used,
6148 compile code the same as @samp{-msdata=eabi}, otherwise compile code the
6149 same as @samp{-msdata=sysv}.
6152 On System V.4 and embedded PowerPC systems, put small global and static
6153 data in the @samp{.sdata} section. Put small uninitialized global and
6154 static data in the @samp{.sbss} section. Do not use register @code{r13}
6155 to address small data however. This is the default behavior unless
6156 other @samp{-msdata} options are used.
6160 On embedded PowerPC systems, put all initialized global and static data
6161 in the @samp{.data} section, and all uninitialized data in the
6162 @samp{.bss} section.
6165 @cindex smaller data references (PowerPC)
6166 @cindex .sdata/.sdata2 references (PowerPC)
6167 On embedded PowerPC systems, put global and static items less than or
6168 equal to @var{num} bytes into the small data or bss sections instead of
6169 the normal data or bss section. By default, @var{num} is 8. The
6170 @samp{-G @var{num}} switch is also passed to the linker.
6171 All modules should be compiled with the same @samp{-G @var{num}} value.
6174 @itemx -mno-regnames
6175 On System V.4 and embedded PowerPC systems do (do not) emit register
6176 names in the assembly language output using symbolic forms.
6181 @subsection IBM RT Options
6183 @cindex IBM RT options
6185 These @samp{-m} options are defined for the IBM RT PC:
6189 Use an in-line code sequence for integer multiplies. This is the
6192 @item -mcall-lib-mul
6193 Call @code{lmul$$} for integer multiples.
6195 @item -mfull-fp-blocks
6196 Generate full-size floating point data blocks, including the minimum
6197 amount of scratch space recommended by IBM. This is the default.
6199 @item -mminimum-fp-blocks
6200 Do not include extra scratch space in floating point data blocks. This
6201 results in smaller code, but slower execution, since scratch space must
6202 be allocated dynamically.
6204 @cindex @file{varargs.h} and RT PC
6205 @cindex @file{stdarg.h} and RT PC
6206 @item -mfp-arg-in-fpregs
6207 Use a calling sequence incompatible with the IBM calling convention in
6208 which floating point arguments are passed in floating point registers.
6209 Note that @code{varargs.h} and @code{stdargs.h} will not work with
6210 floating point operands if this option is specified.
6212 @item -mfp-arg-in-gregs
6213 Use the normal calling convention for floating point arguments. This is
6216 @item -mhc-struct-return
6217 Return structures of more than one word in memory, rather than in a
6218 register. This provides compatibility with the MetaWare HighC (hc)
6219 compiler. Use the option @samp{-fpcc-struct-return} for compatibility
6220 with the Portable C Compiler (pcc).
6222 @item -mnohc-struct-return
6223 Return some structures of more than one word in registers, when
6224 convenient. This is the default. For compatibility with the
6225 IBM-supplied compilers, use the option @samp{-fpcc-struct-return} or the
6226 option @samp{-mhc-struct-return}.
6230 @subsection MIPS Options
6231 @cindex MIPS options
6233 These @samp{-m} options are defined for the MIPS family of computers:
6236 @item -mcpu=@var{cpu type}
6237 Assume the defaults for the machine type @var{cpu type} when scheduling
6238 instructions. The choices for @var{cpu type} are @samp{r2000}, @samp{r3000},
6239 @samp{r3900}, @samp{r4000}, @samp{r4100}, @samp{r4300}, @samp{r4400},
6240 @samp{r4600}, @samp{r4650}, @samp{r5000}, @samp{r6000}, @samp{r8000},
6241 and @samp{orion}. Additionally, the @samp{r2000}, @samp{r3000},
6242 @samp{r4000}, @samp{r5000}, and @samp{r6000} can be abbreviated as
6243 @samp{r2k} (or @samp{r2K}), @samp{r3k}, etc. While picking a specific
6244 @var{cpu type} will schedule things appropriately for that particular
6245 chip, the compiler will not generate any code that does not meet level 1
6246 of the MIPS ISA (instruction set architecture) without a @samp{-mipsX}
6247 or @samp{-mabi} switch being used.
6250 Issue instructions from level 1 of the MIPS ISA. This is the default.
6251 @samp{r3000} is the default @var{cpu type} at this ISA level.
6254 Issue instructions from level 2 of the MIPS ISA (branch likely, square
6255 root instructions). @samp{r6000} is the default @var{cpu type} at this
6259 Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
6260 @samp{r4000} is the default @var{cpu type} at this ISA level.
6263 Issue instructions from level 4 of the MIPS ISA (conditional move,
6264 prefetch, enhanced FPU instructions). @samp{r8000} is the default
6265 @var{cpu type} at this ISA level.
6268 Assume that 32 32-bit floating point registers are available. This is
6272 Assume that 32 64-bit floating point registers are available. This is
6273 the default when the @samp{-mips3} option is used.
6276 Assume that 32 32-bit general purpose registers are available. This is
6280 Assume that 32 64-bit general purpose registers are available. This is
6281 the default when the @samp{-mips3} option is used.
6284 Force int and long types to be 64 bits wide. See @samp{-mlong32} for an
6285 explanation of the default, and the width of pointers.
6288 Force long types to be 64 bits wide. See @samp{-mlong32} for an
6289 explanation of the default, and the width of pointers.
6292 Force long, int, and pointer types to be 32 bits wide.
6294 If none of @samp{-mlong32}, @samp{-mlong64}, or @samp{-mint64} are set,
6295 the size of ints, longs, and pointers depends on the ABI and ISA chosen.
6296 For @samp{-mabi=32}, and @samp{-mabi=n32}, ints and longs are 32 bits
6297 wide. For @samp{-mabi=64}, ints are 32 bits, and longs are 64 bits wide.
6298 For @samp{-mabi=eabi} and either @samp{-mips1} or @samp{-mips2}, ints
6299 and longs are 32 bits wide. For @samp{-mabi=eabi} and higher ISAs, ints
6300 are 32 bits, and longs are 64 bits wide. The width of pointer types is
6301 the smaller of the width of longs or the width of general purpose
6302 registers (which in turn depends on the ISA).
6309 Generate code for the indicated ABI. The default instruction level is
6310 @samp{-mips1} for @samp{32}, @samp{-mips3} for @samp{n32}, and
6311 @samp{-mips4} otherwise. Conversely, with @samp{-mips1} or
6312 @samp{-mips2}, the default ABI is @samp{32}; otherwise, the default ABI
6316 Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
6317 add normal debug information. This is the default for all
6318 platforms except for the OSF/1 reference platform, using the OSF/rose
6319 object format. If the either of the @samp{-gstabs} or @samp{-gstabs+}
6320 switches are used, the @file{mips-tfile} program will encapsulate the
6321 stabs within MIPS ECOFF.
6324 Generate code for the GNU assembler. This is the default on the OSF/1
6325 reference platform, using the OSF/rose object format. Also, this is
6326 the default if the configure option @samp{--with-gnu-as} is used.
6328 @item -msplit-addresses
6329 @itemx -mno-split-addresses
6330 Generate code to load the high and low parts of address constants separately.
6331 This allows @code{gcc} to optimize away redundant loads of the high order
6332 bits of addresses. This optimization requires GNU as and GNU ld.
6333 This optimization is enabled by default for some embedded targets where
6334 GNU as and GNU ld are standard.
6338 The @samp{-mrnames} switch says to output code using the MIPS software
6339 names for the registers, instead of the hardware names (ie, @var{a0}
6340 instead of @var{$4}). The only known assembler that supports this option
6341 is the Algorithmics assembler.
6345 The @samp{-mgpopt} switch says to write all of the data declarations
6346 before the instructions in the text section, this allows the MIPS
6347 assembler to generate one word memory references instead of using two
6348 words for short global or static data items. This is on by default if
6349 optimization is selected.
6353 For each non-inline function processed, the @samp{-mstats} switch
6354 causes the compiler to emit one line to the standard error file to
6355 print statistics about the program (number of registers saved, stack
6360 The @samp{-mmemcpy} switch makes all block moves call the appropriate
6361 string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
6362 generating inline code.
6365 @itemx -mno-mips-tfile
6366 The @samp{-mno-mips-tfile} switch causes the compiler not
6367 postprocess the object file with the @file{mips-tfile} program,
6368 after the MIPS assembler has generated it to add debug support. If
6369 @file{mips-tfile} is not run, then no local variables will be
6370 available to the debugger. In addition, @file{stage2} and
6371 @file{stage3} objects will have the temporary file names passed to the
6372 assembler embedded in the object file, which means the objects will
6373 not compare the same. The @samp{-mno-mips-tfile} switch should only
6374 be used when there are bugs in the @file{mips-tfile} program that
6375 prevents compilation.
6378 Generate output containing library calls for floating point.
6379 @strong{Warning:} the requisite libraries are not part of GCC.
6380 Normally the facilities of the machine's usual C compiler are used, but
6381 this can't be done directly in cross-compilation. You must make your
6382 own arrangements to provide suitable library functions for
6386 Generate output containing floating point instructions. This is the
6387 default if you use the unmodified sources.
6390 @itemx -mno-abicalls
6391 Emit (or do not emit) the pseudo operations @samp{.abicalls},
6392 @samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for
6393 position independent code.
6396 @itemx -mno-long-calls
6397 Do all calls with the @samp{JALR} instruction, which requires
6398 loading up a function's address into a register before the call.
6399 You need to use this switch, if you call outside of the current
6400 512 megabyte segment to functions that are not through pointers.
6403 @itemx -mno-half-pic
6404 Put pointers to extern references into the data section and load them
6405 up, rather than put the references in the text section.
6407 @item -membedded-pic
6408 @itemx -mno-embedded-pic
6409 Generate PIC code suitable for some embedded systems. All calls are
6410 made using PC relative address, and all data is addressed using the $gp
6411 register. No more than 65536 bytes of global data may be used. This
6412 requires GNU as and GNU ld which do most of the work. This currently
6413 only works on targets which use ECOFF; it does not work with ELF.
6415 @item -membedded-data
6416 @itemx -mno-embedded-data
6417 Allocate variables to the read-only data section first if possible, then
6418 next in the small data section if possible, otherwise in data. This gives
6419 slightly slower code than the default, but reduces the amount of RAM required
6420 when executing, and thus may be preferred for some embedded systems.
6422 @item -muninit-const-in-rodata
6423 @itemx -mno-uninit-const-in-rodata
6424 When used together with -membedded-data, it will always store uninitialized
6425 const variables in the read-only data section.
6427 @item -msingle-float
6428 @itemx -mdouble-float
6429 The @samp{-msingle-float} switch tells gcc to assume that the floating
6430 point coprocessor only supports single precision operations, as on the
6431 @samp{r4650} chip. The @samp{-mdouble-float} switch permits gcc to use
6432 double precision operations. This is the default.
6436 Permit use of the @samp{mad}, @samp{madu} and @samp{mul} instructions,
6437 as on the @samp{r4650} chip.
6440 Turns on @samp{-msingle-float}, @samp{-mmad}, and, at least for now,
6445 Enable 16-bit instructions.
6448 Use the entry and exit pseudo ops. This option can only be used with
6452 Compile code for the processor in little endian mode.
6453 The requisite libraries are assumed to exist.
6456 Compile code for the processor in big endian mode.
6457 The requisite libraries are assumed to exist.
6460 @cindex smaller data references (MIPS)
6461 @cindex gp-relative references (MIPS)
6462 Put global and static items less than or equal to @var{num} bytes into
6463 the small data or bss sections instead of the normal data or bss
6464 section. This allows the assembler to emit one word memory reference
6465 instructions based on the global pointer (@var{gp} or @var{$28}),
6466 instead of the normal two words used. By default, @var{num} is 8 when
6467 the MIPS assembler is used, and 0 when the GNU assembler is used. The
6468 @samp{-G @var{num}} switch is also passed to the assembler and linker.
6469 All modules should be compiled with the same @samp{-G @var{num}}
6473 Tell the MIPS assembler to not run its preprocessor over user
6474 assembler files (with a @samp{.s} suffix) when assembling them.
6477 Pass an option to gas which will cause nops to be inserted if
6478 the read of the destination register of an mfhi or mflo instruction
6479 occurs in the following two instructions.
6482 Do not include the default crt0.
6486 These options are defined by the macro
6487 @code{TARGET_SWITCHES} in the machine description. The default for the
6488 options is also defined by that macro, which enables you to change the
6493 @subsection Intel 386 Options
6494 @cindex i386 Options
6495 @cindex Intel 386 Options
6497 These @samp{-m} options are defined for the i386 family of computers:
6500 @item -mcpu=@var{cpu type}
6501 Assume the defaults for the machine type @var{cpu type} when scheduling
6502 instructions. The choices for @var{cpu type} are @samp{i386},
6503 @samp{i486}, @samp{i586}, @samp{i686}, @samp{pentium},
6504 @samp{pentiumpro}, @samp{k6}, and @samp{athlon}
6506 While picking a specific @var{cpu type} will schedule things appropriately
6507 for that particular chip, the compiler will not generate any code that
6508 does not run on the i386 without the @samp{-march=@var{cpu type}} option
6509 being used. @samp{i586} is equivalent to @samp{pentium} and @samp{i686}
6510 is equivalent to @samp{pentiumpro}. @samp{k6} is the AMD chip as
6511 opposed to the Intel ones.
6513 @item -march=@var{cpu type}
6514 Generate instructions for the machine type @var{cpu type}. The choices
6515 for @var{cpu type} are the same as for @samp{-mcpu}. Moreover,
6516 specifying @samp{-march=@var{cpu type}} implies @samp{-mcpu=@var{cpu type}}.
6522 Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro
6523 respectively. These synonyms are deprecated.
6525 @item -mintel-syntax
6526 Emit assembly using Intel syntax opcodes instead of AT&T syntax.
6530 Control whether or not the compiler uses IEEE floating point
6531 comparisons. These handle correctly the case where the result of a
6532 comparison is unordered.
6535 Generate output containing library calls for floating point.
6536 @strong{Warning:} the requisite libraries are not part of GCC.
6537 Normally the facilities of the machine's usual C compiler are used, but
6538 this can't be done directly in cross-compilation. You must make your
6539 own arrangements to provide suitable library functions for
6542 On machines where a function returns floating point results in the 80387
6543 register stack, some floating point opcodes may be emitted even if
6544 @samp{-msoft-float} is used.
6546 @item -mno-fp-ret-in-387
6547 Do not use the FPU registers for return values of functions.
6549 The usual calling convention has functions return values of types
6550 @code{float} and @code{double} in an FPU register, even if there
6551 is no FPU. The idea is that the operating system should emulate
6554 The option @samp{-mno-fp-ret-in-387} causes such values to be returned
6555 in ordinary CPU registers instead.
6557 @item -mno-fancy-math-387
6558 Some 387 emulators do not support the @code{sin}, @code{cos} and
6559 @code{sqrt} instructions for the 387. Specify this option to avoid
6560 generating those instructions. This option is the default on FreeBSD.
6561 As of revision 2.6.1, these instructions are not generated unless you
6562 also use the @samp{-ffast-math} switch.
6564 @item -malign-double
6565 @itemx -mno-align-double
6566 Control whether GCC aligns @code{double}, @code{long double}, and
6567 @code{long long} variables on a two word boundary or a one word
6568 boundary. Aligning @code{double} variables on a two word boundary will
6569 produce code that runs somewhat faster on a @samp{Pentium} at the
6570 expense of more memory.
6572 @item -m128bit-long-double
6573 @itemx -m128bit-long-double
6574 Control the size of @code{long double} type. i386 application binary interface
6575 specify the size to be 12 bytes, while modern architectures (Pentium and newer)
6576 preffer @code{long double} aligned to 8 or 16 byte boundary. This is
6577 impossible to reach with 12 byte long doubles in the array accesses.
6579 @strong{Warning:} if you use the @samp{-m128bit-long-double} switch, the
6580 structures and arrays containing @code{long double} will change their size as
6581 well as function calling convention for function taking @code{long double}
6584 @item -m96bit-long-double
6585 @itemx -m96bit-long-double
6586 Set the size of @code{long double} to 96 bits as required by the i386
6587 application binary interface. This is the default.
6590 @itemx -mno-svr3-shlib
6591 Control whether GCC places uninitialized locals into @code{bss} or
6592 @code{data}. @samp{-msvr3-shlib} places these locals into @code{bss}.
6593 These options are meaningful only on System V Release 3.
6595 @item -mno-wide-multiply
6596 @itemx -mwide-multiply
6597 Control whether GCC uses the @code{mul} and @code{imul} that produce
6598 64 bit results in @code{eax:edx} from 32 bit operands to do @code{long
6599 long} multiplies and 32-bit division by constants.
6602 Use a different function-calling convention, in which functions that
6603 take a fixed number of arguments return with the @code{ret} @var{num}
6604 instruction, which pops their arguments while returning. This saves one
6605 instruction in the caller since there is no need to pop the arguments
6608 You can specify that an individual function is called with this calling
6609 sequence with the function attribute @samp{stdcall}. You can also
6610 override the @samp{-mrtd} option by using the function attribute
6611 @samp{cdecl}. @xref{Function Attributes}.
6613 @strong{Warning:} this calling convention is incompatible with the one
6614 normally used on Unix, so you cannot use it if you need to call
6615 libraries compiled with the Unix compiler.
6617 Also, you must provide function prototypes for all functions that
6618 take variable numbers of arguments (including @code{printf});
6619 otherwise incorrect code will be generated for calls to those
6622 In addition, seriously incorrect code will result if you call a
6623 function with too many arguments. (Normally, extra arguments are
6624 harmlessly ignored.)
6626 @item -mreg-alloc=@var{regs}
6627 Control the default allocation order of integer registers. The
6628 string @var{regs} is a series of letters specifying a register. The
6629 supported letters are: @code{a} allocate EAX; @code{b} allocate EBX;
6630 @code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI;
6631 @code{D} allocate EDI; @code{B} allocate EBP.
6633 @item -mregparm=@var{num}
6634 Control how many registers are used to pass integer arguments. By
6635 default, no registers are used to pass arguments, and at most 3
6636 registers can be used. You can control this behavior for a specific
6637 function by using the function attribute @samp{regparm}.
6638 @xref{Function Attributes}.
6640 @strong{Warning:} if you use this switch, and
6641 @var{num} is nonzero, then you must build all modules with the same
6642 value, including any libraries. This includes the system libraries and
6645 @item -malign-loops=@var{num}
6646 Align loops to a 2 raised to a @var{num} byte boundary. If
6647 @samp{-malign-loops} is not specified, the default is 2 unless
6648 gas 2.8 (or later) is being used in which case the default is
6649 to align the loop on a 16 byte boundary if it is less than 8
6652 @item -malign-jumps=@var{num}
6653 Align instructions that are only jumped to to a 2 raised to a @var{num}
6654 byte boundary. If @samp{-malign-jumps} is not specified, the default is
6655 2 if optimizing for a 386, and 4 if optimizing for a 486 unless
6656 gas 2.8 (or later) is being used in which case the default is
6657 to align the instruction on a 16 byte boundary if it is less
6660 @item -malign-functions=@var{num}
6661 Align the start of functions to a 2 raised to @var{num} byte boundary.
6662 If @samp{-malign-functions} is not specified, the default is 2 if optimizing
6663 for a 386, and 4 if optimizing for a 486.
6665 @item -mpreferred-stack-boundary=@var{num}
6666 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
6667 byte boundary. If @samp{-mpreferred-stack-boundary} is not specified,
6668 the default is 4 (16 bytes or 128 bits).
6670 The stack is required to be aligned on a 4 byte boundary. On Pentium
6671 and PentiumPro, @code{double} and @code{long double} values should be
6672 aligned to an 8 byte boundary (see @samp{-malign-double}) or suffer
6673 significant run time performance penalties. On Pentium III, the
6674 Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
6675 penalties if it is not 16 byte aligned.
6677 To ensure proper alignment of this values on the stack, the stack boundary
6678 must be as aligned as that required by any value stored on the stack.
6679 Further, every function must be generated such that it keeps the stack
6680 aligned. Thus calling a function compiled with a higher preferred
6681 stack boundary from a function compiled with a lower preferred stack
6682 boundary will most likely misalign the stack. It is recommended that
6683 libraries that use callbacks always use the default setting.
6685 This extra alignment does consume extra stack space. Code that is sensitive
6686 to stack space usage, such as embedded systems and operating system kernels,
6687 may want to reduce the preferred alignment to
6688 @samp{-mpreferred-stack-boundary=2}.
6692 Use PUSH operations to store outgoing parameters. This method is shorter
6693 and usually equally fast as method using SUB/MOV operations and is enabled
6694 by default. In some cases disabling it may improve performance because of
6695 improved scheduling and reduced dependencies.
6697 @item -maccumulate-outgoing-args
6698 @kindex -maccumulate-outgoing-args
6699 If enabled, the maximum amount of space required for outgoing arguments will be
6700 computed in the function prologue. This in faster on most modern CPUs
6701 because of reduced dependencies, improved scheduling and reduced stack usage
6702 when preferred stack boundary is not equal to 2. The drawback is a notable
6703 increase in code size. This switch implies -mno-push-args.
6707 Support thread-safe exception handling on @samp{Mingw32}. Code that relies
6708 on thread-safe exception handling must compile and link all code with the
6709 @samp{-mthreads} option. When compiling, @samp{-mthreads} defines
6710 @samp{-D_MT}; when linking, it links in a special thread helper library
6711 @samp{-lmingwthrd} which cleans up per thread exception handling data.
6713 @item -mno-align-stringops
6714 @kindex -mno-align-stringops
6715 Do not align destination of inlined string operations. This switch reduces
6716 code size and improves performance in case the destination is already aligned,
6717 but gcc don't know about it.
6719 @item -minline-all-stringops
6720 @kindex -minline-all-stringops
6721 By default GCC inlines string operations only when destination is known to be
6722 aligned at least to 4 byte boundary. This enables more inlining, increase code
6723 size, but may improve performance of code that depends on fast memcpy, strlen
6724 and memset for short lengths.
6728 @subsection HPPA Options
6729 @cindex HPPA Options
6731 These @samp{-m} options are defined for the HPPA family of computers:
6734 @item -march=@var{architecture type}
6735 Generate code for the specified architecture. The choices for
6736 @var{architecture type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
6737 1.1, and @samp{2.0} for PA 2.0 processors. Refer to
6738 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
6739 architecture option for your machine. Code compiled for lower numbered
6740 architectures will run on higher numbered architectures, but not the
6743 PA 2.0 support currently requires gas snapshot 19990413 or later. The
6744 next release of binutils (current is 2.9.1) will probably contain PA 2.0
6748 @itemx -mpa-risc-1-1
6749 @itemx -mpa-risc-2-0
6750 Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
6753 Generate code suitable for big switch tables. Use this option only if
6754 the assembler/linker complain about out of range branches within a switch
6757 @item -mjump-in-delay
6758 Fill delay slots of function calls with unconditional jump instructions
6759 by modifying the return pointer for the function call to be the target
6760 of the conditional jump.
6762 @item -mdisable-fpregs
6763 Prevent floating point registers from being used in any manner. This is
6764 necessary for compiling kernels which perform lazy context switching of
6765 floating point registers. If you use this option and attempt to perform
6766 floating point operations, the compiler will abort.
6768 @item -mdisable-indexing
6769 Prevent the compiler from using indexing address modes. This avoids some
6770 rather obscure problems when compiling MIG generated code under MACH.
6772 @item -mno-space-regs
6773 Generate code that assumes the target has no space registers. This allows
6774 GCC to generate faster indirect calls and use unscaled index address modes.
6776 Such code is suitable for level 0 PA systems and kernels.
6778 @item -mfast-indirect-calls
6779 Generate code that assumes calls never cross space boundaries. This
6780 allows GCC to emit code which performs faster indirect calls.
6782 This option will not work in the presence of shared libraries or nested
6785 @item -mlong-load-store
6786 Generate 3-instruction load and store sequences as sometimes required by
6787 the HP-UX 10 linker. This is equivalent to the @samp{+k} option to
6790 @item -mportable-runtime
6791 Use the portable calling conventions proposed by HP for ELF systems.
6794 Enable the use of assembler directives only GAS understands.
6796 @item -mschedule=@var{cpu type}
6797 Schedule code according to the constraints for the machine type
6798 @var{cpu type}. The choices for @var{cpu type} are @samp{700}
6799 @samp{7100}, @samp{7100LC}, @samp{7200}, and @samp{8000}. Refer to
6800 @file{/usr/lib/sched.models} on an HP-UX system to determine the
6801 proper scheduling option for your machine.
6804 Enable the optimization pass in the HPUX linker. Note this makes symbolic
6805 debugging impossible. It also triggers a bug in the HPUX 8 and HPUX 9 linkers
6806 in which they give bogus error messages when linking some programs.
6809 Generate output containing library calls for floating point.
6810 @strong{Warning:} the requisite libraries are not available for all HPPA
6811 targets. Normally the facilities of the machine's usual C compiler are
6812 used, but this cannot be done directly in cross-compilation. You must make
6813 your own arrangements to provide suitable library functions for
6814 cross-compilation. The embedded target @samp{hppa1.1-*-pro}
6815 does provide software floating point support.
6817 @samp{-msoft-float} changes the calling convention in the output file;
6818 therefore, it is only useful if you compile @emph{all} of a program with
6819 this option. In particular, you need to compile @file{libgcc.a}, the
6820 library that comes with GCC, with @samp{-msoft-float} in order for
6824 @node Intel 960 Options
6825 @subsection Intel 960 Options
6827 These @samp{-m} options are defined for the Intel 960 implementations:
6830 @item -m@var{cpu type}
6831 Assume the defaults for the machine type @var{cpu type} for some of
6832 the other options, including instruction scheduling, floating point
6833 support, and addressing modes. The choices for @var{cpu type} are
6834 @samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
6835 @samp{sa}, and @samp{sb}.
6841 The @samp{-mnumerics} option indicates that the processor does support
6842 floating-point instructions. The @samp{-msoft-float} option indicates
6843 that floating-point support should not be assumed.
6845 @item -mleaf-procedures
6846 @itemx -mno-leaf-procedures
6847 Do (or do not) attempt to alter leaf procedures to be callable with the
6848 @code{bal} instruction as well as @code{call}. This will result in more
6849 efficient code for explicit calls when the @code{bal} instruction can be
6850 substituted by the assembler or linker, but less efficient code in other
6851 cases, such as calls via function pointers, or using a linker that doesn't
6852 support this optimization.
6855 @itemx -mno-tail-call
6856 Do (or do not) make additional attempts (beyond those of the
6857 machine-independent portions of the compiler) to optimize tail-recursive
6858 calls into branches. You may not want to do this because the detection of
6859 cases where this is not valid is not totally complete. The default is
6860 @samp{-mno-tail-call}.
6862 @item -mcomplex-addr
6863 @itemx -mno-complex-addr
6864 Assume (or do not assume) that the use of a complex addressing mode is a
6865 win on this implementation of the i960. Complex addressing modes may not
6866 be worthwhile on the K-series, but they definitely are on the C-series.
6867 The default is currently @samp{-mcomplex-addr} for all processors except
6871 @itemx -mno-code-align
6872 Align code to 8-byte boundaries for faster fetching (or don't bother).
6873 Currently turned on by default for C-series implementations only.
6876 @item -mclean-linkage
6877 @itemx -mno-clean-linkage
6878 These options are not fully implemented.
6882 @itemx -mic2.0-compat
6883 @itemx -mic3.0-compat
6884 Enable compatibility with iC960 v2.0 or v3.0.
6888 Enable compatibility with the iC960 assembler.
6890 @item -mstrict-align
6891 @itemx -mno-strict-align
6892 Do not permit (do permit) unaligned accesses.
6895 Enable structure-alignment compatibility with Intel's gcc release version
6896 1.3 (based on gcc 1.37). This option implies @samp{-mstrict-align}.
6898 @item -mlong-double-64
6899 Implement type @samp{long double} as 64-bit floating point numbers.
6900 Without the option @samp{long double} is implemented by 80-bit
6901 floating point numbers. The only reason we have it because there is
6902 no 128-bit @samp{long double} support in @samp{fp-bit.c} yet. So it
6903 is only useful for people using soft-float targets. Otherwise, we
6904 should recommend against use of it.
6908 @node DEC Alpha Options
6909 @subsection DEC Alpha Options
6911 These @samp{-m} options are defined for the DEC Alpha implementations:
6914 @item -mno-soft-float
6916 Use (do not use) the hardware floating-point instructions for
6917 floating-point operations. When @option{-msoft-float} is specified,
6918 functions in @file{libgcc1.c} will be used to perform floating-point
6919 operations. Unless they are replaced by routines that emulate the
6920 floating-point operations, or compiled in such a way as to call such
6921 emulations routines, these routines will issue floating-point
6922 operations. If you are compiling for an Alpha without floating-point
6923 operations, you must ensure that the library is built so as not to call
6926 Note that Alpha implementations without floating-point operations are
6927 required to have floating-point registers.
6931 Generate code that uses (does not use) the floating-point register set.
6932 @option{-mno-fp-regs} implies @option{-msoft-float}. If the floating-point
6933 register set is not used, floating point operands are passed in integer
6934 registers as if they were integers and floating-point results are passed
6935 in $0 instead of $f0. This is a non-standard calling sequence, so any
6936 function with a floating-point argument or return value called by code
6937 compiled with @option{-mno-fp-regs} must also be compiled with that
6940 A typical use of this option is building a kernel that does not use,
6941 and hence need not save and restore, any floating-point registers.
6944 The Alpha architecture implements floating-point hardware optimized for
6945 maximum performance. It is mostly compliant with the IEEE floating
6946 point standard. However, for full compliance, software assistance is
6947 required. This option generates code fully IEEE compliant code
6948 @emph{except} that the @var{inexact flag} is not maintained (see below).
6949 If this option is turned on, the CPP macro @code{_IEEE_FP} is defined
6950 during compilation. The option is a shorthand for: @samp{-D_IEEE_FP
6951 -mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}. The resulting
6952 code is less efficient but is able to correctly support denormalized
6953 numbers and exceptional IEEE values such as not-a-number and plus/minus
6954 infinity. Other Alpha compilers call this option
6955 @option{-ieee_with_no_inexact}.
6957 @item -mieee-with-inexact
6958 @c overfull hbox here --bob 22 jul96
6959 @c original text between ignore ... end ignore
6961 This is like @samp{-mieee} except the generated code also maintains the
6962 IEEE @var{inexact flag}. Turning on this option causes the generated
6963 code to implement fully-compliant IEEE math. The option is a shorthand
6964 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @samp{-mieee-conformant},
6965 @samp{-mfp-trap-mode=sui}, and @samp{-mtrap-precision=i}. On some Alpha
6966 implementations the resulting code may execute significantly slower than
6967 the code generated by default. Since there is very little code that
6968 depends on the @var{inexact flag}, you should normally not specify this
6969 option. Other Alpha compilers call this option
6970 @samp{-ieee_with_inexact}.
6972 @c changed paragraph
6973 This is like @samp{-mieee} except the generated code also maintains the
6974 IEEE @var{inexact flag}. Turning on this option causes the generated
6975 code to implement fully-compliant IEEE math. The option is a shorthand
6976 for @samp{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following:
6977 @samp{-mieee-conformant},
6978 @samp{-mfp-trap-mode=sui},
6979 and @samp{-mtrap-precision=i}.
6980 On some Alpha implementations the resulting code may execute
6981 significantly slower than the code generated by default. Since there
6982 is very little code that depends on the @var{inexact flag}, you should
6983 normally not specify this option. Other Alpha compilers call this
6984 option @samp{-ieee_with_inexact}.
6985 @c end changes to prevent overfull hboxes
6987 @item -mfp-trap-mode=@var{trap mode}
6988 This option controls what floating-point related traps are enabled.
6989 Other Alpha compilers call this option @samp{-fptm }@var{trap mode}.
6990 The trap mode can be set to one of four values:
6994 This is the default (normal) setting. The only traps that are enabled
6995 are the ones that cannot be disabled in software (e.g., division by zero
6999 In addition to the traps enabled by @samp{n}, underflow traps are enabled
7003 Like @samp{su}, but the instructions are marked to be safe for software
7004 completion (see Alpha architecture manual for details).
7007 Like @samp{su}, but inexact traps are enabled as well.
7010 @item -mfp-rounding-mode=@var{rounding mode}
7011 Selects the IEEE rounding mode. Other Alpha compilers call this option
7012 @samp{-fprm }@var{rounding mode}. The @var{rounding mode} can be one
7017 Normal IEEE rounding mode. Floating point numbers are rounded towards
7018 the nearest machine number or towards the even machine number in case
7022 Round towards minus infinity.
7025 Chopped rounding mode. Floating point numbers are rounded towards zero.
7028 Dynamic rounding mode. A field in the floating point control register
7029 (@var{fpcr}, see Alpha architecture reference manual) controls the
7030 rounding mode in effect. The C library initializes this register for
7031 rounding towards plus infinity. Thus, unless your program modifies the
7032 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
7035 @item -mtrap-precision=@var{trap precision}
7036 In the Alpha architecture, floating point traps are imprecise. This
7037 means without software assistance it is impossible to recover from a
7038 floating trap and program execution normally needs to be terminated.
7039 GCC can generate code that can assist operating system trap handlers
7040 in determining the exact location that caused a floating point trap.
7041 Depending on the requirements of an application, different levels of
7042 precisions can be selected:
7046 Program precision. This option is the default and means a trap handler
7047 can only identify which program caused a floating point exception.
7050 Function precision. The trap handler can determine the function that
7051 caused a floating point exception.
7054 Instruction precision. The trap handler can determine the exact
7055 instruction that caused a floating point exception.
7058 Other Alpha compilers provide the equivalent options called
7059 @samp{-scope_safe} and @samp{-resumption_safe}.
7061 @item -mieee-conformant
7062 This option marks the generated code as IEEE conformant. You must not
7063 use this option unless you also specify @samp{-mtrap-precision=i} and either
7064 @samp{-mfp-trap-mode=su} or @samp{-mfp-trap-mode=sui}. Its only effect
7065 is to emit the line @samp{.eflag 48} in the function prologue of the
7066 generated assembly file. Under DEC Unix, this has the effect that
7067 IEEE-conformant math library routines will be linked in.
7069 @item -mbuild-constants
7070 Normally GCC examines a 32- or 64-bit integer constant to
7071 see if it can construct it from smaller constants in two or three
7072 instructions. If it cannot, it will output the constant as a literal and
7073 generate code to load it from the data segment at runtime.
7075 Use this option to require GCC to construct @emph{all} integer constants
7076 using code, even if it takes more instructions (the maximum is six).
7078 You would typically use this option to build a shared library dynamic
7079 loader. Itself a shared library, it must relocate itself in memory
7080 before it can find the variables and constants in its own data segment.
7084 Select whether to generate code to be assembled by the vendor-supplied
7085 assembler (@samp{-malpha-as}) or by the GNU assembler @samp{-mgas}.
7093 Indicate whether GCC should generate code to use the optional BWX,
7094 CIX, and MAX instruction sets. The default is to use the instruction sets
7095 supported by the CPU type specified via @samp{-mcpu=} option or that
7096 of the CPU on which GCC was built if none was specified.
7098 @item -mcpu=@var{cpu_type}
7099 Set the instruction set, register set, and instruction scheduling
7100 parameters for machine type @var{cpu_type}. You can specify either the
7101 @samp{EV} style name or the corresponding chip number. GCC
7102 supports scheduling parameters for the EV4 and EV5 family of processors
7103 and will choose the default values for the instruction set from
7104 the processor you specify. If you do not specify a processor type,
7105 GCC will default to the processor on which the compiler was built.
7107 Supported values for @var{cpu_type} are
7112 Schedules as an EV4 and has no instruction set extensions.
7116 Schedules as an EV5 and has no instruction set extensions.
7120 Schedules as an EV5 and supports the BWX extension.
7125 Schedules as an EV5 and supports the BWX and MAX extensions.
7129 Schedules as an EV5 (until Digital releases the scheduling parameters
7130 for the EV6) and supports the BWX, CIX, and MAX extensions.
7133 @item -mmemory-latency=@var{time}
7134 Sets the latency the scheduler should assume for typical memory
7135 references as seen by the application. This number is highly
7136 dependent on the memory access patterns used by the application
7137 and the size of the external cache on the machine.
7139 Valid options for @var{time} are
7143 A decimal number representing clock cycles.
7149 The compiler contains estimates of the number of clock cycles for
7150 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
7151 (also called Dcache, Scache, and Bcache), as well as to main memory.
7152 Note that L3 is only valid for EV5.
7157 @node Clipper Options
7158 @subsection Clipper Options
7160 These @samp{-m} options are defined for the Clipper implementations:
7164 Produce code for a C300 Clipper processor. This is the default.
7167 Produce code for a C400 Clipper processor i.e. use floating point
7171 @node H8/300 Options
7172 @subsection H8/300 Options
7174 These @samp{-m} options are defined for the H8/300 implementations:
7178 Shorten some address references at link time, when possible; uses the
7179 linker option @samp{-relax}. @xref{H8/300,, @code{ld} and the H8/300,
7180 ld.info, Using ld}, for a fuller description.
7183 Generate code for the H8/300H.
7186 Generate code for the H8/S.
7189 Generate code for the H8/S2600. This switch must be used with -ms.
7192 Make @code{int} data 32 bits by default.
7195 On the H8/300H and H8/S, use the same alignment rules as for the H8/300.
7196 The default for the H8/300H and H8/S is to align longs and floats on 4
7198 @samp{-malign-300} causes them to be aligned on 2 byte boundaries.
7199 This option has no effect on the H8/300.
7203 @subsection SH Options
7205 These @samp{-m} options are defined for the SH implementations:
7209 Generate code for the SH1.
7212 Generate code for the SH2.
7215 Generate code for the SH3.
7218 Generate code for the SH3e.
7221 Generate code for the SH4 without a floating-point unit.
7223 @item -m4-single-only
7224 Generate code for the SH4 with a floating-point unit that only
7225 supports single-precision arithmentic.
7228 Generate code for the SH4 assuming the floating-point unit is in
7229 single-precision mode by default.
7232 Generate code for the SH4.
7235 Compile code for the processor in big endian mode.
7238 Compile code for the processor in little endian mode.
7241 Align doubles at 64 bit boundaries. Note that this changes the calling
7242 conventions, and thus some functions from the standard C library will
7243 not work unless you recompile it first with -mdalign.
7246 Shorten some address references at link time, when possible; uses the
7247 linker option @samp{-relax}.
7250 Use 32-bit offsets in @code{switch} tables. The default is to use
7254 Enable the use of the instruction @code{fmovd}.
7257 Comply with the calling conventions defined by Hitachi.
7260 Mark the @code{MAC} register as call-clobbered, even if
7261 @option{-mhitachi} is given.
7264 Dump instruction size and location in the assembly code.
7267 This option is deprecated. It pads structures to multiple of 4 bytes,
7268 which is incompatible with the SH ABI.
7271 Optimize for space instead of speed. Implied by @option{-Os}.
7274 When generating position-independent code, emit function calls using
7275 the Global Offset Table instead of the Procedure Linkage Table.
7278 Generate a library function call to invalidate instruction cache
7279 entries, after fixing up a trampoline. This library function call
7280 doesn't assume it can write to the whole memory address space. This
7281 is the default when the target is @code{sh-*-linux*}.
7284 @node System V Options
7285 @subsection Options for System V
7287 These additional options are available on System V Release 4 for
7288 compatibility with other compilers on those systems:
7292 Create a shared object.
7293 It is recommended that @samp{-symbolic} or @samp{-shared} be used instead.
7296 Identify the versions of each tool used by the compiler, in a
7297 @code{.ident} assembler directive in the output.
7300 Refrain from adding @code{.ident} directives to the output file (this is
7303 @item -YP\,@var{dirs}
7304 Search the directories @var{dirs}, and no others, for libraries
7305 specified with @samp{-l}.
7307 @item -Ym\,@var{dir}
7308 Look in the directory @var{dir} to find the M4 preprocessor.
7309 The assembler uses this option.
7310 @c This is supposed to go with a -Yd for predefined M4 macro files, but
7311 @c the generic assembler that comes with Solaris takes just -Ym.
7314 @node TMS320C3x/C4x Options
7315 @subsection TMS320C3x/C4x Options
7316 @cindex TMS320C3x/C4x Options
7318 These @samp{-m} options are defined for TMS320C3x/C4x implementations:
7322 @item -mcpu=@var{cpu_type}
7323 Set the instruction set, register set, and instruction scheduling
7324 parameters for machine type @var{cpu_type}. Supported values for
7325 @var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
7326 @samp{c44}. The default is @samp{c40} to generate code for the
7331 @itemx -msmall-memory
7333 Generates code for the big or small memory model. The small memory
7334 model assumed that all data fits into one 64K word page. At run-time
7335 the data page (DP) register must be set to point to the 64K page
7336 containing the .bss and .data program sections. The big memory model is
7337 the default and requires reloading of the DP register for every direct
7342 Allow (disallow) allocation of general integer operands into the block
7347 Enable (disable) generation of code using decrement and branch,
7348 DBcond(D), instructions. This is enabled by default for the C4x. To be
7349 on the safe side, this is disabled for the C3x, since the maximum
7350 iteration count on the C3x is 2^23 + 1 (but who iterates loops more than
7351 2^23 times on the C3x?). Note that GCC will try to reverse a loop so
7352 that it can utilise the decrement and branch instruction, but will give
7353 up if there is more than one memory reference in the loop. Thus a loop
7354 where the loop counter is decremented can generate slightly more
7355 efficient code, in cases where the RPTB instruction cannot be utilised.
7357 @item -mdp-isr-reload
7359 Force the DP register to be saved on entry to an interrupt service
7360 routine (ISR), reloaded to point to the data section, and restored on
7361 exit from the ISR. This should not be required unless someone has
7362 violated the small memory model by modifying the DP register, say within
7367 For the C3x use the 24-bit MPYI instruction for integer multiplies
7368 instead of a library call to guarantee 32-bit results. Note that if one
7369 of the operands is a constant, then the multiplication will be performed
7370 using shifts and adds. If the -mmpyi option is not specified for the C3x,
7371 then squaring operations are performed inline instead of a library call.
7374 @itemx -mno-fast-fix
7375 The C3x/C4x FIX instruction to convert a floating point value to an
7376 integer value chooses the nearest integer less than or equal to the
7377 floating point value rather than to the nearest integer. Thus if the
7378 floating point number is negative, the result will be incorrectly
7379 truncated an additional code is necessary to detect and correct this
7380 case. This option can be used to disable generation of the additional
7381 code required to correct the result.
7385 Enable (disable) generation of repeat block sequences using the RPTB
7386 instruction for zero overhead looping. The RPTB construct is only used
7387 for innermost loops that do not call functions or jump across the loop
7388 boundaries. There is no advantage having nested RPTB loops due to the
7389 overhead required to save and restore the RC, RS, and RE registers.
7390 This is enabled by default with -O2.
7392 @item -mrpts=@var{count}
7394 Enable (disable) the use of the single instruction repeat instruction
7395 RPTS. If a repeat block contains a single instruction, and the loop
7396 count can be guaranteed to be less than the value @var{count}, GCC will
7397 emit a RPTS instruction instead of a RPTB. If no value is specified,
7398 then a RPTS will be emitted even if the loop count cannot be determined
7399 at compile time. Note that the repeated instruction following RPTS does
7400 not have to be reloaded from memory each iteration, thus freeing up the
7401 CPU buses for operands. However, since interrupts are blocked by this
7402 instruction, it is disabled by default.
7404 @item -mloop-unsigned
7405 @itemx -mno-loop-unsigned
7406 The maximum iteration count when using RPTS and RPTB (and DB on the C40)
7407 is 2^31 + 1 since these instructions test if the iteration count is
7408 negative to terminate the loop. If the iteration count is unsigned
7409 there is a possibility than the 2^31 + 1 maximum iteration count may be
7410 exceeded. This switch allows an unsigned iteration count.
7413 Try to emit an assembler syntax that the TI assembler (asm30) is happy
7414 with. This also enforces compatibility with the API employed by the TI
7415 C3x C compiler. For example, long doubles are passed as structures
7416 rather than in floating point registers.
7420 Generate code that uses registers (stack) for passing arguments to functions.
7421 By default, arguments are passed in registers where possible rather
7422 than by pushing arguments on to the stack.
7424 @item -mparallel-insns
7425 @itemx -mno-parallel-insns
7426 Allow the generation of parallel instructions. This is enabled by
7429 @item -mparallel-mpy
7430 @itemx -mno-parallel-mpy
7431 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
7432 provided -mparallel-insns is also specified. These instructions have
7433 tight register constraints which can pessimize the code generation
7439 @subsection V850 Options
7440 @cindex V850 Options
7442 These @samp{-m} options are defined for V850 implementations:
7446 @itemx -mno-long-calls
7447 Treat all calls as being far away (near). If calls are assumed to be
7448 far away, the compiler will always load the functions address up into a
7449 register, and call indirect through the pointer.
7453 Do not optimize (do optimize) basic blocks that use the same index
7454 pointer 4 or more times to copy pointer into the @code{ep} register, and
7455 use the shorter @code{sld} and @code{sst} instructions. The @samp{-mep}
7456 option is on by default if you optimize.
7458 @item -mno-prolog-function
7459 @itemx -mprolog-function
7460 Do not use (do use) external functions to save and restore registers at
7461 the prolog and epilog of a function. The external functions are slower,
7462 but use less code space if more than one function saves the same number
7463 of registers. The @samp{-mprolog-function} option is on by default if
7467 Try to make the code as small as possible. At present, this just turns
7468 on the @samp{-mep} and @samp{-mprolog-function} options.
7471 Put static or global variables whose size is @var{n} bytes or less into
7472 the tiny data area that register @code{ep} points to. The tiny data
7473 area can hold up to 256 bytes in total (128 bytes for byte references).
7476 Put static or global variables whose size is @var{n} bytes or less into
7477 the small data area that register @code{gp} points to. The small data
7478 area can hold up to 64 kilobytes.
7481 Put static or global variables whose size is @var{n} bytes or less into
7482 the first 32 kilobytes of memory.
7485 Specify that the target processor is the V850.
7488 Generate code suitable for big switch tables. Use this option only if
7489 the assembler/linker complain about out of range branches within a switch
7494 @subsection ARC Options
7497 These options are defined for ARC implementations:
7501 Compile code for little endian mode. This is the default.
7504 Compile code for big endian mode.
7507 Prepend the name of the cpu to all public symbol names.
7508 In multiple-processor systems, there are many ARC variants with different
7509 instruction and register set characteristics. This flag prevents code
7510 compiled for one cpu to be linked with code compiled for another.
7511 No facility exists for handling variants that are "almost identical".
7512 This is an all or nothing option.
7514 @item -mcpu=@var{cpu}
7515 Compile code for ARC variant @var{cpu}.
7516 Which variants are supported depend on the configuration.
7517 All variants support @samp{-mcpu=base}, this is the default.
7519 @item -mtext=@var{text section}
7520 @itemx -mdata=@var{data section}
7521 @itemx -mrodata=@var{readonly data section}
7522 Put functions, data, and readonly data in @var{text section},
7523 @var{data section}, and @var{readonly data section} respectively
7524 by default. This can be overridden with the @code{section} attribute.
7525 @xref{Variable Attributes}.
7530 @subsection NS32K Options
7531 @cindex NS32K options
7533 These are the @samp{-m} options defined for the 32000 series. The default
7534 values for these options depends on which style of 32000 was selected when
7535 the compiler was configured; the defaults for the most common choices are
7541 Generate output for a 32032. This is the default
7542 when the compiler is configured for 32032 and 32016 based systems.
7546 Generate output for a 32332. This is the default
7547 when the compiler is configured for 32332-based systems.
7551 Generate output for a 32532. This is the default
7552 when the compiler is configured for 32532-based systems.
7555 Generate output containing 32081 instructions for floating point.
7556 This is the default for all systems.
7559 Generate output containing 32381 instructions for floating point. This
7560 also implies @samp{-m32081}. The 32381 is only compatible with the 32332
7561 and 32532 cpus. This is the default for the pc532-netbsd configuration.
7564 Try and generate multiply-add floating point instructions @code{polyF}
7565 and @code{dotF}. This option is only available if the @samp{-m32381}
7566 option is in effect. Using these instructions requires changes to to
7567 register allocation which generally has a negative impact on
7568 performance. This option should only be enabled when compiling code
7569 particularly likely to make heavy use of multiply-add instructions.
7572 Do not try and generate multiply-add floating point instructions
7573 @code{polyF} and @code{dotF}. This is the default on all platforms.
7576 Generate output containing library calls for floating point.
7577 @strong{Warning:} the requisite libraries may not be available.
7580 Do not use the bit-field instructions. On some machines it is faster to
7581 use shifting and masking operations. This is the default for the pc532.
7584 Do use the bit-field instructions. This is the default for all platforms
7588 Use a different function-calling convention, in which functions
7589 that take a fixed number of arguments return pop their
7590 arguments on return with the @code{ret} instruction.
7592 This calling convention is incompatible with the one normally
7593 used on Unix, so you cannot use it if you need to call libraries
7594 compiled with the Unix compiler.
7596 Also, you must provide function prototypes for all functions that
7597 take variable numbers of arguments (including @code{printf});
7598 otherwise incorrect code will be generated for calls to those
7601 In addition, seriously incorrect code will result if you call a
7602 function with too many arguments. (Normally, extra arguments are
7603 harmlessly ignored.)
7605 This option takes its name from the 680x0 @code{rtd} instruction.
7609 Use a different function-calling convention where the first two arguments
7610 are passed in registers.
7612 This calling convention is incompatible with the one normally
7613 used on Unix, so you cannot use it if you need to call libraries
7614 compiled with the Unix compiler.
7617 Do not pass any arguments in registers. This is the default for all
7621 It is OK to use the sb as an index register which is always loaded with
7622 zero. This is the default for the pc532-netbsd target.
7625 The sb register is not available for use or has not been initialized to
7626 zero by the run time system. This is the default for all targets except
7627 the pc532-netbsd. It is also implied whenever @samp{-mhimem} or
7628 @samp{-fpic} is set.
7631 Many ns32000 series addressing modes use displacements of up to 512MB.
7632 If an address is above 512MB then displacements from zero can not be used.
7633 This option causes code to be generated which can be loaded above 512MB.
7634 This may be useful for operating systems or ROM code.
7637 Assume code will be loaded in the first 512MB of virtual address space.
7638 This is the default for all platforms.
7644 @subsection AVR Options
7647 These options are defined for AVR implementations:
7650 @item -mmcu=@var{mcu}
7651 Specify ATMEL AVR instruction set or MCU type.
7653 Instruction set avr1 is for the minimal AVR core, not supported by the C
7654 compiler, only for assembler programs (MCU types: at90s1200, attiny10,
7655 attiny11, attiny12, attiny15, attiny28).
7657 Instruction set avr2 (default) is for the classic AVR core with up to
7658 8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
7659 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
7660 at90c8534, at90s8535).
7662 Instruction set avr3 is for the classic AVR core with up to 128K program
7663 memory space (MCU types: atmega103, atmega603).
7665 Instruction set avr4 is for the enhanced AVR core with up to 8K program
7666 memory space (MCU types: atmega83, atmega85).
7668 Instruction set avr5 is for the enhanced AVR core with up to 128K program
7669 memory space (MCU types: atmega161, atmega163, atmega32, at94k).
7672 Output instruction sizes to the asm file.
7674 @item -minit-stack=@var{N}
7675 Specify the initial stack address, which may be a symbol or numeric value,
7676 __stack is the default.
7678 @item -mno-interrupts
7679 Generated code is not compatible with hardware interrupts.
7680 Code size will be smaller.
7682 @item -mcall-prologues
7683 Functions prologues/epilogues expanded as call to appropriate
7684 subroutines. Code size will be smaller.
7686 @item -mno-tablejump
7687 Do not generate tablejump insns which sometimes increase code size.
7690 Change only the low 8 bits of the stack pointer.
7694 @subsection MCore Options
7695 @cindex MCore options
7697 These are the @samp{-m} options defined for the Motorola M*Core
7705 Inline constants into the code stream if it can be done in two
7706 instructions or less.
7711 Use the divide instruction. (Enabled by default).
7713 @item -mrelax-immediate
7714 @itemx -mrelax-immediate
7715 @itemx -mno-relax-immediate
7716 Allow arbitrary sized immediates in bit operations.
7718 @item -mwide-bitfields
7719 @itemx -mwide-bitfields
7720 @itemx -mno-wide-bitfields
7721 Always treat bitfields as int-sized.
7723 @item -m4byte-functions
7724 @itemx -m4byte-functions
7725 @itemx -mno-4byte-functions
7726 Force all functions to be aligned to a four byte boundary.
7728 @item -mcallgraph-data
7729 @itemx -mcallgraph-data
7730 @itemx -mno-callgraph-data
7731 Emit callgraph information.
7735 @itemx -mno-slow-bytes
7736 Prefer word access when reading byte quantities.
7738 @item -mlittle-endian
7739 @itemx -mlittle-endian
7741 Generate code for a little endian target.
7746 Generate code for the 210 processor.
7750 @subsection IA-64 Options
7751 @cindex IA-64 Options
7753 These are the @samp{-m} options defined for the Intel IA-64 architecture.
7757 Generate code for a big endian target. This is the default for HPUX.
7759 @item -mlittle-endian
7760 Generate code for a little endian target. This is the default for AIX5
7765 Generate (or don't) code for the GNU assembler. This is the default.
7766 @c Also, this is the default if the configure option @samp{--with-gnu-as}
7771 Generate (or don't) code for the GNU linker. This is the default.
7772 @c Also, this is the default if the configure option @samp{--with-gnu-ld}
7776 Generate code that does not use a global pointer register. The result
7777 is not position independent code, and violates the IA-64 ABI.
7779 @item -mvolatile-asm-stop
7780 @itemx -mno-volatile-asm-stop
7781 Generate (or don't) a stop bit immediately before and after volatile asm
7785 Generate code that works around Itanium B step errata.
7787 @item -mregister-names
7788 @itemx -mno-register-names
7789 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
7790 the stacked registers. This may make assembler output more readable.
7794 Disable (or enable) optimizations that use the small data section. This may
7795 be useful for working around optimizer bugs.
7798 Generate code that uses a single constant global pointer value. This is
7799 useful when compiling kernel code.
7802 Generate code that is self-relocatable. This implies @samp{-mconstant-gp}.
7803 This is useful when compiling firmware code.
7805 @item -minline-divide-min-latency
7806 Generate code for inline divides using the minimum latency algorithm.
7808 @item -minline-divide-max-throughput
7809 Generate code for inline divides using the maximum throughput algorithm.
7811 @item -mno-dwarf2-asm
7813 Don't (or do) generate assembler code for the DWARF2 line number debugging
7814 info. This may be useful when not using the GNU assembler.
7816 @item -mfixed-range=@var{register range}
7817 Generate code treating the given register range as fixed registers.
7818 A fixed register is one that the register allocator can not use. This is
7819 useful when compiling kernel code. A register range is specified as
7820 two registers separated by a dash. Multiple register ranges can be
7821 specified separated by a comma.
7825 @subsection D30V Options
7826 @cindex D30V Options
7828 These @samp{-m} options are defined for D30V implementations:
7832 Link the @samp{.text}, @samp{.data}, @samp{.bss}, @samp{.strings},
7833 @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections into external
7834 memory, which starts at location @code{0x80000000}.
7837 Same as the @samp{-mextmem} switch.
7840 Link the @samp{.text} section into onchip text memory, which starts at
7841 location @code{0x0}. Also link @samp{.data}, @samp{.bss},
7842 @samp{.strings}, @samp{.rodata}, @samp{.rodata1}, @samp{.data1} sections
7843 into onchip data memory, which starts at location @code{0x20000000}.
7845 @item -mno-asm-optimize
7846 @itemx -masm-optimize
7847 Disable (enable) passing @samp{-O} to the assembler when optimizing.
7848 The assembler uses the @samp{-O} option to automatically parallelize
7849 adjacent short instructions where possible.
7851 @item -mbranch-cost=@var{n}
7852 Increase the internal costs of branches to @var{n}. Higher costs means
7853 that the compiler will issue more instructions to avoid doing a branch.
7856 @item -mcond-exec=@var{n}
7857 Specify the maximum number of conditionally executed instructions that
7858 replace a branch. The default is 4.
7861 @node Code Gen Options
7862 @section Options for Code Generation Conventions
7863 @cindex code generation conventions
7864 @cindex options, code generation
7865 @cindex run-time options
7867 These machine-independent options control the interface conventions
7868 used in code generation.
7870 Most of them have both positive and negative forms; the negative form
7871 of @samp{-ffoo} would be @samp{-fno-foo}. In the table below, only
7872 one of the forms is listed---the one which is not the default. You
7873 can figure out the other form by either removing @samp{no-} or adding
7878 Enable exception handling. Generates extra code needed to propagate
7879 exceptions. For some targets, this implies GNU CC will generate frame
7880 unwind information for all functions, which can produce significant data
7881 size overhead, although it does not affect execution. If you do not
7882 specify this option, GNU CC will enable it by default for languages like
7883 C++ which normally require exception handling, and disable itfor
7884 languages like C that do not normally require it. However, you may need
7885 to enable this option when compiling C code that needs to interoperate
7886 properly with exception handlers written in C++. You may also wish to
7887 disable this option if you are compiling older C++ programs that don't
7888 use exception handling.
7890 @item -funwind-tables
7891 Similar to @option{-fexceptions}, except that it will just generate any needed
7892 static data, but will not affect the generated code in any other way.
7893 You will normally not enable this option; instead, a language processor
7894 that needs this handling would enable it on your behalf.
7896 @item -fpcc-struct-return
7897 Return ``short'' @code{struct} and @code{union} values in memory like
7898 longer ones, rather than in registers. This convention is less
7899 efficient, but it has the advantage of allowing intercallability between
7900 GCC-compiled files and files compiled with other compilers.
7902 The precise convention for returning structures in memory depends
7903 on the target configuration macros.
7905 Short structures and unions are those whose size and alignment match
7906 that of some integer type.
7908 @item -freg-struct-return
7909 Use the convention that @code{struct} and @code{union} values are
7910 returned in registers when possible. This is more efficient for small
7911 structures than @samp{-fpcc-struct-return}.
7913 If you specify neither @samp{-fpcc-struct-return} nor its contrary
7914 @samp{-freg-struct-return}, GCC defaults to whichever convention is
7915 standard for the target. If there is no standard convention, GCC
7916 defaults to @samp{-fpcc-struct-return}, except on targets where GCC
7917 is the principal compiler. In those cases, we can choose the standard,
7918 and we chose the more efficient register return alternative.
7921 Allocate to an @code{enum} type only as many bytes as it needs for the
7922 declared range of possible values. Specifically, the @code{enum} type
7923 will be equivalent to the smallest integer type which has enough room.
7925 @item -fshort-double
7926 Use the same size for @code{double} as for @code{float}.
7929 Requests that the data and non-@code{const} variables of this
7930 compilation be shared data rather than private data. The distinction
7931 makes sense only on certain operating systems, where shared data is
7932 shared between processes running the same program, while private data
7933 exists in one copy per process.
7936 Allocate even uninitialized global variables in the data section of the
7937 object file, rather than generating them as common blocks. This has the
7938 effect that if the same variable is declared (without @code{extern}) in
7939 two different compilations, you will get an error when you link them.
7940 The only reason this might be useful is if you wish to verify that the
7941 program will work on other systems which always work this way.
7944 Ignore the @samp{#ident} directive.
7946 @item -fno-gnu-linker
7947 Do not output global initializations (such as C++ constructors and
7948 destructors) in the form used by the GNU linker (on systems where the GNU
7949 linker is the standard method of handling them). Use this option when
7950 you want to use a non-GNU linker, which also requires using the
7951 @command{collect2} program to make sure the system linker includes
7952 constructors and destructors. (@command{collect2} is included in the GCC
7953 distribution.) For systems which @emph{must} use @command{collect2}, the
7954 compiler driver @command{gcc} is configured to do this automatically.
7956 @item -finhibit-size-directive
7957 Don't output a @code{.size} assembler directive, or anything else that
7958 would cause trouble if the function is split in the middle, and the
7959 two halves are placed at locations far apart in memory. This option is
7960 used when compiling @file{crtstuff.c}; you should not need to use it
7964 Put extra commentary information in the generated assembly code to
7965 make it more readable. This option is generally only of use to those
7966 who actually need to read the generated assembly code (perhaps while
7967 debugging the compiler itself).
7969 @samp{-fno-verbose-asm}, the default, causes the
7970 extra information to be omitted and is useful when comparing two assembler
7974 Consider all memory references through pointers to be volatile.
7976 @item -fvolatile-global
7977 Consider all memory references to extern and global data items to
7978 be volatile. GCC does not consider static data items to be volatile
7979 because of this switch.
7981 @item -fvolatile-static
7982 Consider all memory references to static data to be volatile.
7985 @cindex global offset table
7987 Generate position-independent code (PIC) suitable for use in a shared
7988 library, if supported for the target machine. Such code accesses all
7989 constant addresses through a global offset table (GOT). The dynamic
7990 loader resolves the GOT entries when the program starts (the dynamic
7991 loader is not part of GCC; it is part of the operating system). If
7992 the GOT size for the linked executable exceeds a machine-specific
7993 maximum size, you get an error message from the linker indicating that
7994 @samp{-fpic} does not work; in that case, recompile with @samp{-fPIC}
7995 instead. (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
7996 on the m68k and RS/6000. The 386 has no such limit.)
7998 Position-independent code requires special support, and therefore works
7999 only on certain machines. For the 386, GCC supports PIC for System V
8000 but not for the Sun 386i. Code generated for the IBM RS/6000 is always
8001 position-independent.
8004 If supported for the target machine, emit position-independent code,
8005 suitable for dynamic linking and avoiding any limit on the size of the
8006 global offset table. This option makes a difference on the m68k, m88k,
8009 Position-independent code requires special support, and therefore works
8010 only on certain machines.
8012 @item -ffixed-@var{reg}
8013 Treat the register named @var{reg} as a fixed register; generated code
8014 should never refer to it (except perhaps as a stack pointer, frame
8015 pointer or in some other fixed role).
8017 @var{reg} must be the name of a register. The register names accepted
8018 are machine-specific and are defined in the @code{REGISTER_NAMES}
8019 macro in the machine description macro file.
8021 This flag does not have a negative form, because it specifies a
8024 @item -fcall-used-@var{reg}
8025 Treat the register named @var{reg} as an allocable register that is
8026 clobbered by function calls. It may be allocated for temporaries or
8027 variables that do not live across a call. Functions compiled this way
8028 will not save and restore the register @var{reg}.
8030 It is an error to used this flag with the frame pointer or stack pointer.
8031 Use of this flag for other registers that have fixed pervasive roles in
8032 the machine's execution model will produce disastrous results.
8034 This flag does not have a negative form, because it specifies a
8037 @item -fcall-saved-@var{reg}
8038 Treat the register named @var{reg} as an allocable register saved by
8039 functions. It may be allocated even for temporaries or variables that
8040 live across a call. Functions compiled this way will save and restore
8041 the register @var{reg} if they use it.
8043 It is an error to used this flag with the frame pointer or stack pointer.
8044 Use of this flag for other registers that have fixed pervasive roles in
8045 the machine's execution model will produce disastrous results.
8047 A different sort of disaster will result from the use of this flag for
8048 a register in which function values may be returned.
8050 This flag does not have a negative form, because it specifies a
8054 Pack all structure members together without holes. Usually you would
8055 not want to use this option, since it makes the code suboptimal, and
8056 the offsets of structure members won't agree with system libraries.
8058 @item -fcheck-memory-usage
8059 Generate extra code to check each memory access. GCC will generate
8060 code that is suitable for a detector of bad memory accesses such as
8063 Normally, you should compile all, or none, of your code with this option.
8065 If you do mix code compiled with and without this option,
8066 you must ensure that all code that has side effects
8067 and that is called by code compiled with this option
8068 is, itself, compiled with this option.
8069 If you do not, you might get erroneous messages from the detector.
8071 If you use functions from a library that have side-effects (such as
8072 @code{read}), you might not be able to recompile the library and
8073 specify this option. In that case, you can enable the
8074 @samp{-fprefix-function-name} option, which requests GCC to encapsulate
8075 your code and make other functions look as if they were compiled with
8076 @samp{-fcheck-memory-usage}. This is done by calling ``stubs'',
8077 which are provided by the detector. If you cannot find or build
8078 stubs for every function you call, you might have to specify
8079 @samp{-fcheck-memory-usage} without @samp{-fprefix-function-name}.
8081 If you specify this option, you can not use the @code{asm} or
8082 @code{__asm__} keywords in functions with memory checking enabled. GNU
8083 CC cannot understand what the @code{asm} statement may do, and therefore
8084 cannot generate the appropriate code, so it will reject it. However, if
8085 you specify the function attribute @code{no_check_memory_usage}
8086 (@pxref{Function Attributes}), GNU CC will disable memory checking within a
8087 function; you may use @code{asm} statements inside such functions. You
8088 may have an inline expansion of a non-checked function within a checked
8089 function; in that case GNU CC will not generate checks for the inlined
8090 function's memory accesses.
8092 If you move your @code{asm} statements to non-checked inline functions
8093 and they do access memory, you can add calls to the support code in your
8094 inline function, to indicate any reads, writes, or copies being done.
8095 These calls would be similar to those done in the stubs described above.
8097 @item -fprefix-function-name
8098 Request GCC to add a prefix to the symbols generated for function names.
8099 GCC adds a prefix to the names of functions defined as well as
8100 functions called. Code compiled with this option and code compiled
8101 without the option can't be linked together, unless stubs are used.
8103 If you compile the following code with @samp{-fprefix-function-name}
8105 extern void bar (int);
8114 GCC will compile the code as if it was written:
8116 extern void prefix_bar (int);
8120 return prefix_bar (a + 5);
8123 This option is designed to be used with @samp{-fcheck-memory-usage}.
8125 @item -finstrument-functions
8126 Generate instrumentation calls for entry and exit to functions. Just
8127 after function entry and just before function exit, the following
8128 profiling functions will be called with the address of the current
8129 function and its call site. (On some platforms,
8130 @code{__builtin_return_address} does not work beyond the current
8131 function, so the call site information may not be available to the
8132 profiling functions otherwise.)
8135 void __cyg_profile_func_enter (void *this_fn, void *call_site);
8136 void __cyg_profile_func_exit (void *this_fn, void *call_site);
8139 The first argument is the address of the start of the current function,
8140 which may be looked up exactly in the symbol table.
8142 This instrumentation is also done for functions expanded inline in other
8143 functions. The profiling calls will indicate where, conceptually, the
8144 inline function is entered and exited. This means that addressable
8145 versions of such functions must be available. If all your uses of a
8146 function are expanded inline, this may mean an additional expansion of
8147 code size. If you use @samp{extern inline} in your C code, an
8148 addressable version of such functions must be provided. (This is
8149 normally the case anyways, but if you get lucky and the optimizer always
8150 expands the functions inline, you might have gotten away without
8151 providing static copies.)
8153 A function may be given the attribute @code{no_instrument_function}, in
8154 which case this instrumentation will not be done. This can be used, for
8155 example, for the profiling functions listed above, high-priority
8156 interrupt routines, and any functions from which the profiling functions
8157 cannot safely be called (perhaps signal handlers, if the profiling
8158 routines generate output or allocate memory).
8161 Generate code to verify that you do not go beyond the boundary of the
8162 stack. You should specify this flag if you are running in an
8163 environment with multiple threads, but only rarely need to specify it in
8164 a single-threaded environment since stack overflow is automatically
8165 detected on nearly all systems if there is only one stack.
8167 Note that this switch does not actually cause checking to be done; the
8168 operating system must do that. The switch causes generation of code
8169 to ensure that the operating system sees the stack being extended.
8171 @item -fstack-limit-register=@var{reg}
8172 @itemx -fstack-limit-symbol=@var{sym}
8173 @itemx -fno-stack-limit
8174 Generate code to ensure that the stack does not grow beyond a certain value,
8175 either the value of a register or the address of a symbol. If the stack
8176 would grow beyond the value, a signal is raised. For most targets,
8177 the signal is raised before the stack overruns the boundary, so
8178 it is possible to catch the signal without taking special precautions.
8180 For instance, if the stack starts at address @samp{0x80000000} and grows
8181 downwards you can use the flags
8182 @samp{-fstack-limit-symbol=__stack_limit}
8183 @samp{-Wl,--defsym,__stack_limit=0x7ffe0000} which will enforce a stack
8186 @cindex aliasing of parameters
8187 @cindex parameters, aliased
8188 @item -fargument-alias
8189 @itemx -fargument-noalias
8190 @itemx -fargument-noalias-global
8191 Specify the possible relationships among parameters and between
8192 parameters and global data.
8194 @samp{-fargument-alias} specifies that arguments (parameters) may
8195 alias each other and may alias global storage.
8196 @samp{-fargument-noalias} specifies that arguments do not alias
8197 each other, but may alias global storage.
8198 @samp{-fargument-noalias-global} specifies that arguments do not
8199 alias each other and do not alias global storage.
8201 Each language will automatically use whatever option is required by
8202 the language standard. You should not need to use these options yourself.
8204 @item -fleading-underscore
8205 This option and its counterpart, -fno-leading-underscore, forcibly
8206 change the way C symbols are represented in the object file. One use
8207 is to help link with legacy assembly code.
8209 Be warned that you should know what you are doing when invoking this
8210 option, and that not all targets provide complete support for it.
8215 @node Environment Variables
8216 @section Environment Variables Affecting GCC
8217 @cindex environment variables
8219 @c man begin ENVIRONMENT
8221 This section describes several environment variables that affect how GCC
8222 operates. Some of them work by specifying directories or prefixes to use
8223 when searching for various kinds of files. Some are used to specify other
8224 aspects of the compilation environment.
8227 Note that you can also specify places to search using options such as
8228 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
8229 take precedence over places specified using environment variables, which
8230 in turn take precedence over those specified by the configuration of GCC.
8234 Note that you can also specify places to search using options such as
8235 @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
8236 take precedence over places specified using environment variables, which
8237 in turn take precedence over those specified by the configuration of GCC.
8244 @c @itemx LC_COLLATE
8246 @c @itemx LC_MONETARY
8247 @c @itemx LC_NUMERIC
8252 @c @findex LC_COLLATE
8254 @c @findex LC_MONETARY
8255 @c @findex LC_NUMERIC
8259 These environment variables control the way that GCC uses
8260 localization information that allow GCC to work with different
8261 national conventions. GCC inspects the locale categories
8262 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
8263 so. These locale categories can be set to any value supported by your
8264 installation. A typical value is @samp{en_UK} for English in the United
8267 The @env{LC_CTYPE} environment variable specifies character
8268 classification. GCC uses it to determine the character boundaries in
8269 a string; this is needed for some multibyte encodings that contain quote
8270 and escape characters that would otherwise be interpreted as a string
8273 The @env{LC_MESSAGES} environment variable specifies the language to
8274 use in diagnostic messages.
8276 If the @env{LC_ALL} environment variable is set, it overrides the value
8277 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
8278 and @env{LC_MESSAGES} default to the value of the @env{LANG}
8279 environment variable. If none of these variables are set, GCC
8280 defaults to traditional C English behavior.
8284 If @env{TMPDIR} is set, it specifies the directory to use for temporary
8285 files. GCC uses temporary files to hold the output of one stage of
8286 compilation which is to be used as input to the next stage: for example,
8287 the output of the preprocessor, which is the input to the compiler
8290 @item GCC_EXEC_PREFIX
8291 @findex GCC_EXEC_PREFIX
8292 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
8293 names of the subprograms executed by the compiler. No slash is added
8294 when this prefix is combined with the name of a subprogram, but you can
8295 specify a prefix that ends with a slash if you wish.
8297 If @env{GCC_EXEC_PREFIX} is not set, GNU CC will attempt to figure out
8298 an appropriate prefix to use based on the pathname it was invoked with.
8300 If GCC cannot find the subprogram using the specified prefix, it
8301 tries looking in the usual places for the subprogram.
8303 The default value of @env{GCC_EXEC_PREFIX} is
8304 @file{@var{prefix}/lib/gcc-lib/} where @var{prefix} is the value
8305 of @code{prefix} when you ran the @file{configure} script.
8307 Other prefixes specified with @samp{-B} take precedence over this prefix.
8309 This prefix is also used for finding files such as @file{crt0.o} that are
8312 In addition, the prefix is used in an unusual way in finding the
8313 directories to search for header files. For each of the standard
8314 directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
8315 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
8316 replacing that beginning with the specified prefix to produce an
8317 alternate directory name. Thus, with @samp{-Bfoo/}, GCC will search
8318 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
8319 These alternate directories are searched first; the standard directories
8323 @findex COMPILER_PATH
8324 The value of @env{COMPILER_PATH} is a colon-separated list of
8325 directories, much like @env{PATH}. GCC tries the directories thus
8326 specified when searching for subprograms, if it can't find the
8327 subprograms using @env{GCC_EXEC_PREFIX}.
8330 @findex LIBRARY_PATH
8331 The value of @env{LIBRARY_PATH} is a colon-separated list of
8332 directories, much like @env{PATH}. When configured as a native compiler,
8333 GCC tries the directories thus specified when searching for special
8334 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}. Linking
8335 using GCC also uses these directories when searching for ordinary
8336 libraries for the @samp{-l} option (but directories specified with
8337 @samp{-L} come first).
8339 @item C_INCLUDE_PATH
8340 @itemx CPLUS_INCLUDE_PATH
8341 @itemx OBJC_INCLUDE_PATH
8342 @findex C_INCLUDE_PATH
8343 @findex CPLUS_INCLUDE_PATH
8344 @findex OBJC_INCLUDE_PATH
8345 @c @itemx OBJCPLUS_INCLUDE_PATH
8346 These environment variables pertain to particular languages. Each
8347 variable's value is a colon-separated list of directories, much like
8348 @env{PATH}. When GCC searches for header files, it tries the
8349 directories listed in the variable for the language you are using, after
8350 the directories specified with @samp{-I} but before the standard header
8353 @item DEPENDENCIES_OUTPUT
8354 @findex DEPENDENCIES_OUTPUT
8355 @cindex dependencies for make as output
8356 If this variable is set, its value specifies how to output dependencies
8357 for Make based on the header files processed by the compiler. This
8358 output looks much like the output from the @samp{-M} option
8359 (@pxref{Preprocessor Options}), but it goes to a separate file, and is
8360 in addition to the usual results of compilation.
8362 The value of @env{DEPENDENCIES_OUTPUT} can be just a file name, in
8363 which case the Make rules are written to that file, guessing the target
8364 name from the source file name. Or the value can have the form
8365 @samp{@var{file} @var{target}}, in which case the rules are written to
8366 file @var{file} using @var{target} as the target name.
8370 @cindex locale definition
8371 This variable is used to pass locale information to the compiler. One way in
8372 which this information is used is to determine the character set to be used
8373 when character literals, string literals and comments are parsed in C and C++.
8374 When the compiler is configured to allow multibyte characters,
8375 the following values for @env{LANG} are recognized:
8379 Recognize JIS characters.
8381 Recognize SJIS characters.
8383 Recognize EUCJP characters.
8386 If @env{LANG} is not defined, or if it has some other value, then the
8387 compiler will use mblen and mbtowc as defined by the default locale to
8388 recognize and translate multibyte characters.
8393 @node Running Protoize
8394 @section Running Protoize
8396 The program @code{protoize} is an optional part of GNU C. You can use
8397 it to add prototypes to a program, thus converting the program to ISO
8398 C in one respect. The companion program @code{unprotoize} does the
8399 reverse: it removes argument types from any prototypes that are found.
8401 When you run these programs, you must specify a set of source files as
8402 command line arguments. The conversion programs start out by compiling
8403 these files to see what functions they define. The information gathered
8404 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
8406 After scanning comes actual conversion. The specified files are all
8407 eligible to be converted; any files they include (whether sources or
8408 just headers) are eligible as well.
8410 But not all the eligible files are converted. By default,
8411 @code{protoize} and @code{unprotoize} convert only source and header
8412 files in the current directory. You can specify additional directories
8413 whose files should be converted with the @samp{-d @var{directory}}
8414 option. You can also specify particular files to exclude with the
8415 @samp{-x @var{file}} option. A file is converted if it is eligible, its
8416 directory name matches one of the specified directory names, and its
8417 name within the directory has not been excluded.
8419 Basic conversion with @code{protoize} consists of rewriting most
8420 function definitions and function declarations to specify the types of
8421 the arguments. The only ones not rewritten are those for varargs
8424 @code{protoize} optionally inserts prototype declarations at the
8425 beginning of the source file, to make them available for any calls that
8426 precede the function's definition. Or it can insert prototype
8427 declarations with block scope in the blocks where undeclared functions
8430 Basic conversion with @code{unprotoize} consists of rewriting most
8431 function declarations to remove any argument types, and rewriting
8432 function definitions to the old-style pre-ISO form.
8434 Both conversion programs print a warning for any function declaration or
8435 definition that they can't convert. You can suppress these warnings
8438 The output from @code{protoize} or @code{unprotoize} replaces the
8439 original source file. The original file is renamed to a name ending
8440 with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
8441 without the original @samp{.c} suffix). If the @samp{.save} (@samp{.sav}
8442 for DOS) file already exists, then the source file is simply discarded.
8444 @code{protoize} and @code{unprotoize} both depend on GCC itself to
8445 scan the program and collect information about the functions it uses.
8446 So neither of these programs will work until GCC is installed.
8448 Here is a table of the options you can use with @code{protoize} and
8449 @code{unprotoize}. Each option works with both programs unless
8453 @item -B @var{directory}
8454 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
8455 usual directory (normally @file{/usr/local/lib}). This file contains
8456 prototype information about standard system functions. This option
8457 applies only to @code{protoize}.
8459 @item -c @var{compilation-options}
8460 Use @var{compilation-options} as the options when running @code{gcc} to
8461 produce the @samp{.X} files. The special option @samp{-aux-info} is
8462 always passed in addition, to tell @code{gcc} to write a @samp{.X} file.
8464 Note that the compilation options must be given as a single argument to
8465 @code{protoize} or @code{unprotoize}. If you want to specify several
8466 @code{gcc} options, you must quote the entire set of compilation options
8467 to make them a single word in the shell.
8469 There are certain @code{gcc} arguments that you cannot use, because they
8470 would produce the wrong kind of output. These include @samp{-g},
8471 @samp{-O}, @samp{-c}, @samp{-S}, and @samp{-o} If you include these in
8472 the @var{compilation-options}, they are ignored.
8475 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
8476 systems) instead of @samp{.c}. This is convenient if you are converting
8477 a C program to C++. This option applies only to @code{protoize}.
8480 Add explicit global declarations. This means inserting explicit
8481 declarations at the beginning of each source file for each function
8482 that is called in the file and was not declared. These declarations
8483 precede the first function definition that contains a call to an
8484 undeclared function. This option applies only to @code{protoize}.
8486 @item -i @var{string}
8487 Indent old-style parameter declarations with the string @var{string}.
8488 This option applies only to @code{protoize}.
8490 @code{unprotoize} converts prototyped function definitions to old-style
8491 function definitions, where the arguments are declared between the
8492 argument list and the initial @samp{@{}. By default, @code{unprotoize}
8493 uses five spaces as the indentation. If you want to indent with just
8494 one space instead, use @samp{-i " "}.
8497 Keep the @samp{.X} files. Normally, they are deleted after conversion
8501 Add explicit local declarations. @code{protoize} with @samp{-l} inserts
8502 a prototype declaration for each function in each block which calls the
8503 function without any declaration. This option applies only to
8507 Make no real changes. This mode just prints information about the conversions
8508 that would have been done without @samp{-n}.
8511 Make no @samp{.save} files. The original files are simply deleted.
8512 Use this option with caution.
8514 @item -p @var{program}
8515 Use the program @var{program} as the compiler. Normally, the name
8519 Work quietly. Most warnings are suppressed.
8522 Print the version number, just like @samp{-v} for @code{gcc}.
8525 If you need special compiler options to compile one of your program's
8526 source files, then you should generate that file's @samp{.X} file
8527 specially, by running @code{gcc} on that source file with the
8528 appropriate options and the option @samp{-aux-info}. Then run
8529 @code{protoize} on the entire set of files. @code{protoize} will use
8530 the existing @samp{.X} file because it is newer than the source file.
8534 gcc -Dfoo=bar file1.c -aux-info
8539 You need to include the special files along with the rest in the
8540 @code{protoize} command, even though their @samp{.X} files already
8541 exist, because otherwise they won't get converted.
8543 @xref{Protoize Caveats}, for more information on how to use
8544 @code{protoize} successfully.