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