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