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