|
|
1.1 root 1: @c Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
2: @c This is part of the GCC manual.
3: @c For copying conditions, see the file gcc.texi.
4:
1.1.1.3 root 5: @node Invoking GCC
1.1 root 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 grouping options
23: @cindex options, grouping
1.1.1.4 ! root 24: The @code{gcc} program accepts options and file names as operands. Many
! 25: options have multiletter names; therefore multiple single-letter options
! 26: may @emph{not} be grouped: @samp{-dr} is very different from @w{@samp{-d
! 27: -r}}.
1.1 root 28:
29: @cindex order of options
30: @cindex options, order
31: You can mix options and other arguments. For the most part, the order
1.1.1.4 ! root 32: you use doesn't matter. Order does matter when you use several options
! 33: of the same kind; for example, if you specify @samp{-L} more than once,
! 34: the directories are searched in the order specified.
1.1 root 35:
36: Many options have long names starting with @samp{-f} or with
37: @samp{-W}---for example, @samp{-fforce-mem},
38: @samp{-fstrength-reduce}, @samp{-Wformat} and so on. Most of
39: these have both positive and negative forms; the negative form of
40: @samp{-ffoo} would be @samp{-fno-foo}. This manual documents
41: only one of these two forms, whichever one is not the default.
42:
1.1.1.4 ! root 43: @menu
! 44: * Option Summary:: Brief list of all options, without explanations.
! 45: * Overall Options:: Controlling the kind of output:
! 46: an executable, object files, assembler files,
! 47: or preprocessed source.
! 48: * Dialect Options:: Controlling the variant of C language compiled.
! 49: * Warning Options:: How picky should the compiler be?
! 50: * Debugging Options:: Symbol tables, measurements, and debugging dumps.
! 51: * Optimize Options:: How much optimization?
! 52: * Preprocessor Options:: Controlling header files and macro definitions.
! 53: Also, getting dependency information for Make.
! 54: * Assembler Options:: Passing options to the assembler.
! 55: * Link Options:: Specifying libraries and so on.
! 56: * Directory Options:: Where to find header files and libraries.
! 57: Where to find the compiler executable files.
! 58: * Target Options:: Running a cross-compiler, or an old version of GNU CC.
! 59: * Submodel Options:: Specifying minor hardware or convention variations,
! 60: such as 68010 vs 68020.
! 61: * Code Gen Options:: Specifying conventions for function calls, data layout
! 62: and register usage.
! 63: * Environment Variables:: Env vars that affect GNU CC.
! 64: * Running Protoize:: Automatically adding or removing function prototypes.
! 65: @end menu
! 66:
! 67: @node Option Summary
! 68: @section Option Summary
! 69:
1.1 root 70: Here is a summary of all the options, grouped by type. Explanations are
71: in the following sections.
72:
73: @table @emph
74: @item Overall Options
75: @xref{Overall Options,,Options Controlling the Kind of Output}.
76: @example
77: -c -S -E -o @var{file} -pipe -v -x @var{language}
78: @end example
79:
80: @item Language Options
81: @xref{Dialect Options,,Options Controlling Dialect}.
82: @example
1.1.1.4 ! root 83: -ansi -fcond-mismatch -fno-asm -fno-builtin
1.1 root 84: -fsigned-bitfields -fsigned-char
85: -funsigned-bitfields -funsigned-char -fwritable-strings
86: -traditional -traditional-cpp -trigraphs
1.1.1.4 ! root 87: -fall-virtual -fdollars-in-identifiers -fenum-int-equiv
! 88: -fno-strict-prototype -fthis-is-variable
1.1 root 89: @end example
90:
91: @item Warning Options
92: @xref{Warning Options,,Options to Request or Suppress Warnings}.
93: @example
94: -fsyntax-only -pedantic -pedantic-errors
95: -w -W -Wall -Waggregate-return
96: -Wcast-align -Wcast-qual -Wcomment -Wconversion -Werror
1.1.1.4 ! root 97: -Wformat -Wid-clash-@var{len} -Wenum-clash -Wimplicit -Wimport
! 98: -Winline -Wmissing-prototypes -Wnested-externs -Wparentheses
! 99: -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow
1.1 root 100: -Wstrict-prototypes -Wswitch -Wtraditional -Wtrigraphs
101: -Wuninitialized -Wunused -Wwrite-strings -Wchar-subscripts
102: @end example
103:
104: @item Debugging Options
105: @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
106: @example
107: -a -d@var{letters} -fpretend-float
1.1.1.4 ! root 108: -g -g@var{level} -ggdb -gdwarf -gdwarf+
! 109: -gstabs -gstabs+ -gcoff -gxcoff -gxcoff+
1.1 root 110: -p -pg -save-temps
111: @end example
112:
113: @item Optimization Options
114: @xref{Optimize Options,,Options that Control Optimization}.
115: @example
1.1.1.3 root 116: -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
117: -fdelayed-branch -fexpensive-optimizations -ffast-math
1.1.1.4 ! root 118: -ffloat-store -fforce-addr -fforce-mem
! 119: -finline-functions -fkeep-inline-functions -fno-defer-pop
! 120: -fno-function-cse -fno-inline -fno-peephole -fomit-frame-pointer
1.1 root 121: -frerun-cse-after-loop -fschedule-insns -fschedule-insns2
122: -fstrength-reduce -fthread-jumps
1.1.1.3 root 123: -funroll-all-loops -funroll-loops
1.1.1.4 ! root 124: -felide-constructors -fmemoize-lookups -fno-default-inline
1.1 root 125: -O -O2
126: @end example
127:
128: @item Preprocessor Options
129: @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
130: @example
1.1.1.4 ! root 131: -A@var{assertion} -C -dD -dM -dN
1.1 root 132: -D@var{macro}@r{[}=@var{defn}@r{]} -E -H
133: -include @var{file} -imacros @var{file}
134: -M -MD -MM -MMD -nostdinc -P -trigraphs -U@var{macro}
135: @end example
136:
1.1.1.4 ! root 137: @item Assembler Option
! 138: @xref{Assembler Options,,Passing Options to the Assembler}.
! 139: @example
! 140: -Wa,@var{option}
! 141: @end example
! 142:
1.1 root 143: @item Linker Options
144: @xref{Link Options,,Options for Linking}.
145: @example
146: @var{object-file-name}
1.1.1.4 ! root 147: -l@var{library} -nostdlib
! 148: -static -shared -symbolic
! 149: -Xlinker @var{option}
! 150: -u @var{symbol}
1.1 root 151: @end example
152:
153: @item Directory Options
154: @xref{Directory Options,,Options for Directory Search}.
155: @example
156: -B@var{prefix} -I@var{dir} -I- -L@var{dir}
157: @end example
158:
159: @item Target Options
160: @xref{Target Options,,Target Machine and Compiler Version}.
161: @example
162: -b @var{machine} -V @var{version}
163: @end example
164:
165: @item Machine Dependent Options
166: @xref{Submodel Options,,Hardware Models and Configurations}.
167: @example
168: @emph{M680x0 Options}
1.1.1.4 ! root 169: -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881 -mbitfield
! 170: -mc68000 -mc68020 -mfpa -mnobitfield -mrtd -mshort -msoft-float
1.1 root 171:
172: @emph{VAX Options}
173: -mg -mgnu -munix
174:
175: @emph{SPARC Options}
1.1.1.4 ! root 176: -mforce-align -mno-epilogue
! 177: @c -mfpu turned off below w/@ignore for some reason.
1.1 root 178:
179: @emph{Convex Options}
180: -margcount -mc1 -mc2 -mnoargcount
181:
182: @emph{AMD29K Options}
183: -m29000 -m29050 -mbw -mdw -mkernel-registers -mlarge
184: -mnbw -mnodw -msmall -mstack-check -muser-registers
185:
186: @emph{M88K Options}
187: -m88000 -m88100 -m88110 -mbig-pic -mcheck-zero-division
188: -mhandle-large-shift -midentify-revision
189: -mno-check-zero-division -mno-ocs-debug-info
190: -mno-ocs-frame-position -mno-optimize-arg-area -mno-underscores
191: -mocs-debug-info -mocs-frame-position -moptimize-arg-area
192: -mshort-data-@var{num} -msvr3 -msvr4 -mtrap-large-shift
193: -muse-div-instruction -mversion-03.00 -mwarn-passed-structs
194:
195: @emph{RS/6000 Options}
196: -mfp-in-toc -mno-fop-in-toc
197:
198: @emph{RT Options}
199: -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
200: -mfull-fp-blocks -mhc-struct-return -min-line-mul
201: -mminimum-fp-blocks -mnohc-struct-return
202:
203: @emph{MIPS Options}
204: -mcpu=@var{cpu type} -mips2 -mips3 -mint64 -mlong64 -mlonglong128
205: -mmips-as -mgas -mrnames -mno-rnames -mgpopt -mno-gpopt -mstats
206: -mno-stats -mmemcpy -mno-memcpy -mno-mips-tfile -mmips-tfile
207: -msoft-float -mhard-float -mabicalls -mno-abicalls -mhalf-pic
1.1.1.2 root 208: -mno-half-pic -G @var{num} -nocpp
209:
210: @emph{i386 Options}
1.1.1.4 ! root 211: -m486 -mno-486 -msoft-float -msvr3-shlib -mieee-fp
! 212: -mno-fp-ret-in-387
! 213:
! 214: @emph{HPPA Options}
! 215: -mno-bss
! 216: -mpa-risc-1-0
! 217: -mpa-risc-1-1
! 218: -mkernel
! 219: -mshared-libs
! 220: -mno-shared-libs
! 221: -mlong-calls
! 222:
! 223: @emph{Intel 960 Options}
! 224: -m@var{cpu type}
! 225: -mnumerics -msoft-float
! 226: -mcode-align -mno-code-align
! 227: -mleaf-procedures -mno-leaf-procedures
! 228: -mtail-call -mno-tail-call
! 229: -mcomplex-addr -mno-complex-addr
! 230: -mclean-linkage -mno-clean-linkage
! 231: -mic-compat -mic2.0-compat -mic3.0-compat
! 232: -masm-compat -mintel-asm
! 233: -mstrict-align -mno-strict-align
! 234: -mold-align -mno-old-align
! 235:
! 236: @emph{DEC Alpha Options}
! 237: -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
! 238:
! 239: @emph{System V Options}
! 240: -G -Qy -Qn -YP,@var{paths} -Ym,@var{dir}
1.1 root 241: @end example
242:
243: @item Code Generation Options
244: @xref{Code Gen Options,,Options for Code Generation Conventions}.
245: @example
246: -fcall-saved-@var{reg} -fcall-used-@var{reg} -ffixed-@var{reg}
1.1.1.4 ! root 247: -finhibit-size-directive -fnonnull-objects -fno-common
! 248: -fno-ident -fno-gnu-linker -fpcc-struct-return -fpic -fPIC
! 249: -fshared-data -fshort-enums -fshort-double -fvolatile
! 250: -fverbose-asm
1.1 root 251: @end example
252: @end table
253:
254: @menu
255: * Overall Options:: Controlling the kind of output:
256: an executable, object files, assembler files,
257: or preprocessed source.
258: * Dialect Options:: Controlling the variant of C language compiled.
259: * Warning Options:: How picky should the compiler be?
260: * Debugging Options:: Symbol tables, measurements, and debugging dumps.
261: * Optimize Options:: How much optimization?
262: * Preprocessor Options:: Controlling header files and macro definitions.
263: Also, getting dependency information for Make.
1.1.1.4 ! root 264: * Assembler Options:: Passing options to the assembler.
1.1 root 265: * Link Options:: Specifying libraries and so on.
266: * Directory Options:: Where to find header files and libraries.
267: Where to find the compiler executable files.
268: * Target Options:: Running a cross-compiler, or an old version of GNU CC.
269: @end menu
270:
1.1.1.4 ! root 271: @node Overall Options
1.1 root 272: @section Options Controlling the Kind of Output
273:
274: Compilation can involve up to four stages: preprocessing, compilation
275: proper, assembly and linking, always in that order. The first three
276: stages apply to an individual source file, and end by producing an
277: object file; linking combines all the object files (those newly
278: compiled, and those specified as input) into an executable file.
279:
280: @cindex file name suffix
281: For any given input file, the file name suffix determines what kind of
282: compilation is done:
283:
284: @table @code
285: @item @var{file}.c
286: C source code which must be preprocessed.
287:
288: @item @var{file}.i
289: C source code which should not be preprocessed.
290:
1.1.1.4 ! root 291: @item @var{file}.ii
! 292: C++ source code which should not be preprocessed.
! 293:
1.1 root 294: @item @var{file}.m
1.1.1.4 ! root 295: Objective-C source code. Note that you must link with the library
! 296: @file{libobjc.a} to make an Objective-C program work.
1.1 root 297:
298: @item @var{file}.h
299: C header file (not to be compiled or linked).
300:
301: @item @var{file}.cc
302: @itemx @var{file}.cxx
303: @itemx @var{file}.C
304: C++ source code which must be preprocessed.
305:
306: @item @var{file}.s
307: Assembler code.
308:
309: @item @var{file}.S
310: Assembler code which must be preprocessed.
311:
312: @item @var{other}
313: An object file to be fed straight into linking.
314: Any file name with no recognized suffix is treated this way.
315: @end table
316:
317: You can specify the input language explicitly with the @samp{-x} option:
318:
319: @table @code
320: @item -x @var{language}
321: Specify explicitly the @var{language} for the following input files
322: (rather than choosing a default based on the file name suffix).
323: This option applies to all following input files until
324: the next @samp{-x} option. Possible values of @var{language} are
325: @samp{c}, @samp{objective-c}, @samp{c-header}, @samp{c++},
326: @samp{cpp-output}, @samp{assembler}, and @samp{assembler-with-cpp}.
327:
328: @item -x none
329: Turn off any specification of a language, so that subsequent files are
330: handled according to their file name suffixes (as they are if @samp{-x}
331: has not been used at all).
332: @end table
333:
334: If you only want some of the stages of compilation, you can use
335: @samp{-x} (or filename suffixes) to tell @code{gcc} where to start, and
336: one of the options @samp{-c}, @samp{-S}, or @samp{-E} to say where
337: @code{gcc} is to stop. Note that some combinations (for example,
338: @samp{-x cpp-output -E} instruct @code{gcc} to do nothing at all.
339:
340: @table @code
341: @item -c
342: Compile or assemble the source files, but do not link. The linking
343: stage simply is not done. The ultimate output is in the form of an
344: object file for each source file.
345:
346: By default, the object file name for a source file is made by replacing
347: the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
348:
349: Unrecognized input files, not requiring compilation or assembly, are
350: ignored.
351:
352: @item -S
353: Stop after the stage of compilation proper; do not assemble. The output
354: is in the form of an assembler code file for each non-assembler input
355: file specified.
356:
357: By default, the assembler file name for a source file is made by
358: replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
359:
360: Input files that don't require compilation are ignored.
361:
362: @item -E
363: Stop after the preprocessing stage; do not run the compiler proper. The
364: output is in the form of preprocessed source code, which is sent to the
365: standard output.
366:
367: Input files which don't require preprocessing are ignored.
368:
369: @cindex output file option
370: @item -o @var{file}
371: Place output in file @var{file}. This applies regardless to whatever
372: sort of output is being produced, whether it be an executable file,
373: an object file, an assembler file or preprocessed C code.
374:
375: Since only one output file can be specified, it does not make sense to
376: use @samp{-o} when compiling more than one input file, unless you are
377: producing an executable file as output.
378:
379: If @samp{-o} is not specified, the default is to put an executable file
380: in @file{a.out}, the object file for @file{@var{source}.@var{suffix}} in
381: @file{@var{source}.o}, its assembler file in @file{@var{source}.s}, and
382: all preprocessed C source on standard output.@refill
383:
384: @item -v
385: Print (on standard error output) the commands executed to run the stages
386: of compilation. Also print the version number of the compiler driver
387: program and of the preprocessor and the compiler proper.
388:
389: @item -pipe
390: Use pipes rather than temporary files for communication between the
391: various stages of compilation. This fails to work on some systems where
392: the assembler is unable to read from a pipe; but the GNU assembler has
393: no trouble.
394: @end table
395:
1.1.1.4 ! root 396: @node Dialect Options
1.1 root 397: @section Options Controlling Dialect
398: @cindex dialect options
399: @cindex language dialect options
400: @cindex options, dialect
401:
1.1.1.4 ! root 402: The following options control the dialect of C or C++ that the compiler
1.1 root 403: accepts:
404:
405: @table @code
406: @cindex ANSI support
407: @item -ansi
408: Support all ANSI standard C programs.
409:
410: This turns off certain features of GNU C that are incompatible with ANSI
411: C, such as the @code{asm}, @code{inline} and @code{typeof} keywords, and
412: predefined macros such as @code{unix} and @code{vax} that identify the
413: type of system you are using. It also enables the undesirable and
414: rarely used ANSI trigraph feature, and disallows @samp{$} as part of
415: identifiers.
416:
417: The alternate keywords @code{__asm__}, @code{__extension__},
418: @code{__inline__} and @code{__typeof__} continue to work despite
419: @samp{-ansi}. You would not want to use them in an ANSI C program, of
420: course, but it useful to put them in header files that might be included
421: in compilations done with @samp{-ansi}. Alternate predefined macros
422: such as @code{__unix__} and @code{__vax__} are also available, with or
423: without @samp{-ansi}.
424:
425: The @samp{-ansi} option does not cause non-ANSI programs to be
426: rejected gratuitously. For that, @samp{-pedantic} is required in
427: addition to @samp{-ansi}. @xref{Warning Options}.
428:
429: The macro @code{__STRICT_ANSI__} is predefined when the @samp{-ansi}
430: option is used. Some header files may notice this macro and refrain
431: from declaring certain functions or defining certain macros that the
432: ANSI standard doesn't call for; this is to avoid interfering with any
433: programs that might use these names for other things.
434:
1.1.1.3 root 435: The functions @code{alloca}, @code{abort}, @code{exit}, and
436: @code{_exit} are not builtin functions when @samp{-ansi} is used.
437:
1.1.1.4 ! root 438: @item -fall-virtual
! 439: Treat certain member functions as virtual, implicitly (C++ only). This
! 440: applies to all member functions declared in the same class with a
! 441: ``method-call'' operator method (except for constructor functions and
! 442: @code{new} or @code{delete} member operators). In effect, all of these
! 443: methods become ``implicitly virtual.''
! 444:
! 445: This does not mean that all calls to these methods will be made through
! 446: the internal table of virtual functions. There are some circumstances
! 447: under which it is obvious that a call to a given virtual function can be
! 448: made directly, and in these cases the calls still go direct.
! 449:
! 450: The effect of making all methods of a class with a declared
! 451: @samp{operator->()()} implicitly virtual using @samp{-fall-virtual}
! 452: extends also to all non-constructor methods of any class derived from
! 453: such a class.
! 454:
! 455: @item -fdollars-in-identifiers
! 456: Permit the use of @samp{$} in identifiers (C++ only). You can also use
! 457: @samp{-fno-dollars-in-identifiers} to explicitly prohibit use of
! 458: @samp{$}. (GNU C++ allows @samp{$} by default on some target systems
! 459: but not others.)
! 460:
! 461: @item -fenum-int-equiv
! 462: Permit implicit conversion of @code{int} to enumeration types (C++
! 463: only). Normally GNU C++ allows conversion of @code{enum} to @code{int},
! 464: but not the other way around.
! 465:
1.1 root 466: @item -fno-asm
467: Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
468: keyword. These words may then be used as identifiers. You can
469: use @code{__asm__}, @code{__inline__} and @code{__typeof__} instead.
470: @samp{-ansi} implies @samp{-fno-asm}.
471:
472: @item -fno-builtin
1.1.1.3 root 473: Don't recognize built-in functions that do not begin with two leading
1.1.1.4 ! root 474: underscores. Currently, the functions affected include @code{_exit},
! 475: @code{abort}, @code{abs}, @code{alloca}, @code{cos}, @code{exit},
! 476: @code{fabs}, @code{labs}, @code{memcmp}, @code{memcpy}, @code{sin},
! 477: @code{sqrt}, @code{strcmp}, @code{strcpy}, and @code{strlen}.
1.1.1.3 root 478:
479: The @samp{-ansi} option prevents @code{alloca} and @code{_exit} from
480: being builtin functions.
1.1 root 481:
1.1.1.4 ! root 482: @item -fno-strict-prototype
! 483: Treat a function declaration with no arguments, such as @samp{int foo
! 484: ();}, as C would treat it---as saying nothing about the number of
! 485: arguments or their types (C++ only). Normally, such a declaration in
! 486: C++ means that the function @code{foo} takes no arguments.
! 487:
! 488: @item -fthis-is-variable
! 489: Permit assignment to @code{this} (C++ only). The incorporation of
! 490: user-defined free store management into C++ has made assignment to
! 491: @samp{this} an anachronism. Therefore, by default it is invalid to
! 492: assign to @code{this} within a class member function. However, for
! 493: backwards compatibility, you can make it valid with
! 494: @samp{-fthis-is-variable}.
! 495:
1.1 root 496: @item -trigraphs
497: Support ANSI C trigraphs. You don't want to know about this
498: brain-damage. The @samp{-ansi} option implies @samp{-trigraphs}.
499:
500: @cindex traditional C language
501: @cindex C language, traditional
502: @item -traditional
503: Attempt to support some aspects of traditional C compilers.
504: Specifically:
505:
506: @itemize @bullet
507: @item
508: All @code{extern} declarations take effect globally even if they
509: are written inside of a function definition. This includes implicit
510: declarations of functions.
511:
512: @item
513: The keywords @code{typeof}, @code{inline}, @code{signed}, @code{const}
514: and @code{volatile} are not recognized. (You can still use the
515: alternative keywords such as @code{__typeof__}, @code{__inline__}, and
516: so on.)
517:
518: @item
519: Comparisons between pointers and integers are always allowed.
520:
521: @item
522: Integer types @code{unsigned short} and @code{unsigned char} promote
523: to @code{unsigned int}.
524:
525: @item
526: Out-of-range floating point literals are not an error.
527:
528: @item
529: String ``constants'' are not necessarily constant; they are stored in
530: writable space, and identical looking constants are allocated
531: separately. (This is the same as the effect of
532: @samp{-fwritable-strings}.)
533:
534: @cindex @code{longjmp} and automatic variables
535: @item
536: All automatic variables not declared @code{register} are preserved by
537: @code{longjmp}. Ordinarily, GNU C follows ANSI C: automatic variables
538: not declared @code{volatile} may be clobbered.
539:
540: @item
541: In the preprocessor, comments convert to nothing at all, rather than
542: to a space. This allows traditional token concatenation.
543:
544: @item
545: In the preprocessor, macro arguments are recognized within string
546: constants in a macro definition (and their values are stringified,
547: though without additional quote marks, when they appear in such a
548: context). The preprocessor always considers a string constant to end
549: at a newline.
550:
551: @item
552: The predefined macro @code{__STDC__} is not defined when you use
553: @samp{-traditional}, but @code{__GNUC__} is (since the GNU extensions
554: which @code{__GNUC__} indicates are not affected by
555: @samp{-traditional}). If you need to write header files that work
556: differently depending on whether @samp{-traditional} is in use, by
557: testing both of these predefined macros you can distinguish four
558: situations: GNU C, traditional GNU C, other ANSI C compilers, and
559: other old C compilers.
560: @end itemize
561:
1.1.1.3 root 562: You may wish to use @samp{-fno-builtin} as well as @samp{-traditional}
563: if your program uses names that are normally GNU C builtin functions for
564: other purposes of its own.
565:
1.1 root 566: @item -traditional-cpp
567: Attempt to support some aspects of traditional C preprocessors.
568: This includes the last three items in the table immediately above,
569: but none of the other effects of @samp{-traditional}.
570:
571: @item -fcond-mismatch
572: Allow conditional expressions with mismatched types in the second and
573: third arguments. The value of such an expression is void.
574:
575: @item -funsigned-char
576: Let the type @code{char} be unsigned, like @code{unsigned char}.
577:
578: Each kind of machine has a default for what @code{char} should
579: be. It is either like @code{unsigned char} by default or like
580: @code{signed char} by default.
581:
582: Ideally, a portable program should always use @code{signed char} or
583: @code{unsigned char} when it depends on the signedness of an object.
584: But many programs have been written to use plain @code{char} and
585: expect it to be signed, or expect it to be unsigned, depending on the
586: machines they were written for. This option, and its inverse, let you
587: make such a program work with the opposite default.
588:
589: The type @code{char} is always a distinct type from each of
590: @code{signed char} or @code{unsigned char}, even though its behavior
591: is always just like one of those two.
592:
593: @item -fsigned-char
594: Let the type @code{char} be signed, like @code{signed char}.
595:
596: Note that this is equivalent to @samp{-fno-unsigned-char}, which is
597: the negative form of @samp{-funsigned-char}. Likewise,
598: @samp{-fno-signed-char} is equivalent to @samp{-funsigned-char}.
599:
600: @item -fsigned-bitfields
601: @itemx -funsigned-bitfields
602: @itemx -fno-signed-bitfields
603: @itemx -fno-unsigned-bitfields
604: These options control whether a bitfield is signed or unsigned, when the
605: declaration does not use either @code{signed} or @code{unsigned}. By
606: default, such a bitfield is signed, because this is consistent: the
607: basic integer types such as @code{int} are signed types.
608:
609: However, when @samp{-traditional} is used, bitfields are all unsigned
610: no matter what.
611:
612: @item -fwritable-strings
613: Store string constants in the writable data segment and don't uniquize
614: them. This is for compatibility with old programs which assume they
615: can write into string constants. @samp{-traditional} also has this
616: effect.
617:
618: Writing into string constants is a very bad idea; ``constants'' should
619: be constant.
620: @end table
621:
1.1.1.4 ! root 622: @node Warning Options
1.1 root 623: @section Options to Request or Suppress Warnings
624: @cindex options to control warnings
625: @cindex warning messages
626: @cindex messages, warning
627: @cindex suppressing warnings
628:
629: Warnings are diagnostic messages that report constructions which
630: are not inherently erroneous but which are risky or suggest there
631: may have been an error.
632:
633: You can request many specific warnings with options beginning @samp{-W},
634: for example @samp{-Wimplicit} to request warnings on implicit
635: declarations. Each of these specific warning options also has a
636: negative form beginning @samp{-Wno-} to turn off warnings;
637: for example, @samp{-Wno-implicit}. This manual lists only one of the
638: two forms, whichever is not the default.
639:
640: These options control the amount and kinds of warnings produced by GNU
641: CC:
642:
643: @table @code
644: @cindex syntax checking
645: @item -fsyntax-only
646: Check the code for syntax errors, but don't emit any output.
647:
648: @item -w
649: Inhibit all warning messages.
650:
1.1.1.4 ! root 651: @item -Wno-import
1.1.1.2 root 652: Inhibit warning messages about the use of @samp{#import}.
653:
1.1 root 654: @item -pedantic
655: Issue all the warnings demanded by strict ANSI standard C; reject
656: all programs that use forbidden extensions.
657:
658: Valid ANSI standard C programs should compile properly with or without
659: this option (though a rare few will require @samp{-ansi}). However,
660: without this option, certain GNU extensions and traditional C features
661: are supported as well. With this option, they are rejected.
662:
663: @samp{-pedantic} does not cause warning messages for use of the
664: alternate keywords whose names begin and end with @samp{__}. Pedantic
665: warnings are also disabled in the expression that follows
666: @code{__extension__}. However, only system header files should use
667: these escape routes; application programs should avoid them.
668: @xref{Alternate Keywords}.
669:
670: This option is not intended to be @i{useful}; it exists only to satisfy
671: pedants who would otherwise claim that GNU CC fails to support the ANSI
672: standard.
673:
674: Some users try to use @samp{-pedantic} to check programs for strict ANSI
675: C conformance. They soon find that it does not do quite what they want:
676: it finds some non-ANSI practices, but not all---only those for which
677: ANSI C @emph{requires} a diagnostic.
678:
679: A feature to report any failure to conform to ANSI C might be useful in
680: some instances, but would require considerable additional work and would
681: be quite different from @samp{-pedantic}. We recommend, rather, that
682: users take advantage of the extensions of GNU C and disregard the
683: limitations of other compilers. Aside from certain supercomputers and
684: obsolete small machines, there is less and less reason ever to use any
685: other C compiler other than for bootstrapping GNU CC.
686:
687: @item -pedantic-errors
688: Like @samp{-pedantic}, except that errors are produced rather than
689: warnings.
690:
691: @item -W
692: Print extra warning messages for these events:
693:
694: @itemize @bullet
695: @cindex @code{longjmp} warnings
696: @item
697: A nonvolatile automatic variable might be changed by a call to
698: @code{longjmp}. These warnings as well are possible only in
699: optimizing compilation.
700:
701: The compiler sees only the calls to @code{setjmp}. It cannot know
702: where @code{longjmp} will be called; in fact, a signal handler could
703: call it at any point in the code. As a result, you may get a warning
704: even when there is in fact no problem because @code{longjmp} cannot
705: in fact be called at the place which would cause a problem.
706:
707: @item
708: A function can return either with or without a value. (Falling
709: off the end of the function body is considered returning without
710: a value.) For example, this function would evoke such a
711: warning:
712:
713: @example
714: foo (a)
715: @{
716: if (a > 0)
717: return a;
718: @}
719: @end example
720:
721: @item
722: An expression-statement contains no side effects.
723:
724: @item
725: An unsigned value is compared against zero with @samp{>} or @samp{<=}.
1.1.1.4 ! root 726:
! 727: @item
! 728: A comparison like @samp{x<=y<=z} appears; this is equivalent to
! 729: @samp{(x<=y ? 1 : 0) <= z}, which is a different interpretation from
! 730: that of ordinary mathematical notation.
! 731:
! 732: @item
! 733: Storage-class specifiers like @code{static} are not the first things in
! 734: a declaration. According to the C Standard, this usage is obsolescent.
! 735:
! 736: @item
! 737: An aggregate has a partly bracketed initializer.
! 738: For example, the following code would evoke such a warning,
! 739: because braces are missing around the initializer for @code{x.h}:
! 740:
! 741: @example
! 742: struct s @{ int f, g; @};
! 743: struct t @{ struct s h; int i; @};
! 744: struct t x = @{ 1, 2, 3 @};
! 745: @end example
1.1 root 746: @end itemize
747:
1.1.1.4 ! root 748: @item -Wenum-clash
! 749: Warn about conversion between different enumeration types (C++ only).
! 750:
1.1 root 751: @item -Wimplicit
752: Warn whenever a function or parameter is implicitly declared.
753:
754: @item -Wreturn-type
755: Warn whenever a function is defined with a return-type that defaults
756: to @code{int}. Also warn about any @code{return} statement with no
757: return-value in a function whose return-type is not @code{void}.
758:
759: @item -Wunused
760: Warn whenever a local variable is unused aside from its declaration,
761: whenever a function is declared static but never defined, and whenever
762: a statement computes a result that is explicitly not used.
763:
1.1.1.4 ! root 764: If you want to prevent a warning for a particular variable, you can use
! 765: this macro:
! 766:
! 767: @example
! 768: #define USE(var) \
! 769: static void * use_##var = (&use_##var, (void *) &var)
! 770:
! 771: USE (string);
! 772: @end example
! 773:
1.1 root 774: @item -Wswitch
775: Warn whenever a @code{switch} statement has an index of enumeral type
776: and lacks a @code{case} for one or more of the named codes of that
777: enumeration. (The presence of a @code{default} label prevents this
778: warning.) @code{case} labels outside the enumeration range also
779: provoke warnings when this option is used.
780:
781: @item -Wcomment
782: Warn whenever a comment-start sequence @samp{/*} appears in a comment.
783:
784: @item -Wtrigraphs
785: Warn if any trigraphs are encountered (assuming they are enabled).
786:
787: @item -Wformat
788: Check calls to @code{printf} and @code{scanf}, etc., to make sure that
789: the arguments supplied have types appropriate to the format string
790: specified.
791:
792: @item -Wchar-subscripts
793: Warn if an array subscript has type @code{char}. This is a common cause
794: of error, as programmers often forget that this type is signed on some
795: machines.
796:
797: @item -Wuninitialized
798: An automatic variable is used without first being initialized.
799:
800: These warnings are possible only in optimizing compilation,
801: because they require data flow information that is computed only
802: when optimizing. If you don't specify @samp{-O}, you simply won't
803: get these warnings.
804:
805: These warnings occur only for variables that are candidates for
806: register allocation. Therefore, they do not occur for a variable that
807: is declared @code{volatile}, or whose address is taken, or whose size
808: is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
809: structures, unions or arrays, even when they are in registers.
810:
811: Note that there may be no warning about a variable that is used only
812: to compute a value that itself is never used, because such
813: computations may be deleted by data flow analysis before the warnings
814: are printed.
815:
816: These warnings are made optional because GNU CC is not smart
817: enough to see all the reasons why the code might be correct
818: despite appearing to have an error. Here is one example of how
819: this can happen:
820:
821: @example
822: @{
823: int x;
824: switch (y)
825: @{
826: case 1: x = 1;
827: break;
828: case 2: x = 4;
829: break;
830: case 3: x = 5;
831: @}
832: foo (x);
833: @}
834: @end example
835:
836: @noindent
837: If the value of @code{y} is always 1, 2 or 3, then @code{x} is
838: always initialized, but GNU CC doesn't know this. Here is
839: another common case:
840:
841: @example
842: @{
843: int save_y;
844: if (change_y) save_y = y, y = new_y;
845: @dots{}
846: if (change_y) y = save_y;
847: @}
848: @end example
849:
850: @noindent
851: This has no bug because @code{save_y} is used only if it is set.
852:
853: Some spurious warnings can be avoided if you declare as
854: @code{volatile} all the functions you use that never return.
855: @xref{Function Attributes}.
856:
1.1.1.2 root 857: @item -Wparentheses
858: Warn if parentheses are omitted in certain contexts.
859:
1.1 root 860: @item -Wall
861: All of the above @samp{-W} options combined. These are all the
862: options which pertain to usage that we recommend avoiding and that we
863: believe is easy to avoid, even in conjunction with macros.
864: @end table
865:
866: The remaining @samp{-W@dots{}} options are not implied by @samp{-Wall}
867: because they warn about constructions that we consider reasonable to
868: use, on occasion, in clean programs.
869:
870: @table @code
871: @item -Wtraditional
872: Warn about certain constructs that behave differently in traditional and
873: ANSI C.
874:
875: @itemize @bullet
876: @item
877: Macro arguments occurring within string constants in the macro body.
878: These would substitute the argument in traditional C, but are part of
879: the constant in ANSI C.
880:
881: @item
882: A function declared external in one block and then used after the end of
883: the block.
884:
885: @item
886: A @code{switch} statement has an operand of type @code{long}.
887: @end itemize
888:
889: @item -Wshadow
890: Warn whenever a local variable shadows another local variable.
891:
892: @item -Wid-clash-@var{len}
893: Warn whenever two distinct identifiers match in the first @var{len}
894: characters. This may help you prepare a program that will compile
895: with certain obsolete, brain-damaged compilers.
896:
897: @item -Wpointer-arith
898: Warn about anything that depends on the ``size of'' a function type or
899: of @code{void}. GNU C assigns these types a size of 1, for
900: convenience in calculations with @code{void *} pointers and pointers
901: to functions.
902:
903: @item -Wcast-qual
904: Warn whenever a pointer is cast so as to remove a type qualifier from
905: the target type. For example, warn if a @code{const char *} is cast
906: to an ordinary @code{char *}.
907:
908: @item -Wcast-align
909: Warn whenever a pointer is cast such that the required alignment of the
910: target is increased. For example, warn if a @code{char *} is cast to
911: an @code{int *} on machines where integers can only be accessed at
912: two- or four-byte boundaries.
913:
914: @item -Wwrite-strings
915: Give string constants the type @code{const char[@var{length}]} so that
916: copying the address of one into a non-@code{const} @code{char *}
917: pointer will get a warning. These warnings will help you find at
918: compile time code that can try to write into a string constant, but
919: only if you have been very careful about using @code{const} in
920: declarations and prototypes. Otherwise, it will just be a nuisance;
921: this is why we did not make @samp{-Wall} request these warnings.
922:
923: @item -Wconversion
924: Warn if a prototype causes a type conversion that is different from what
925: would happen to the same argument in the absence of a prototype. This
926: includes conversions of fixed point to floating and vice versa, and
927: conversions changing the width or signedness of a fixed point argument
928: except when the same as the default promotion.
929:
930: @item -Waggregate-return
931: Warn if any functions that return structures or unions are defined or
932: called. (In languages where you can return an array, this also elicits
933: a warning.)
934:
935: @item -Wstrict-prototypes
936: Warn if a function is declared or defined without specifying the
937: argument types. (An old-style function definition is permitted without
938: a warning if preceded by a declaration which specifies the argument
939: types.)
940:
941: @item -Wmissing-prototypes
942: Warn if a global function is defined without a previous prototype
943: declaration. This warning is issued even if the definition itself
944: provides a prototype. The aim is to detect global functions that fail
945: to be declared in header files.
946:
947: @item -Wredundant-decls
948: Warn if anything is declared more than once in the same scope, even in
949: cases where multiple declaration is valid and changes nothing.
950:
951: @item -Wnested-externs
952: Warn if an @code{extern} declaration is encountered within an function.
953:
1.1.1.2 root 954: @item -Winline
955: Warn if a function can not be inlined, and either it was declared as inline,
956: or else the @samp{-finline-functions} option was given.
1.1 root 957:
958: @item -Werror
959: Make all warnings into errors.
960: @end table
961:
1.1.1.4 ! root 962: @node Debugging Options
1.1 root 963: @section Options for Debugging Your Program or GNU CC
964: @cindex options, debugging
965: @cindex debugging information options
966:
967: GNU CC has various special options that are used for debugging
968: either your program or GCC:
969:
970: @table @code
971: @item -g
972: Produce debugging information in the operating system's native format
1.1.1.2 root 973: (stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
974: information.
1.1 root 975:
976: On most systems that use stabs format, @samp{-g} enables use of extra
977: debugging information that only GDB can use; this extra information
1.1.1.4 ! root 978: makes debugging work better in GDB but will probably make other debuggers
! 979: crash or
1.1 root 980: refuse to read the program. If you want to control for certain whether
1.1.1.4 ! root 981: to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
! 982: @samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf+}, or @samp{-gdwarf}
1.1 root 983: (see below).
984:
985: Unlike most other C compilers, GNU CC allows you to use @samp{-g} with
986: @samp{-O}. The shortcuts taken by optimized code may occasionally
987: produce surprising results: some variables you declared may not exist
988: at all; flow of control may briefly move where you did not expect it;
989: some statements may not be executed because they compute constant
990: results or their values were already at hand; some statements may
991: execute in different places because they were moved out of loops.
992:
993: Nevertheless it proves possible to debug optimized output. This makes
994: it reasonable to use the optimizer for programs that might have bugs.
995:
996: The following options are useful when GNU CC is generated with the
997: capability for more than one debugging format.
998:
999: @item -ggdb
1000: Produce debugging information in the native format (if that is supported),
1001: including GDB extensions if at all possible.
1002:
1003: @item -gstabs
1004: Produce debugging information in stabs format (if that is supported),
1005: without GDB extensions. This is the format used by DBX on most BSD
1006: systems.
1007:
1008: @item -gstabs+
1009: Produce debugging information in stabs format (if that is supported),
1.1.1.4 ! root 1010: using GNU extensions understood only by the GNU debugger (GDB). The
! 1011: use of these extensions is likely to make other debuggers crash or
! 1012: refuse to read the program.
1.1 root 1013:
1014: @item -gcoff
1015: Produce debugging information in COFF format (if that is supported).
1.1.1.4 ! root 1016: This is the format used by SDB on most System V systems prior to
! 1017: System V Release 4.
1.1 root 1018:
1.1.1.2 root 1019: @item -gxcoff
1020: Produce debugging information in XCOFF format (if that is supported).
1.1.1.4 ! root 1021: This is the format used by the DBX debugger on IBM RS/6000 systems.
! 1022:
! 1023: @item -gxcoff+
! 1024: Produce debugging information in XCOFF format (if that is supported),
! 1025: using GNU extensions understood only by the GNU debugger (GDB). The
! 1026: use of these extensions is likely to make other debuggers crash or
! 1027: refuse to read the program.
1.1.1.2 root 1028:
1.1 root 1029: @item -gdwarf
1030: Produce debugging information in DWARF format (if that is supported).
1.1.1.4 ! root 1031: This is the format used by SDB on most System V Release 4 systems.
! 1032:
! 1033: @item -gdwarf+
! 1034: Produce debugging information in DWARF format (if that is supported),
! 1035: using GNU extensions understood only by the GNU debugger (GDB). The
! 1036: use of these extensions is likely to make other debuggers crash or
! 1037: refuse to read the program.
1.1 root 1038:
1039: @item -g@var{level}
1040: @itemx -ggdb@var{level}
1041: @itemx -gstabs@var{level}
1042: @itemx -gcoff@var{level}
1.1.1.2 root 1043: @itemx -gxcoff@var{level}
1.1 root 1044: @itemx -gdwarf@var{level}
1045: Request debugging information and also use @var{level} to specify how
1046: much information. The default level is 2.
1047:
1048: Level 1 produces minimal information, enough for making backtraces in
1049: parts of the program that you don't plan to debug. This includes
1050: descriptions of functions and external variables, but no information
1051: about local variables and no line numbers.
1052:
1053: Level 3 includes extra information, such as all the macro definitions
1054: present in the program. Some debuggers support macro expansion when
1055: you use @samp{-g3}.
1056:
1057: @cindex @code{prof}
1058: @item -p
1059: Generate extra code to write profile information suitable for the
1060: analysis program @code{prof}.
1061:
1062: @cindex @code{gprof}
1063: @item -pg
1064: Generate extra code to write profile information suitable for the
1065: analysis program @code{gprof}.
1066:
1067: @cindex @code{tcov}
1068: @item -a
1069: Generate extra code to write profile information for basic blocks,
1070: which will record the number of times each basic block is executed.
1071: This data could be analyzed by a program like @code{tcov}. Note,
1072: however, that the format of the data is not what @code{tcov} expects.
1073: Eventually GNU @code{gprof} should be extended to process this data.
1074:
1075: @item -d@var{letters}
1076: Says to make debugging dumps during compilation at times specified by
1077: @var{letters}. This is used for debugging the compiler. The file names
1078: for most of the dumps are made by appending a word to the source file
1079: name (e.g. @file{foo.c.rtl} or @file{foo.c.jump}). Here are the
1080: possible letters for use in @var{letters}, and their meanings:
1081:
1082: @table @samp
1083: @item M
1084: Dump all macro definitions, at the end of preprocessing, and write no
1085: output.
1086: @item N
1087: Dump all macro names, at the end of preprocessing.
1088: @item D
1089: Dump all macro definitions, at the end of preprocessing, in addition to
1090: normal output.
1091: @item y
1092: Dump debugging information during parsing, to standard error.
1093: @item r
1094: Dump after RTL generation, to @file{@var{file}.rtl}.
1095: @item x
1096: Just generate RTL for a function instead of compiling it. Usually used
1097: with @samp{r}.
1098: @item j
1099: Dump after first jump optimization, to @file{@var{file}.jump}.
1100: @item s
1101: Dump after CSE (including the jump optimization that sometimes
1102: follows CSE), to @file{@var{file}.cse}.
1103: @item L
1104: Dump after loop optimization, to @file{@var{file}.loop}.
1105: @item t
1106: Dump after the second CSE pass (including the jump optimization that
1107: sometimes follows CSE), to @file{@var{file}.cse2}.
1108: @item f
1109: Dump after flow analysis, to @file{@var{file}.flow}.
1110: @item c
1111: Dump after instruction combination, to @file{@var{file}.combine}.
1112: @item S
1113: Dump after the first instruction scheduling pass, to
1114: @file{@var{file}.sched}.
1115: @item l
1.1.1.4 ! root 1116: Dump after local register allocation, to@*
! 1117: @file{@var{file}.lreg}.
1.1 root 1118: @item g
1.1.1.4 ! root 1119: Dump after global register allocation, to@*
! 1120: @file{@var{file}.greg}.
1.1 root 1121: @item R
1122: Dump after the second instruction scheduling pass, to
1123: @file{@var{file}.sched2}.
1124: @item J
1125: Dump after last jump optimization, to @file{@var{file}.jump2}.
1126: @item d
1127: Dump after delayed branch scheduling, to @file{@var{file}.dbr}.
1128: @item k
1129: Dump after conversion from registers to stack, to @file{@var{file}.stack}.
1130: @item a
1131: Produce all the dumps listed above.
1132: @item m
1133: Print statistics on memory usage, at the end of the run, to
1134: standard error.
1135: @item p
1136: Annotate the assembler output with a comment indicating which
1137: pattern and alternative was used.
1138: @end table
1139:
1140: @item -fpretend-float
1141: When running a cross-compiler, pretend that the target machine uses the
1142: same floating point format as the host machine. This causes incorrect
1143: output of the actual floating constants, but the actual instruction
1144: sequence will probably be the same as GNU CC would make when running on
1145: the target machine.
1146:
1147: @item -save-temps
1148: Store the usual ``temporary'' intermediate files permanently; place them
1149: in the current directory and name them based on the source file. Thus,
1150: compiling @file{foo.c} with @samp{-c -save-temps} would produce files
1.1.1.2 root 1151: @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.
1.1 root 1152: @end table
1153:
1.1.1.4 ! root 1154: @node Optimize Options
1.1 root 1155: @section Options That Control Optimization
1156: @cindex optimize options
1157: @cindex options, optimization
1158:
1159: These options control various sorts of optimizations:
1160:
1161: @table @code
1162: @item -O
1.1.1.4 ! root 1163: @itemx -O1
1.1 root 1164: Optimize. Optimizing compilation takes somewhat more time, and a lot
1165: more memory for a large function.
1166:
1167: Without @samp{-O}, the compiler's goal is to reduce the cost of
1168: compilation and to make debugging produce the expected results.
1169: Statements are independent: if you stop the program with a breakpoint
1170: between statements, you can then assign a new value to any variable or
1171: change the program counter to any other statement in the function and
1172: get exactly the results you would expect from the source code.
1173:
1174: Without @samp{-O}, only variables declared @code{register} are
1175: allocated in registers. The resulting compiled code is a little worse
1176: than produced by PCC without @samp{-O}.
1177:
1178: With @samp{-O}, the compiler tries to reduce code size and execution
1179: time.
1180:
1181: When @samp{-O} is specified, @samp{-fthread-jumps} and
1182: @samp{-fdelayed-branch} are turned on. On some machines other
1183: flags may also be turned on.
1184:
1185: @item -O2
1.1.1.2 root 1186: Optimize even more. Nearly all supported optimizations that do not
1187: involve a space-speed tradeoff are performed. As compared to @samp{-O},
1188: this option increases both compilation time and the performance of the
1.1 root 1189: generated code.
1190:
1.1.1.2 root 1191: @samp{-O2} turns on all @samp{-f@var{flag}} options that enable more
1192: optimization, except for @samp{-funroll-loops},
1193: @samp{-funroll-all-loops} and @samp{-fomit-frame-pointer}.
1.1.1.4 ! root 1194:
! 1195: @item -O0
! 1196: Do not optimize.
! 1197:
! 1198: If you use multiple @samp{-O} options, with or without level numbers,
! 1199: the last such option is the one that is effective.
1.1 root 1200: @end table
1201:
1202: Options of the form @samp{-f@var{flag}} specify machine-independent
1203: flags. Most flags have both positive and negative forms; the negative
1204: form of @samp{-ffoo} would be @samp{-fno-foo}. In the table below,
1205: only one of the forms is listed---the one which is not the default.
1206: You can figure out the other form by either removing @samp{no-} or
1207: adding it.
1208:
1209: @table @code
1210: @item -ffloat-store
1.1.1.4 ! root 1211: Do not store floating point variables in registers, and inhibit other
! 1212: options that might change whether a floating point value is taken from a
! 1213: register or memory.
! 1214:
! 1215: This option prevents undesirable excess precision on machines such as
! 1216: the 68000 where the floating registers (of the 68881) keep more
! 1217: precision than a @code{double} is supposed to have. For most programs,
! 1218: the excess precision does only good, but a few programs rely on the
! 1219: precise definition of IEEE floating point. Use @samp{-ffloat-store} for
! 1220: such programs.
1.1 root 1221:
1222: @item -fno-defer-pop
1223: Always pop the arguments to each function call as soon as that function
1224: returns. For machines which must pop arguments after a function call,
1225: the compiler normally lets arguments accumulate on the stack for several
1226: function calls and pops them all at once.
1227:
1228: @item -fforce-mem
1229: Force memory operands to be copied into registers before doing
1230: arithmetic on them. This may produce better code by making all
1231: memory references potential common subexpressions. When they are
1232: not common subexpressions, instruction combination should
1233: eliminate the separate register-load. I am interested in hearing
1234: about the difference this makes.
1235:
1236: @item -fforce-addr
1237: Force memory address constants to be copied into registers before
1238: doing arithmetic on them. This may produce better code just as
1239: @samp{-fforce-mem} may. I am interested in hearing about the
1240: difference this makes.
1241:
1242: @item -fomit-frame-pointer
1243: Don't keep the frame pointer in a register for functions that
1244: don't need one. This avoids the instructions to save, set up and
1245: restore frame pointers; it also makes an extra register available
1246: in many functions. @strong{It also makes debugging impossible on
1247: some machines.}
1248:
1249: @ifset INTERNALS
1250: On some machines, such as the Vax, this flag has no effect, because
1251: the standard calling sequence automatically handles the frame pointer
1252: and nothing is saved by pretending it doesn't exist. The
1253: machine-description macro @code{FRAME_POINTER_REQUIRED} controls
1254: whether a target machine supports this flag. @xref{Registers}.@refill
1255: @end ifset
1256: @ifclear INTERNALS
1257: On some machines, such as the Vax, this flag has no effect, because
1258: the standard calling sequence automatically handles the frame pointer
1259: and nothing is saved by pretending it doesn't exist. The
1260: machine-description macro @code{FRAME_POINTER_REQUIRED} controls
1261: whether a target machine supports this flag. @xref{Registers,,Register
1262: Usage, gcc.info, Using and Porting GCC}.@refill
1263: @end ifclear
1264:
1.1.1.3 root 1265: @item -fno-inline
1266: Don't pay attention to the @code{inline} keyword. Normally this option
1267: is used to keep the compiler from expanding any functions inline.
1.1.1.4 ! root 1268: Note that if you are not optimizing, no functions can be expanded inline.
! 1269:
1.1 root 1270: @item -finline-functions
1271: Integrate all simple functions into their callers. The compiler
1272: heuristically decides which functions are simple enough to be worth
1273: integrating in this way.
1274:
1275: If all calls to a given function are integrated, and the function is
1276: declared @code{static}, then the function is normally not output as
1277: assembler code in its own right.
1278:
1279: @item -fkeep-inline-functions
1280: Even if all calls to a given function are integrated, and the function
1281: is declared @code{static}, nevertheless output a separate run-time
1282: callable version of the function.
1283:
1.1.1.4 ! root 1284: @item -fno-default-inline
! 1285: Don't make member functions inline by default merely because they are
! 1286: defined inside the class scope (C++ only).
! 1287:
1.1 root 1288: @item -fno-function-cse
1289: Do not put function addresses in registers; make each instruction that
1290: calls a constant function contain the function's address explicitly.
1291:
1292: This option results in less efficient code, but some strange hacks
1293: that alter the assembler output may be confused by the optimizations
1294: performed when this option is not used.
1.1.1.3 root 1295:
1296: @item -ffast-math
1297: This option allows GCC to violate some ANSI or IEEE rules/specifications
1298: in the interest of optimizing code for speed. For example, it allows
1299: the compiler to assume arguments to the @code{sqrt} function are
1300: non-negative numbers.
1301:
1302: This option should never be turned on by any @samp{-O} option since
1303: it can result in incorrect output for programs which depend on
1304: an exact implementation of IEEE or ANSI rules/specifications for
1305: math functions.
1.1 root 1306:
1.1.1.4 ! root 1307: @item -felide-constructors
! 1308: Elide constructors when this seems plausible (C++ only). With this
! 1309: option, GNU C++ initializes @code{y} directly from the call to @code{foo}
! 1310: without going through a temporary in the following code:
! 1311:
! 1312: @example
! 1313: A foo ();
! 1314: A y = foo ();
! 1315: @end example
! 1316:
! 1317: Without this option, GNU C++ first initializes @code{y} by calling the
! 1318: appropriate constructor for type @code{A}; then assigns the result of
! 1319: @code{foo} to a temporary; and, finally, replaces the initial value of
! 1320: @code{y} with the temporary.
! 1321:
! 1322: The default behavior (@samp{-fno-elide-constructors}) is specified by
! 1323: the draft ANSI C++ standard. If your program's constructors have side
! 1324: effects, @samp{-felide-constructors} can change your program's behavior,
! 1325: since some constructor calls may be omitted.
! 1326:
! 1327: @item -fmemoize-lookups
! 1328: @itemx -fsave-memoized
! 1329: Use heuristics to compile faster (C++ only). These heuristics are not
! 1330: enabled by default, since they are only effective for certain input
! 1331: files. Other input files compile more slowly.
! 1332:
! 1333: The first time the compiler must build a call to a member function (or
! 1334: reference to a data member), it must (1) determine whether the class
! 1335: implements member functions of that name; (2) resolve which member
! 1336: function to call (which involves figuring out what sorts of type
! 1337: conversions need to be made); and (3) check the visibility of the member
! 1338: function to the caller. All of this adds up to slower compilation.
! 1339: Normally, the second time a call is made to that member function (or
! 1340: reference to that data member), it must go through the same lengthy
! 1341: process again. This means that code like this
! 1342:
! 1343: @example
! 1344: cout << "This " << p << " has " << n << " legs.\n";
! 1345: @end example
1.1.1.3 root 1346:
1.1.1.4 ! root 1347: @noindent
! 1348: makes six passes through all three steps. By using a software cache, a
! 1349: ``hit'' significantly reduces this cost. Unfortunately, using the cache
! 1350: introduces another layer of mechanisms which must be implemented, and so
! 1351: incurs its own overhead. `-fmemoize-lookups' enables the software
! 1352: cache.
! 1353:
! 1354: Because access privileges (visibility) to members and member functions
! 1355: may differ from one function context to the next, G++ may need to flush
! 1356: the cache. With the @samp{-fmemoize-lookups} flag, the cache is flushed
! 1357: after every function that is compiled. The @samp{-fsave-memoized} flag
! 1358: enables the same software cache, but when the compiler determines that
! 1359: the context of the last function compiled would yield the same access
! 1360: privileges of the next function to compile, it preserves the cache.
! 1361: This is most helpful when defining many member functions for the same
! 1362: class: with the exception of member functions which are friends of other
! 1363: classes, each member function has exactly the same access privileges as
! 1364: every other, and the cache need not be flushed.
! 1365: @end table
1.1.1.3 root 1366:
1.1 root 1367: The following options control specific optimizations. The @samp{-O2}
1368: option turns on all of these optimizations except @samp{-funroll-loops}
1369: and @samp{-funroll-all-loops}. The @samp{-O} option usually turns on
1370: the @samp{-fthread-jumps} and @samp{-fdelayed-branch} options, but
1371: specific machines may change the default optimizations.
1372:
1373: You can use the following flags in the rare cases when ``fine-tuning''
1374: of optimizations to be performed is desired.
1375:
1376: @table @code
1377: @item -fstrength-reduce
1378: Perform the optimizations of loop strength reduction and
1379: elimination of iteration variables.
1380:
1381: @item -fthread-jumps
1382: Perform optimizations where we check to see if a jump branches to a
1383: location where another comparison subsumed by the first is found. If
1384: so, the first branch is redirected to either the destination of the
1385: second branch or a point immediately following it, depending on whether
1386: the condition is known to be true or false.
1387:
1388: @item -fcse-follow-jumps
1.1.1.3 root 1389: In common subexpression elimination, scan through jump instructions
1390: when the target of the jump is not reached by any other path. For
1391: example, when CSE encounters an @code{if} statement with an
1392: @code{else} clause, CSE will follow the jump when the condition
1393: tested is false.
1394:
1395: @item -fcse-skip-blocks
1396: This is similar to @samp{-fcse-follow-jumps}, but causes CSE to
1397: follow jumps which conditionally skip over blocks. When CSE
1398: encounters a simple @code{if} statement with no else clause,
1399: @samp{-fcse-skip-blocks} causes CSE to follow the jump around the
1400: body of the @code{if}.
1.1 root 1401:
1402: @item -frerun-cse-after-loop
1403: Re-run common subexpression elimination after loop optimizations has been
1404: performed.
1405:
1406: @item -fexpensive-optimizations
1407: Perform a number of minor optimizations that are relatively expensive.
1408:
1409: @item -fdelayed-branch
1410: If supported for the target machine, attempt to reorder instructions
1411: to exploit instruction slots available after delayed branch
1412: instructions.
1413:
1414: @item -fschedule-insns
1415: If supported for the target machine, attempt to reorder instructions to
1416: eliminate execution stalls due to required data being unavailable. This
1417: helps machines that have slow floating point or memory load instructions
1418: by allowing other instructions to be issued until the result of the load
1419: or floating point instruction is required.
1420:
1421: @item -fschedule-insns2
1422: Similar to @samp{-fschedule-insns}, but requests an additional pass of
1423: instruction scheduling after register allocation has been done. This is
1424: especially useful on machines with a relatively small number of
1425: registers and where memory load instructions take more than one cycle.
1426:
1.1.1.3 root 1427: @item -fcaller-saves
1428: Enable values to be allocated in registers that will be clobbered by
1429: function calls, by emitting extra instructions to save and restore the
1430: registers around such calls. Such allocation is done only when it
1431: seems to result in better code than would otherwise be produced.
1432:
1433: This option is enabled by default on certain machines, usually those
1434: which have no call-preserved registers to use instead.
1435:
1.1 root 1436: @item -funroll-loops
1437: Perform the optimization of loop unrolling. This is only done for loops
1438: whose number of iterations can be determined at compile time or run time.
1439: @samp{-funroll-loop} implies @samp{-fstrength-reduce} and
1440: @samp{-frerun-cse-after-loop}.
1441:
1442: @item -funroll-all-loops
1443: Perform the optimization of loop unrolling. This is done for all loops
1444: and usually makes programs run more slowly. @samp{-funroll-all-loops}
1445: implies @samp{-fstrength-reduce} and @samp{-frerun-cse-after-loop}.
1446:
1447: @item -fno-peephole
1448: Disable any machine-specific peephole optimizations.
1449: @end table
1450:
1.1.1.4 ! root 1451: @node Preprocessor Options
1.1 root 1452: @section Options Controlling the Preprocessor
1453: @cindex preprocessor options
1454: @cindex options, preprocessor
1455:
1456: These options control the C preprocessor, which is run on each C source
1457: file before actual compilation.
1458:
1459: If you use the @samp{-E} option, nothing is done except preprocessing.
1460: Some of these options make sense only together with @samp{-E} because
1461: they cause the preprocessor output to be unsuitable for actual
1462: compilation.
1463:
1464: @table @code
1465: @item -include @var{file}
1466: Process @var{file} as input before processing the regular input file.
1467: In effect, the contents of @var{file} are compiled first. Any @samp{-D}
1468: and @samp{-U} options on the command line are always processed before
1469: @samp{-include @var{file}}, regardless of the order in which they are
1470: written. All the @samp{-include} and @samp{-imacros} options are
1471: processed in the order in which they are written.
1472:
1473: @item -imacros @var{file}
1474: Process @var{file} as input, discarding the resulting output, before
1475: processing the regular input file. Because the output generated from
1476: @var{file} is discarded, the only effect of @samp{-imacros @var{file}}
1477: is to make the macros defined in @var{file} available for use in the
1478: main input.
1479:
1480: Any @samp{-D} and @samp{-U} options on the command line are always
1481: processed before @samp{-imacros @var{file}}, regardless of the order in
1482: which they are written. All the @samp{-include} and @samp{-imacros}
1483: options are processed in the order in which they are written.
1484:
1485: @item -nostdinc
1486: Do not search the standard system directories for header files. Only
1487: the directories you have specified with @samp{-I} options (and the
1488: current directory, if appropriate) are searched. @xref{Directory
1489: Options}, for information on @samp{-I}.
1490:
1491: By using both @samp{-nostdinc} and @samp{-I-}, you can limit the include-file
1492: search path to only those directories you specify explicitly.
1493:
1.1.1.3 root 1494: @item -nostdinc++
1495: Do not search for header files in the C++-specific standard directories,
1496: but do still search the other standard directories.
1497: (This option is used when building @samp{libg++}.)
1498:
1.1 root 1499: @item -undef
1500: Do not predefine any nonstandard macros. (Including architecture flags).
1501:
1502: @item -E
1503: Run only the C preprocessor. Preprocess all the C source files
1504: specified and output the results to standard output or to the
1505: specified output file.
1506:
1507: @item -C
1508: Tell the preprocessor not to discard comments. Used with the
1509: @samp{-E} option.
1510:
1511: @item -P
1512: Tell the preprocessor not to generate @samp{#line} commands.
1513: Used with the @samp{-E} option.
1514:
1515: @cindex make
1516: @cindex dependencies, make
1517: @item -M
1518: Tell the preprocessor to output a rule suitable for @code{make}
1519: describing the dependencies of each object file. For each source file,
1520: the preprocessor outputs one @code{make}-rule whose target is the object
1521: file name for that source file and whose dependencies are all the files
1522: @samp{#include}d in it. This rule may be a single line or may be
1523: continued with @samp{\}-newline if it is long. The list of rules is
1524: printed on standard output instead of the preprocessed C program.
1525:
1526: @samp{-M} implies @samp{-E}.
1527:
1528: Another way to specify output of a @code{make} rule is by setting
1529: the environment variable @code{DEPENDENCIES_OUTPUT} (@pxref{Environment
1530: Variables}).
1531:
1532: @item -MM
1533: Like @samp{-M} but the output mentions only the user header files
1534: included with @samp{#include "@var{file}"}. System header files
1535: included with @samp{#include <@var{file}>} are omitted.
1536:
1537: @item -MD
1538: Like @samp{-M} but the dependency information is written to files with
1.1.1.4 ! root 1539: names made by replacing @samp{.o} with @samp{.d} at the end of the
! 1540: output file names. This is in addition to compiling the input files as
1.1 root 1541: specified---@samp{-MD} does not inhibit ordinary compilation the way
1542: @samp{-M} does.
1543:
1544: The Mach utility @samp{md} can be used to merge the @samp{.d} files
1545: into a single dependency file suitable for using with the @samp{make}
1546: command.
1547:
1548: @item -MMD
1549: Like @samp{-MD} except mention only user header files, not system
1550: header files.
1551:
1552: @item -H
1553: Print the name of each header file used, in addition to other normal
1554: activities.
1555:
1.1.1.4 ! root 1556: @item -A@var{question}(@var{answer})
! 1557: Assert the answer @var{answer} for @var{question}, in case it is tested
! 1558: with a preprocessor conditional such as @samp{#if
! 1559: #@var{question}(@var{answer})}. @samp{-A-} disables the standard
! 1560: assertions that normally describe the target machine.
! 1561:
1.1 root 1562: @item -D@var{macro}
1563: Define macro @var{macro} with the string @samp{1} as its definition.
1564:
1565: @item -D@var{macro}=@var{defn}
1566: Define macro @var{macro} as @var{defn}. All instances of @samp{-D} on
1567: the command line are processed before any @samp{-U} options.
1568:
1569: @item -U@var{macro}
1570: Undefine macro @var{macro}. @samp{-U} options are evaluated after all
1571: @samp{-D} options, but before any @samp{-include} and @samp{-imacros}
1572: options.
1573:
1574: @item -dM
1575: Tell the preprocessor to output only a list of the macro definitions
1576: that are in effect at the end of preprocessing. Used with the @samp{-E}
1577: option.
1578:
1579: @item -dD
1580: Tell the preprocessing to pass all macro definitions into the output, in
1581: their proper sequence in the rest of the output.
1582:
1583: @item -dN
1584: Like @samp{-dD} except that the macro arguments and contents are omitted.
1585: Only @samp{#define @var{name}} is included in the output.
1586:
1587: @item -trigraphs
1588: Support ANSI C trigraphs. You don't want to know about this
1589: brain-damage. The @samp{-ansi} option also has this effect.
1590: @end table
1591:
1.1.1.4 ! root 1592: @node Assembler Options
! 1593: @section Passing Options to the Assembler
! 1594:
! 1595: @table @samp
! 1596: @item -Wa,@var{option}
! 1597: Pass @var{option} as an option to the assembler. If @var{option}
! 1598: contains commas, it is split into multiple options at the commas.
! 1599: @end table
! 1600:
! 1601: @node Link Options
1.1 root 1602: @section Options for Linking
1603: @cindex link options
1604: @cindex options, linking
1605:
1606: These options come into play when the compiler links object files into
1607: an executable output file. They are meaningless if the compiler is
1608: not doing a link step.
1609:
1610: @table @code
1611: @cindex file names
1612: @item @var{object-file-name}
1613: A file name that does not end in a special recognized suffix is
1614: considered to name an object file or library. (Object files are
1615: distinguished from libraries by the linker according to the file
1616: contents.) If linking is done, these object files are used as input
1617: to the linker.
1618:
1619: @item -c
1620: @itemx -S
1621: @itemx -E
1622: If any of these options is used, then the linker is not run, and
1623: object file names should not be used as arguments. @xref{Overall
1624: Options}.
1625:
1626: @cindex Libraries
1627: @item -l@var{library}
1628: Search the library named @var{library} when linking.
1629:
1630: It makes a difference where in the command you write this option; the
1631: linker searches processes libraries and object files in the order they
1.1.1.2 root 1632: are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
1.1 root 1633: after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers
1634: to functions in @samp{z}, those functions may not be loaded.
1635:
1636: The linker searches a standard list of directories for the library,
1637: which is actually a file named @file{lib@var{library}.a}. The linker
1638: then uses this file as if it had been specified precisely by name.
1639:
1640: The directories searched include several standard system directories
1641: plus any that you specify with @samp{-L}.
1642:
1643: Normally the files found this way are library files---archive files
1644: whose members are object files. The linker handles an archive file by
1645: scanning through it for members which define symbols that have so far
1646: been referenced but not defined. But if the file that is found is an
1647: ordinary object file, it is linked in the usual fashion. The only
1648: difference between using an @samp{-l} option and specifying a file name
1649: is that @samp{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
1650: and searches several directories.
1651:
1.1.1.4 ! root 1652: @item -lobjc
! 1653: This special case of the @samp{-l} option is what you need to do when you
! 1654: link an Objective C program.
! 1655:
1.1 root 1656: @item -nostdlib
1657: Don't use the standard system libraries and startup files when linking.
1658: Only the files you specify will be passed to the linker.
1659:
1660: @item -static
1661: On systems that support dynamic linking, this prevents linking with the shared
1662: libraries. On other systems, this
1663: option has no effect.
1664:
1665: @item -shared
1666: Produce a shared object which can then be linked with other objects to
1667: form an executable. Only a few systems support this option.
1668:
1669: @item -symbolic
1670: Bind references to global symbols when building a shared object. Warn
1671: about any unresolved references (unless overridden by the link editor
1672: option @samp{-Xlinker -z -Xlinker defs}). Only a few systems support
1673: this option.
1674:
1675: @item -Xlinker @var{option}
1676: Pass @var{option} as an option to the linker. You can use this to
1677: supply system-specific linker options which GNU CC does not know how to
1678: recognize.
1679:
1680: If you want to pass an option that takes an argument, you must use
1681: @samp{-Xlinker} twice, once for the option and once for the argument.
1682: For example, to pass @samp{-assert definitions}, you must write
1683: @samp{-Xlinker -assert -Xlinker definitions}. It does not work to write
1684: @samp{-Xlinker "-assert definitions"}, because this passes the entire
1685: string as a single argument, which is not what the linker expects.
1.1.1.4 ! root 1686:
! 1687: @item -Wl,@var{option}
! 1688: Pass @var{option} as an option to the linker. If @var{option} contains
! 1689: commas, it is split into multiple options at the commas.
! 1690:
! 1691: @item -u @var{symbol}
! 1692: Pretend the symbol @var{symbol} is undefined, to force linking of
! 1693: library modules to define it. You can use @samp{-u} multiple times with
! 1694: different symbols to force loading of additional library modules.
1.1 root 1695: @end table
1696:
1.1.1.4 ! root 1697: @node Directory Options
1.1 root 1698: @section Options for Directory Search
1699: @cindex directory options
1700: @cindex options, directory search
1701: @cindex search path
1702:
1703: These options specify directories to search for header files, for
1704: libraries and for parts of the compiler:
1705:
1706: @table @code
1707: @item -I@var{dir}
1708: Append directory @var{dir} to the list of directories searched for
1709: include files.
1710:
1711: @item -I-
1712: Any directories you specify with @samp{-I} options before the @samp{-I-}
1713: option are searched only for the case of @samp{#include "@var{file}"};
1714: they are not searched for @samp{#include <@var{file}>}.
1715:
1716: If additional directories are specified with @samp{-I} options after
1717: the @samp{-I-}, these directories are searched for all @samp{#include}
1718: directives. (Ordinarily @emph{all} @samp{-I} directories are used
1719: this way.)
1720:
1721: In addition, the @samp{-I-} option inhibits the use of the current
1722: directory (where the current input file came from) as the first search
1723: directory for @samp{#include "@var{file}"}. There is no way to
1724: override this effect of @samp{-I-}. With @samp{-I.} you can specify
1725: searching the directory which was current when the compiler was
1726: invoked. That is not exactly the same as what the preprocessor does
1727: by default, but it is often satisfactory.
1728:
1729: @samp{-I-} does not inhibit the use of the standard system directories
1730: for header files. Thus, @samp{-I-} and @samp{-nostdinc} are
1731: independent.
1732:
1733: @item -L@var{dir}
1734: Add directory @var{dir} to the list of directories to be searched
1735: for @samp{-l}.
1736:
1737: @item -B@var{prefix}
1738: This option specifies where to find the executables, libraries and
1739: data files of the compiler itself.
1740:
1741: The compiler driver program runs one or more of the subprograms
1742: @file{cpp}, @file{cc1}, @file{as} and @file{ld}. It tries
1743: @var{prefix} as a prefix for each program it tries to run, both with and
1744: without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
1745:
1746: For each subprogram to be run, the compiler driver first tries the
1747: @samp{-B} prefix, if any. If that name is not found, or if @samp{-B}
1748: was not specified, the driver tries two standard prefixes, which are
1.1.1.2 root 1749: @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}. If neither of
1.1 root 1750: those results in a file name that is found, the unmodified program
1751: name is searched for using the directories specified in your
1752: @samp{PATH} environment variable.
1753:
1754: @samp{-B} prefixes that effectively specify directory names also apply
1755: to libraries in the linker, because the compiler translates these
1756: options into @samp{-L} options for the linker.
1757:
1758: The run-time support file @file{libgcc.a} can also be searched for using
1759: the @samp{-B} prefix, if needed. If it is not found there, the two
1760: standard prefixes above are tried, and that is all. The file is left
1761: out of the link if it is not found by those means.
1762:
1763: Another way to specify a prefix much like the @samp{-B} prefix is to use
1764: the environment variable @code{GCC_EXEC_PREFIX}. @xref{Environment
1765: Variables}.
1766: @end table
1767:
1.1.1.4 ! root 1768: @node Target Options
1.1 root 1769: @section Specifying Target Machine and Compiler Version
1770: @cindex target options
1771: @cindex cross compiling
1772: @cindex specifying machine version
1773: @cindex specifying compiler version and target machine
1774: @cindex compiler version, specifying
1775: @cindex target machine, specifying
1776:
1777: By default, GNU CC compiles code for the same type of machine that you
1778: are using. However, it can also be installed as a cross-compiler, to
1779: compile for some other type of machine. In fact, several different
1780: configurations of GNU CC, for different target machines, can be
1781: installed side by side. Then you specify which one to use with the
1782: @samp{-b} option.
1783:
1784: In addition, older and newer versions of GNU CC can be installed side
1785: by side. One of them (probably the newest) will be the default, but
1786: you may sometimes wish to use another.
1787:
1788: @table @code
1789: @item -b @var{machine}
1790: The argument @var{machine} specifies the target machine for compilation.
1791: This is useful when you have installed GNU CC as a cross-compiler.
1792:
1793: The value to use for @var{machine} is the same as was specified as the
1794: machine type when configuring GNU CC as a cross-compiler. For
1795: example, if a cross-compiler was configured with @samp{configure
1796: i386v}, meaning to compile for an 80386 running System V, then you
1797: would specify @samp{-b i386v} to run that cross compiler.
1798:
1799: When you do not specify @samp{-b}, it normally means to compile for
1800: the same type of machine that you are using.
1801:
1802: @item -V @var{version}
1803: The argument @var{version} specifies which version of GNU CC to run.
1804: This is useful when multiple versions are installed. For example,
1805: @var{version} might be @samp{2.0}, meaning to run GNU CC version 2.0.
1806:
1807: The default version, when you do not specify @samp{-V}, is controlled
1808: by the way GNU CC is installed. Normally, it will be a version that
1809: is recommended for general use.
1810: @end table
1811:
1812: The @samp{-b} and @samp{-V} options actually work by controlling part of
1813: the file name used for the executable files and libraries used for
1814: compilation. A given version of GNU CC, for a given target machine, is
1.1.1.2 root 1815: normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill
1.1 root 1816:
1817: It follows that sites can customize the effect of @samp{-b} or @samp{-V}
1818: either by changing the names of these directories or adding
1819: alternate names (or symbolic links). Thus, if
1.1.1.2 root 1820: @file{/usr/local/lib/gcc-lib/80386} is a link to
1.1.1.4 ! root 1821: @file{/usr/local/lib/gcc-lib/i386v}, then @samp{-b 80386} becomes an alias
1.1 root 1822: for @samp{-b i386v}.@refill
1823:
1824: In one respect, the @samp{-b} or @samp{-V} do not completely change
1825: to a different compiler: the top-level driver program @code{gcc}
1826: that you originally invoked continues to run and invoke the other
1827: executables (preprocessor, compiler per se, assembler and linker)
1828: that do the real work. However, since no real work is done in the
1829: driver program, it usually does not matter that the driver program
1830: in use is not the one for the specified target and version.
1831:
1832: The only way that the driver program depends on the target machine is
1833: in the parsing and handling of special machine-specific options.
1834: However, this is controlled by a file which is found, along with the
1835: other executables, in the directory for the specified version and
1836: target machine. As a result, a single installed driver program adapts
1837: to any specified target machine and compiler version.
1838:
1839: The driver program executable does control one significant thing,
1840: however: the default version and target machine. Therefore, you can
1841: install different instances of the driver program, compiled for
1842: different targets or versions, under different names.
1843:
1844: For example, if the driver for version 2.0 is installed as @code{ogcc}
1845: and that for version 2.1 is installed as @code{gcc}, then the command
1846: @code{gcc} will use version 2.1 by default, while @code{ogcc} will use
1847: 2.0 by default. However, you can choose either version with either
1848: command with the @samp{-V} option.
1849:
1.1.1.4 ! root 1850: @node Submodel Options
1.1 root 1851: @section Specifying Hardware Models and Configurations
1852: @cindex submodel options
1853: @cindex specifying hardware config
1854: @cindex hardware models and configurations, specifying
1855: @cindex machine dependent options
1856:
1857: Earlier we discussed the standard option @samp{-b} which chooses among
1858: different installed compilers for completely different target
1859: machines, such as Vax vs. 68000 vs. 80386.
1860:
1861: In addition, each of these target machine types can have its own
1862: special options, starting with @samp{-m}, to choose among various
1863: hardware models or configurations---for example, 68010 vs 68020,
1864: floating coprocessor or none. A single installed version of the
1865: compiler can compile for any model or configuration, according to the
1866: options specified.
1867:
1.1.1.4 ! root 1868: Some configurations of the compiler also support additional special
! 1869: options, usually for compatibility with other compilers on the same
! 1870: platform.
! 1871:
1.1 root 1872: @ifset INTERNALS
1873: These options are defined by the macro @code{TARGET_SWITCHES} in the
1874: machine description. The default for the options is also defined by
1875: that macro, which enables you to change the defaults.
1876: @end ifset
1877:
1878: @menu
1879: * M680x0 Options::
1880: * VAX Options::
1881: * SPARC Options::
1882: * Convex Options::
1883: * AMD29K Options::
1884: * M88K Options::
1885: * RS/6000 Options::
1886: * RT Options::
1887: * MIPS Options::
1.1.1.2 root 1888: * i386 Options::
1.1.1.4 ! root 1889: * HPPA Options::
! 1890: * Intel 960 Options::
! 1891: * DEC Alpha Options::
! 1892: * System V Options::
1.1 root 1893: @end menu
1894:
1.1.1.4 ! root 1895: @node M680x0 Options
1.1 root 1896: @subsection M680x0 Options
1897: @cindex M680x0 options
1898:
1899: These are the @samp{-m} options defined for the 68000 series. The default
1900: values for these options depends on which style of 68000 was selected when
1901: the compiler was configured; the defaults for the most common choices are
1902: given below.
1903:
1904: @table @code
1905: @item -m68000
1906: @itemx -mc68000
1.1.1.4 ! root 1907: Generate output for a 68000. This is the default
! 1908: when the compiler is configured for 68000-based systems.
! 1909:
! 1910: @item -m68020
! 1911: @itemx -mc68020
! 1912: Generate output for a 68020. This is the default
! 1913: when the compiler is configured for 68020-based systems.
1.1 root 1914:
1915: @item -m68881
1916: Generate output containing 68881 instructions for floating point.
1917: This is the default for most 68020 systems unless @samp{-nfp} was
1918: specified when the compiler was configured.
1919:
1.1.1.4 ! root 1920: @item -m68030
! 1921: Generate output for a 68030. This is the default
! 1922: when the compiler is configured for 68030-based systems.
! 1923:
! 1924: @item -m68040
! 1925: Generate output for a 68040. This is the default
! 1926: when the compiler is configured for 68040-based systems.
! 1927:
! 1928: @item -m68020-40
! 1929: Generate output for a 68040, without using any of the new instructions.
! 1930: This results in code which can run relatively efficiently on either a
! 1931: 68020/68881 or a 68030 or a 68040.
! 1932:
1.1 root 1933: @item -mfpa
1934: Generate output containing Sun FPA instructions for floating point.
1935:
1936: @item -msoft-float
1937: Generate output containing library calls for floating point.
1938: @strong{Warning:} the requisite libraries are not part of GNU CC.
1939: Normally the facilities of the machine's usual C compiler are used, but
1940: this can't be done directly in cross-compilation. You must make your
1941: own arrangements to provide suitable library functions for
1942: cross-compilation.
1943:
1944: @item -mshort
1945: Consider type @code{int} to be 16 bits wide, like @code{short int}.
1946:
1947: @item -mnobitfield
1948: Do not use the bit-field instructions. @samp{-m68000} implies
1949: @samp{-mnobitfield}.
1950:
1951: @item -mbitfield
1952: Do use the bit-field instructions. @samp{-m68020} implies
1953: @samp{-mbitfield}. This is the default if you use the unmodified
1954: sources configured for a 68020.
1955:
1956: @item -mrtd
1957: Use a different function-calling convention, in which functions
1958: that take a fixed number of arguments return with the @code{rtd}
1959: instruction, which pops their arguments while returning. This
1960: saves one instruction in the caller since there is no need to pop
1961: the arguments there.
1962:
1963: This calling convention is incompatible with the one normally
1964: used on Unix, so you cannot use it if you need to call libraries
1965: compiled with the Unix compiler.
1966:
1967: Also, you must provide function prototypes for all functions that
1968: take variable numbers of arguments (including @code{printf});
1969: otherwise incorrect code will be generated for calls to those
1970: functions.
1971:
1972: In addition, seriously incorrect code will result if you call a
1973: function with too many arguments. (Normally, extra arguments are
1974: harmlessly ignored.)
1975:
1976: The @code{rtd} instruction is supported by the 68010 and 68020
1977: processors, but not by the 68000.
1978: @end table
1979:
1.1.1.4 ! root 1980: @node VAX Options
1.1 root 1981: @subsection VAX Options
1982: @cindex VAX options
1983:
1984: These @samp{-m} options are defined for the Vax:
1985:
1986: @table @code
1987: @item -munix
1988: Do not output certain jump instructions (@code{aobleq} and so on)
1989: that the Unix assembler for the Vax cannot handle across long
1990: ranges.
1991:
1992: @item -mgnu
1993: Do output those jump instructions, on the assumption that you
1994: will assemble with the GNU assembler.
1995:
1996: @item -mg
1997: Output code for g-format floating point numbers instead of d-format.
1998: @end table
1999:
1.1.1.4 ! root 2000: @node Sparc Options
1.1 root 2001: @subsection SPARC Options
2002: @cindex SPARC options
2003:
2004: These @samp{-m} switches are supported on the Sparc:
2005:
2006: @table @code
2007: @ignore
2008: @item -mfpu
2009: Generate output containing floating point instructions. This is the
2010: default if you use the unmodified sources.
2011:
2012: @item -msoft-float
2013: Generate output containing library calls for floating point.
2014: @strong{Warning:} the requisite libraries are not part of GNU CC.
2015: Normally the facilities of the machine's usual C compiler are used, but
2016: this can't be done directly in cross-compilation. You must make your
2017: own arrangements to provide suitable library functions for
2018: cross-compilation.
2019: @end ignore
1.1.1.2 root 2020:
2021: @item -mforce-align
2022: Make sure all objects of type @code{double} are 8-byte aligned in memory
2023: and use double-word instructions to reference them.
2024:
1.1 root 2025: @item -mno-epilogue
2026: Generate separate return instructions for @code{return} statements.
2027: This has both advantages and disadvantages; I don't recall what they
2028: are.
2029: @end table
2030:
1.1.1.4 ! root 2031: @node Convex Options
1.1 root 2032: @subsection Convex Options
2033: @cindex Convex options
2034:
2035: These @samp{-m} options are defined for the Convex:
2036:
2037: @table @code
2038: @item -mc1
2039: Generate output for a C1. This is the default when the compiler is
2040: configured for a C1.
2041:
2042: @item -mc2
2043: Generate output for a C2. This is the default when the compiler is
2044: configured for a C2.
2045:
2046: @item -margcount
2047: Generate code which puts an argument count in the word preceding each
2048: argument list. Some nonportable Convex and Vax programs need this word.
2049: (Debuggers don't, except for functions with variable-length argument
2050: lists; this info is in the symbol table.)
2051:
2052: @item -mnoargcount
2053: Omit the argument count word. This is the default if you use the
2054: unmodified sources.
2055: @end table
2056:
1.1.1.4 ! root 2057: @node AMD29K Options
1.1 root 2058: @subsection AMD29K Options
2059: @cindex AMD29K options
2060:
2061: These @samp{-m} options are defined for the AMD Am29000:
2062:
2063: @table @code
2064: @item -mdw
2065: Generate code that assumes the @code{DW} bit is set, i.e., that byte and
2066: halfword operations are directly supported by the hardware. This is the
2067: default.
2068:
2069: @item -mnodw
2070: Generate code that assumes the @code{DW} bit is not set.
2071:
2072: @item -mbw
2073: Generate code that assumes the system supports byte and halfword write
2074: operations. This is the default.
2075:
2076: @item -mnbw
2077: Generate code that assumes the systems does not support byte and
2078: halfword write operations. @samp{-mnbw} implies @samp{-mnodw}.
2079:
2080: @item -msmall
2081: Use a small memory model that assumes that all function addresses are
2082: either within a single 256 KB segment or at an absolute address of less
2083: than 256K. This allows the @code{call} instruction to be used instead
2084: of a @code{const}, @code{consth}, @code{calli} sequence.
2085:
2086: @item -mlarge
2087: Do not assume that the @code{call} instruction can be used; this is the
2088: default.
2089:
2090: @item -m29050
2091: Generate code for the Am29050.
2092:
2093: @item -m29000
2094: Generate code for the Am29000. This is the default.
2095:
2096: @item -mkernel-registers
2097: Generate references to registers @code{gr64-gr95} instead of
2098: @code{gr96-gr127}. This option can be used when compiling kernel code
2099: that wants a set of global registers disjoint from that used by
2100: user-mode code.
2101:
2102: Note that when this option is used, register names in @samp{-f} flags
2103: must use the normal, user-mode, names.
2104:
2105: @item -muser-registers
2106: Use the normal set of global registers, @code{gr96-gr127}. This is the
2107: default.
2108:
2109: @item -mstack-check
2110: Insert a call to @code{__msp_check} after each stack adjustment. This
2111: is often used for kernel code.
2112: @end table
2113:
1.1.1.4 ! root 2114: @node M88K Options
1.1 root 2115: @subsection M88K Options
2116: @cindex M88k options
2117:
2118: These @samp{-m} options are defined for Motorola 88K architectures:
2119:
2120: @table @code
2121: @item -m88000
2122: @kindex -m88000
2123: Generate code that works well on both the m88100 and the
2124: m88110.
2125:
2126: @item -m88100
2127: @kindex -m88100
2128: Generate code that works best for the m88100, but that also
2129: runs on the m88110.
2130:
2131: @item -m88110
2132: @kindex -m88110
2133: Generate code that works best for the m88110, and may not run
2134: on the m88100.
2135:
2136: @item -midentify-revision
2137: @kindex -midentify-revision
2138: @kindex ident
2139: @cindex identifying source, compiler (88k)
2140: Include an @code{ident} directive in the assembler output recording the
2141: source file name, compiler name and version, timestamp, and compilation
2142: flags used.
2143:
2144: @item -mno-underscores
2145: @kindex -mno-underscores
2146: @cindex underscores, avoiding (88k)
2147: In assembler output, emit symbol names without adding an underscore
2148: character at the beginning of each name. The default is to use an
2149: underscore as prefix on each name.
2150:
2151: @item -mocs-debug-info
2152: @itemx -mno-ocs-debug-info
2153: @kindex -mocs-debug-info
2154: @kindex -mno-ocs-debug-info
2155: @cindex OCS (88k)
2156: @cindex debugging, 88k OCS
2157: Include (or omit) additional debugging information (about registers used
2158: in each stack frame) as specified in the 88open Object Compatibility
2159: Standard, ``OCS''. This extra information allows debugging of code that
2160: has had the frame pointer eliminated. The default for DG/UX, SVr4, and
2161: Delta 88 SVr3.2 is to include this information; other 88k configurations
2162: omit this information by default.
2163:
2164: @item -mocs-frame-position
2165: @kindex -mocs-frame-position
2166: @cindex register positions in frame (88k)
2167: When emitting COFF debugging information for automatic variables and
2168: parameters stored on the stack, use the offset from the canonical frame
2169: address, which is the stack pointer (register 31) on entry to the
2170: function. The DG/UX, SVr4, Delta88 SVr3.2, and BCS configurations use
2171: @samp{-mocs-frame-position}; other 88k configurations have the default
2172: @samp{-mno-ocs-frame-position}.
2173:
2174: @item -mno-ocs-frame-position
2175: @kindex -mno-ocs-frame-position
2176: @cindex register positions in frame (88k)
2177: When emitting COFF debugging information for automatic variables and
2178: parameters stored on the stack, use the offset from the frame pointer
2179: register (register 30). When this option is in effect, the frame
2180: pointer is not eliminated when debugging information is selected by the
2181: -g switch.
2182:
2183: @item -moptimize-arg-area
2184: @itemx -mno-optimize-arg-area
2185: @kindex -moptimize-arg-area
2186: @kindex -mno-optimize-arg-area
2187: @cindex arguments in frame (88k)
2188: Control how to store function arguments in stack frames.
1.1.1.4 ! root 2189: @samp{-moptimize-arg-area} saves space, but conflicts with the 88open
! 2190: specifications. @samp{-mno-optimize-arg-area} conforms to the 88open
! 2191: standards. By default GNU CC does not optimize the argument area.
1.1 root 2192:
2193: @item -mshort-data-@var{num}
2194: @kindex -mshort-data-@var{num}
2195: @cindex smaller data references (88k)
2196: @cindex r0-relative references (88k)
2197: Generate smaller data references by making them relative to @code{r0},
2198: which allows loading a value using a single instruction (rather than the
2199: usual two). You control which data references are affected by
2200: specifying @var{num} with this option. For example, if you specify
2201: @samp{-mshort-data-512}, then the data references affected are those
2202: involving displacements of less than 512 bytes.
2203: @samp{-mshort-data-@var{num}} is not effective for @var{num} greater
2204: than 64K.
2205:
1.1.1.4 ! root 2206: @itemx -mserialize-volatile
! 2207: @kindex -mserialize-volatile
! 2208: @item -mno-serialize-volatile
! 2209: @kindex -mno-serialize-volatile
! 2210: @cindex sequential consistency on 88k
! 2211: Do, or don't, generate code to guarantee sequential consistency of
! 2212: volatile memory references.
! 2213:
! 2214: GNU CC always guarantees consistency by default, for the preferred
! 2215: processor submodel. How this is done depends on the submodel.
! 2216:
! 2217: The m88100 processor does not reorder memory references and so always
! 2218: provides sequential consistency. If you use @samp{-m88100}, GNU CC does
! 2219: not generate any special instructions for sequential consistency.
! 2220:
! 2221: The order of memory references made by the m88110 processor does not
! 2222: always match the order of the instructions requesting those references.
! 2223: In particular, a load instruction may execute before a preceding store
! 2224: instruction. Such reordering violates sequential consistency of
! 2225: volatile memory references, when there are multiple processors. When
! 2226: you use @samp{-m88000} or @samp{-m88110}, GNU CC generates special
! 2227: instructions when appropriate, to force execution in the proper order.
! 2228:
! 2229: The extra code generated to guarantee consistency may affect the
! 2230: performance of your application. If you know that you can safely forgo
! 2231: this guarantee, you may use @samp{-mno-serialize-volatile}.
! 2232:
! 2233: If you use @samp{-m88100} but require sequential consistency when
! 2234: running on the m88110 processor, you should use
! 2235: @samp{-mserialize-volatile}.
! 2236:
1.1 root 2237: @item -msvr4
2238: @itemx -msvr3
2239: @kindex -msvr4
2240: @kindex -msvr3
2241: @cindex assembler syntax, 88k
2242: @cindex SVr4
2243: Turn on (@samp{-msvr4}) or off (@samp{-msvr3}) compiler extensions
2244: related to System V release 4 (SVr4). This controls the following:
2245:
2246: @enumerate
2247: @item
2248: Which variant of the assembler syntax to emit (which you can select
2249: independently using @samp{-mversion-03.00}).
2250: @item
2251: @samp{-msvr4} makes the C preprocessor recognize @samp{#pragma weak}
2252: that is used on System V release 4.
2253: @item
2254: @samp{-msvr4} makes GNU CC issue additional declaration directives used in
2255: SVr4.
2256: @end enumerate
2257:
2258: @samp{-msvr3} is the default for all m88K configurations except
2259: the SVr4 configuration.
2260:
2261: @item -mversion-03.00
2262: @kindex -mversion-03.00
2263: In the DG/UX configuration, there are two flavors of SVr4. This option
2264: modifies @samp{-msvr4} to select whether the hybrid-COFF or real-ELF
2265: flavor is used. All other configurations ignore this option.
2266: @c ??? which asm syntax better for GAS? option there too?
2267:
2268: @item -mno-check-zero-division
2269: @itemx -mcheck-zero-division
1.1.1.3 root 2270: @kindex -mno-check-zero-division
1.1 root 2271: @kindex -mcheck-zero-division
2272: @cindex zero division on 88k
2273: Early models of the 88K architecture had problems with division by zero;
2274: in particular, many of them didn't trap. Use these options to avoid
2275: including (or to include explicitly) additional code to detect division
2276: by zero and signal an exception. All GNU CC configurations for the 88K use
2277: @samp{-mcheck-zero-division} by default.
2278:
2279: @item -muse-div-instruction
2280: @kindex -muse-div-instruction
2281: @cindex divide instruction, 88k
2282: Do not emit code to check both the divisor and dividend when doing
2283: signed integer division to see if either is negative, and adjust the
2284: signs so the divide is done using non-negative numbers. Instead, rely
2285: on the operating system to calculate the correct value when the
2286: @code{div} instruction traps. This results in different behavior when
2287: the most negative number is divided by -1, but is useful when most or
2288: all signed integer divisions are done with positive numbers.
2289:
2290: @item -mtrap-large-shift
2291: @itemx -mhandle-large-shift
2292: @kindex -mtrap-large-shift
2293: @kindex -mhandle-large-shift
2294: @cindex bit shift overflow (88k)
2295: @cindex large bit shifts (88k)
2296: Include code to detect bit-shifts of more than 31 bits; respectively,
2297: trap such shifts or emit code to handle them properly. By default GNU CC
2298: makes no special provision for large bit shifts.
2299:
2300: @item -mwarn-passed-structs
2301: @kindex -mwarn-passed-structs
2302: @cindex structure passing (88k)
2303: Warn when a function passes a struct as an argument or result.
2304: Structure-passing conventions have changed during the evolution of the C
2305: language, and are often the source of portability problems. By default,
2306: GNU CC issues no such warning.
2307: @end table
2308:
1.1.1.4 ! root 2309: @node RS/6000 Options
1.1 root 2310: @subsection IBM RS/6000 Options
2311: @cindex RS/6000 Options
2312: @cindex IBM RS/6000 Options
2313:
2314: Only one pair of @samp{-m} options is defined for the IBM RS/6000:
2315:
2316: @table @code
2317: @item -mfp-in-toc
2318: @itemx -mno-fp-in-toc
2319: Control whether or not floating-point constants go in the Table of
2320: Contents (TOC), a table of all global variable and function addresses. By
2321: default GNU CC puts floating-point constants there; if the TOC overflows,
2322: @samp{-mno-fp-in-toc} will reduce the size of the TOC, which may avoid
2323: the overflow.
2324: @end table
2325:
1.1.1.4 ! root 2326: @node RT Options
1.1 root 2327: @subsection IBM RT Options
2328: @cindex RT options
2329: @cindex IBM RT options
2330:
2331: These @samp{-m} options are defined for the IBM RT PC:
2332:
2333: @table @code
2334: @item -min-line-mul
2335: Use an in-line code sequence for integer multiplies. This is the
2336: default.
2337:
2338: @item -mcall-lib-mul
2339: Call @code{lmul$$} for integer multiples.
2340:
2341: @item -mfull-fp-blocks
2342: Generate full-size floating point data blocks, including the minimum
2343: amount of scratch space recommended by IBM. This is the default.
2344:
2345: @item -mminimum-fp-blocks
2346: Do not include extra scratch space in floating point data blocks. This
2347: results in smaller code, but slower execution, since scratch space must
2348: be allocated dynamically.
2349:
2350: @cindex @file{varargs.h} and RT PC
2351: @cindex @file{stdarg.h} and RT PC
2352: @item -mfp-arg-in-fpregs
2353: Use a calling sequence incompatible with the IBM calling convention in
2354: which floating point arguments are passed in floating point registers.
2355: Note that @code{varargs.h} and @code{stdargs.h} will not work with
2356: floating point operands if this option is specified.
2357:
2358: @item -mfp-arg-in-gregs
2359: Use the normal calling convention for floating point arguments. This is
2360: the default.
2361:
2362: @item -mhc-struct-return
2363: Return structures of more than one word in memory, rather than in a
2364: register. This provides compatibility with the MetaWare HighC (hc)
2365: compiler. Use @samp{-fpcc-struct-return} for compatibility with the
2366: Portable C Compiler (pcc).
2367:
2368: @item -mnohc-struct-return
2369: Return some structures of more than one word in registers, when
2370: convenient. This is the default. For compatibility with the
2371: IBM-supplied compilers, use either @samp{-fpcc-struct-return} or
2372: @samp{-mhc-struct-return}.
2373: @end table
2374:
1.1.1.4 ! root 2375: @node MIPS Options
1.1 root 2376: @subsection MIPS Options
2377: @cindex MIPS options
2378:
2379: These @samp{-m} options are defined for the MIPS family of computers:
2380:
2381: @table @code
2382: @item -mcpu=@var{cpu type}
2383: Assume the defaults for the machine type @var{cpu type} when
1.1.1.2 root 2384: scheduling instructions. The default @var{cpu type} is
1.1 root 2385: @samp{default}, which picks the longest cycles times for any of the
2386: machines, in order that the code run at reasonable rates on all MIPS
2387: cpu's. Other choices for @var{cpu type} are @samp{r2000},
2388: @samp{r3000}, @samp{r4000}, and @samp{r6000}. While picking a
2389: specific @var{cpu type} will schedule things appropriately for that
2390: particular chip, the compiler will not generate any code that does not
2391: meet level 1 of the MIPS ISA (instruction set architecture) without
2392: the @samp{-mips2} or @samp{-mips3} switches being used.
2393:
2394: @item -mips2
2395: Issue instructions from level 2 of the MIPS ISA (branch likely, square
2396: root instructions). The @samp{-mcpu=r4000} or @samp{-mcpu=r6000}
1.1.1.3 root 2397: switch must be used in conjunction with @samp{-mips2}.
1.1 root 2398:
2399: @item -mips3
2400: Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
2401: You must use the @samp{-mcpu=r4000} switch along with @samp{-mips3}.
2402:
2403: @item -mint64
2404: @item -mlong64
2405: @item -mlonglong128
2406: These options don't work at present.
2407:
2408: @item -mmips-as
2409: Generate code for the MIPS assembler, and invoke @file{mips-tfile} to
2410: add normal debug information. This is the default for all
2411: platforms except for the OSF/1 reference platform, using the OSF/rose
2412: object format. If the either of the @samp{-gstabs} or @samp{-gstabs+}
2413: switches are used, the @file{mips-tfile} program will encapsulate the
2414: stabs within MIPS ECOFF.
2415:
2416: @item -mgas
2417: Generate code for the GNU assembler. This is the default on the OSF/1
2418: reference platform, using the OSF/rose object format.
2419:
2420: @item -mrnames
2421: @itemx -mno-rnames
2422: The @samp{-mrnames} switch says to output code using the MIPS software
2423: names for the registers, instead of the hardware names (ie, @var{a0}
2424: instead of @var{$4}). The GNU assembler does not support the
2425: @samp{-mrnames} switch, and the MIPS assembler will be instructed to
2426: run the MIPS C preprocessor over the source file. The
2427: @samp{-mno-rnames} switch is default.
2428:
2429: @item -mgpopt
2430: @itemx -mno-gpopt
2431: The @samp{-mgpopt} switch says to write all of the data declarations
1.1.1.2 root 2432: before the instructions in the text section, this allows the MIPS
2433: assembler to generate one word memory references instead of using two
2434: words for short global or static data items. This is on by default if
1.1 root 2435: optimization is selected.
2436:
2437: @item -mstats
2438: @itemx -mno-stats
2439: For each non-inline function processed, the @samp{-mstats} switch
2440: causes the compiler to emit one line to the standard error file to
2441: print statistics about the program (number of registers saved, stack
2442: size, etc.).
2443:
2444: @item -mmemcpy
2445: @itemx -mno-memcpy
2446: The @samp{-mmemcpy} switch makes all block moves call the appropriate
2447: string function (@samp{memcpy} or @samp{bcopy}) instead of possibly
2448: generating inline code.
2449:
2450: @item -mmips-tfile
2451: @itemx -mno-mips-tfile
2452: The @samp{-mno-mips-tfile} switch causes the compiler not
2453: postprocess the object file with the @file{mips-tfile} program,
2454: after the MIPS assembler has generated it to add debug support. If
2455: @file{mips-tfile} is not run, then no local variables will be
2456: available to the debugger. In addition, @file{stage2} and
2457: @file{stage3} objects will have the temporary file names passed to the
2458: assembler embedded in the object file, which means the objects will
1.1.1.2 root 2459: not compare the same. The @samp{-mno-mips-tfile} switch should only
2460: be used when there are bugs in the @file{mips-tfile} program that
2461: prevents compilation.
1.1 root 2462:
2463: @item -msoft-float
2464: Generate output containing library calls for floating point.
2465: @strong{Warning:} the requisite libraries are not part of GNU CC.
2466: Normally the facilities of the machine's usual C compiler are used, but
2467: this can't be done directly in cross-compilation. You must make your
2468: own arrangements to provide suitable library functions for
2469: cross-compilation.
2470:
2471: @item -mhard-float
2472: Generate output containing floating point instructions. This is the
2473: default if you use the unmodified sources.
2474:
2475: @item -mfp64
2476: Assume that the @var{FR} bit in the status word is on, and that there
2477: are 32 64-bit floating point registers, instead of 32 32-bit floating
2478: point registers. You must also specify the @samp{-mcpu=r4000} and
2479: @samp{-mips3} switches.
2480:
2481: @item -mfp32
2482: Assume that there are 32 32-bit floating point registers. This is the
2483: default.
2484:
2485: @item -mabicalls
2486: @itemx -mno-abicalls
2487: Emit the @samp{.abicalls}, @samp{.cpload}, and @samp{.cprestore}
2488: pseudo operations that some System V.4 ports use for position
2489: independent code.
2490:
2491: @item -mhalf-pic
2492: @itemx -mno-half-pic
2493: Put pointers to extern references into the data section and load them
2494: up, rather than put the references in the text section. These options
2495: do not work at present.
2496:
2497: @item -G @var{num}
2498: @cindex smaller data references (MIPS)
2499: @cindex gp-relative references (MIPS)
2500: Put global and static items less than or equal to @var{num} bytes into
2501: the small data or bss sections instead of the normal data or bss
2502: section. This allows the assembler to emit one word memory reference
2503: instructions based on the global pointer (@var{gp} or @var{$28}),
2504: instead of the normal two words used. By default, @var{num} is 8 when
2505: the MIPS assembler is used, and 0 when the GNU assembler is used. The
2506: @samp{-G @var{num}} switch is also passed to the assembler and linker.
1.1.1.2 root 2507: All modules should be compiled with the same @samp{-G @var{num}}
2508: value.
2509:
2510: @item -nocpp
2511: Tell the MIPS assembler to not run it's preprocessor over user
2512: assembler files (with a @samp{.s} suffix) when assembling them.
1.1 root 2513: @end table
2514:
2515: @ifset INTERNALS
2516: These options are defined by the macro
2517: @code{TARGET_SWITCHES} in the machine description. The default for the
2518: options is also defined by that macro, which enables you to change the
2519: defaults.
2520: @end ifset
2521:
1.1.1.4 ! root 2522: @node i386 Options
1.1.1.2 root 2523: @subsection Intel 386 Options
2524: @cindex i386 Options
2525: @cindex Intel 386 Options
2526:
2527: These @samp{-m} options are defined for the i386 family of computers:
2528:
2529: @table @code
2530: @item -m486
1.1.1.4 ! root 2531: @itemx -mno-486
1.1.1.2 root 2532: Control whether or not code is optimized for a 486 instead of an
2533: 386. Code generated for an 486 will run on a 386 and vice versa.
2534:
2535: @item -msoft-float
2536: Generate output containing library calls for floating point.
2537: @strong{Warning:} the requisite libraries are not part of GNU CC.
2538: Normally the facilities of the machine's usual C compiler are used, but
2539: this can't be done directly in cross-compilation. You must make your
2540: own arrangements to provide suitable library functions for
2541: cross-compilation.
2542:
1.1.1.4 ! root 2543: On machines where a function returns floating point results in the 80387
1.1.1.2 root 2544: register stack, some floating point opcodes may be emitted even if
2545: @samp{-msoft-float} is used.
1.1.1.4 ! root 2546:
! 2547: @item -mno-fp-ret-in-387
! 2548: Don't use the FPU registers for return values of functions.
! 2549:
! 2550: The usual calling convention has functions return values of types
! 2551: @code{float} and @code{double} in an FPU register, even if there
! 2552: is no FPU. The idea is that the operating system should emulate
! 2553: an FPU.
! 2554:
! 2555: The option @samp{-mno-fp-ret-in-387} causes such values to be returned
! 2556: in ordinary CPU registers instead.
! 2557: @end table
! 2558:
! 2559: @node HPPA Options
! 2560: @subsection HPPA Options
! 2561: @cindex HPPA Options
! 2562:
! 2563: This @samp{-m} option is defined for the HPPA family of computers:
! 2564:
! 2565: @table @code
! 2566: @item -mno-bss
! 2567: Disable the use of the BSS section. This may be necessary with older
! 2568: versions of pa-gas. It is highly recommended that you pick up a new
! 2569: version of pa-gas from @code{jaguar.cs.utah.edu}.
! 2570:
! 2571: @item -mpa-risc-1-0
! 2572: Generate code for a PA 1.0 processor.
! 2573:
! 2574: @item -mpa-risc-1-1
! 2575: Generate code for a PA 1.1 processor.
! 2576:
! 2577: @item -mkernel
! 2578: Generate code which is suitable for use in kernels. Specifically, avoid
! 2579: @code{add} instructions in which one of the arguments is the DP register;
! 2580: generate @code{addil} instructions instead. This avoids a rather serious
! 2581: bug in the HP-UX linker.
! 2582:
! 2583: @item -mshared-libs
! 2584: Generate code that can be linked against HP-UX shared libraries. This option
! 2585: is not fully function yet, and is not on by default for any PA target.
! 2586:
! 2587: @item -mno-shared-libs
! 2588: Don't generate code that will be linked against shared libraries. This is
! 2589: the default for all PA targets.
! 2590:
! 2591: @item -mlong-calls
! 2592: Generate code which allows calls to functions greater than 256K away from
! 2593: the caller when the caller and callee are in the same source file. Do
! 2594: not turn this option on unless code refuses to link with "branch out of
! 2595: range errors" from the linker.
! 2596: @end table
! 2597:
! 2598: @node Intel 960 Options
! 2599: @subsection Intel 960 Options
! 2600:
! 2601: These @samp{-m} options are defined for the Intel 960 implementations:
! 2602:
! 2603: @table @code
! 2604: @item -m@var{cpu type}
! 2605: Assume the defaults for the machine type @var{cpu type} for some of
! 2606: the other options, including instruction scheduling, floating point
! 2607: support, and addressing modes. The choices for @var{cpu type} are
! 2608: @samp{ka}, @samp{kb}, @samp{mc}, @samp{ca}, @samp{cf},
! 2609: @samp{sa}, and @samp{sb}.
! 2610: The default is
! 2611: @samp{kb}.
! 2612:
! 2613: @item -mnumerics
! 2614: @itemx -msoft-float
! 2615: The @samp{-mnumerics} option indicates that the processor does support
! 2616: floating-point instructions. The @samp{-msoft-float} option indicates
! 2617: that floating-point support should not be assumed.
! 2618:
! 2619: @item -mleaf-procedures
! 2620: @itemx -mno-leaf-procedures
! 2621: Do (or do not) attempt to alter leaf procedures to be callable with the
! 2622: @code{bal} instruction as well as @code{call}. This will result in more
! 2623: efficient code for explicit calls when the @code{bal} instruction can be
! 2624: substituted by the assembler or linker, but less efficient code in other
! 2625: cases, such as calls via function pointers, or using a linker that doesn't
! 2626: support this optimization.
! 2627:
! 2628: @item -mtail-call
! 2629: @itemx -mno-tail-call
! 2630: Do (or do not) make additional attempts (beyond those of the
! 2631: machine-independent portions of the compiler) to optimize tail-recursive
! 2632: calls into branches. You may not want to do this because the detection of
! 2633: cases where this is not valid is not totally complete. The default is
! 2634: @samp{-mno-tail-call}.
! 2635:
! 2636: @item -mcomplex-addr
! 2637: @itemx -mno-complex-addr
! 2638: Assume (or do not assume) that the use of a complex addressing mode is a
! 2639: win on this implementation of the i960. Complex addressing modes may not
! 2640: be worthwhile on the K-series, but they definitely are on the C-series.
! 2641: The default is currently @samp{-mcomplex-addr} for all processors except
! 2642: the CB and CC.
! 2643:
! 2644: @item -mcode-align
! 2645: @itemx -mno-code-align
! 2646: Align code to 8-byte boundaries for faster fetching (or don't bother).
! 2647: Currently turned on by default for C-series implementations only.
! 2648:
! 2649: @ignore
! 2650: @item -mclean-linkage
! 2651: @itemx -mno-clean-linkage
! 2652: These options are not fully implemented.
! 2653: @end ignore
! 2654:
! 2655: @item -mic-compat
! 2656: @itemx -mic2.0-compat
! 2657: @itemx -mic3.0-compat
! 2658: Enable compatibility with iC960 v2.0 or v3.0.
! 2659:
! 2660: @item -masm-compat
! 2661: @itemx -mintel-asm
! 2662: Enable compatibility with the iC960 assembler.
! 2663:
! 2664: @item -mstrict-align
! 2665: @itemx -mno-strict-align
! 2666: Do not permit (do permit) unaligned accesses.
! 2667:
! 2668: @item -mold-align
! 2669: Enable structure-alignment compatibility with Intel's gcc release version
! 2670: 1.3 (based on gcc 1.37). Currently this is buggy in that @samp{#pragma
! 2671: align 1} is always assumed as well, and cannot be turned off.
! 2672: @end table
! 2673:
! 2674: @node DEC Alpha Options
! 2675: @subsection DEC Alpha Options
! 2676:
! 2677: These @samp{-m} options are defined for the DEC Alpha implementations:
! 2678:
! 2679: @table @code
! 2680: @item -mno-soft-float
! 2681: @itemx -msoft-float
! 2682: Use (do not use) the hardware floating-point instructions for
! 2683: floating-point operations. When @code{-msoft-float} is specified,
! 2684: functions in @file{libgcc1.c} will be used to perform floating-point
! 2685: operations. Unless they are replaced by routines that emulate the
! 2686: floating-point operations, or compiled in such a way as to call such
! 2687: emulations routines, these routines will issue floating-point
! 2688: operations. If you are compiling for an Alpha without floating-point
! 2689: operations, you must ensure that the library is built so as not to call
! 2690: them.
! 2691:
! 2692: Note that Alpha implementations without floating-point operations are
! 2693: required to have floating-point registers.
! 2694:
! 2695: @item -mfp-reg
! 2696: @itemx -mno-fp-regs
! 2697: Generate code that uses (does not use) the floating-point register set.
! 2698: @code{-mno-fp-regs} implies @code{-msoft-float}. If the floating-point
! 2699: register set is not used, floating point operands are passed in integer
! 2700: registers as if they were integers and floating-point results are passed
! 2701: in $0 instead of $f0. This is a non-standard calling sequence, so any
! 2702: function with a floating-point argument or return value called by code
! 2703: compiled with @code{-mno-fp-regs} must also be compiled with that
! 2704: option.
! 2705:
! 2706: A typical use of this option is building a kernel that does not use,
! 2707: and hence need not save and restore, any floating-point registers.
! 2708: @end table
! 2709:
! 2710: @node System V Options
! 2711: @subsection Options for System V
! 2712:
! 2713: These additional options are available on System V Release 4 for
! 2714: compatibility with other compilers on those systems:
! 2715:
! 2716: @table @code
! 2717: @ignore
! 2718: This should say *what the option does* and only then say
! 2719: "For compatibility only..."
! 2720: @item -G
! 2721: On SVr4 systems, @code{gcc} accepts the option @samp{-G} (and passes
! 2722: it to the system linker), for compatibility with other compilers.
! 2723: However, we suggest you use @samp{-symbolic} or @samp{-shared} as
! 2724: appropriate, instead of supplying linker options on the @code{gcc}
! 2725: command line.
! 2726: @end ignore
! 2727:
! 2728: @item -Qy
! 2729: Identify the versions of each tool used by the compiler, in a
! 2730: @code{.ident} assembler directive in the output.
! 2731:
! 2732: @item -Qn
! 2733: Refrain from adding @code{.ident} directives to the output file (this is
! 2734: the default).
! 2735:
! 2736: @item -YP,@var{dirs}
! 2737: Search the directories @var{dirs}, and no others, for libraries
! 2738: specified with @samp{-l}.
! 2739:
! 2740: @item -Ym,@var{dir}
! 2741: Look in the directory @var{dir} to find the M4 preprocessor.
! 2742: The assembler uses this option.
! 2743: @c This is supposed to go with a -Yd for predefined M4 macro files, but
! 2744: @c the generic assembler that comes with Solaris takes just -Ym.
1.1.1.2 root 2745: @end table
2746:
1.1.1.4 ! root 2747: @node Code Gen Options
1.1 root 2748: @section Options for Code Generation Conventions
2749: @cindex code generation conventions
2750: @cindex options, code generation
2751: @cindex run-time options
2752:
2753: These machine-independent options control the interface conventions
2754: used in code generation.
2755:
2756: Most of them have both positive and negative forms; the negative form
2757: of @samp{-ffoo} would be @samp{-fno-foo}. In the table below, only
2758: one of the forms is listed---the one which is not the default. You
2759: can figure out the other form by either removing @samp{no-} or adding
2760: it.
2761:
2762: @table @code
2763: @item -fpcc-struct-return
2764: Use the same convention for returning @code{struct} and @code{union}
2765: values that is used by the usual C compiler on your system. This
2766: convention is less efficient for small structures, and on many
2767: machines it fails to be reentrant; but it has the advantage of
2768: allowing intercallability between GNU CC-compiled code and PCC-compiled
2769: code.
2770:
2771: @item -fshort-enums
2772: Allocate to an @code{enum} type only as many bytes as it needs for the
2773: declared range of possible values. Specifically, the @code{enum} type
2774: will be equivalent to the smallest integer type which has enough room.
2775:
2776: @item -fshort-double
2777: Use the same size for @code{double} as for @code{float}.
2778:
2779: @item -fshared-data
2780: Requests that the data and non-@code{const} variables of this
2781: compilation be shared data rather than private data. The distinction
2782: makes sense only on certain operating systems, where shared data is
2783: shared between processes running the same program, while private data
2784: exists in one copy per process.
2785:
2786: @item -fno-common
2787: Allocate even uninitialized global variables in the bss section of the
2788: object file, rather than generating them as common blocks. This has the
2789: effect that if the same variable is declared (without @code{extern}) in
2790: two different compilations, you will get an error when you link them.
2791: The only reason this might be useful is if you wish to verify that the
2792: program will work on other systems which always work this way.
2793:
2794: @item -fno-ident
2795: Ignore the @samp{#ident} directive.
2796:
2797: @item -fno-gnu-linker
2798: Don't output global initializations such as C++ constructors and
2799: destructors in the form used by the GNU linker (on systems where the GNU
2800: linker is the standard method of handling them). Use this option when
2801: you want to use a ``collect'' program and a non-GNU linker.
2802:
2803: @item -finhibit-size-directive
2804: Don't output a @code{.size} assembler directive, or anything else that
2805: would cause trouble if the function is split in the middle, and the
2806: two halves are placed at locations far apart in memory. This option is
2807: used when compiling @file{crtstuff.c}; you should not need to use it
2808: for anything else.
2809:
1.1.1.4 ! root 2810: @item -fnonnull-objects
! 2811: Assume that objects reached through references are not null
! 2812: (C++ only).
! 2813:
! 2814: Normally, GNU C++ makes conservative assumptions about objects reached
! 2815: through references. For example, the compiler must check that @code{a}
! 2816: is not null in code like the following:
! 2817:
! 2818: @example
! 2819: obj &a = g ();
! 2820: a.f (2);
! 2821: @end example
! 2822:
! 2823: Checking that references of this sort have non-null values requires
! 2824: extra code, however, and it is unnecessary for many programs. You can
! 2825: use @samp{-fnonnull-objects} to omit the checks for null, if your
! 2826: program doesn't require checking.
! 2827:
1.1.1.3 root 2828: @item -fverbose-asm
2829: Put extra commentary information in the generated assembly code to
2830: make it more readable. This option is generally only of use to those
2831: who actually need to read the generated assembly code (perhaps while
2832: debugging the compiler itself).
2833:
1.1 root 2834: @item -fvolatile
2835: Consider all memory references through pointers to be volatile.
2836:
2837: @item -fpic
2838: @cindex global offset table
1.1.1.4 ! root 2839: @cindex PIC
! 2840: If supported for the target machine, generate position-independent code
! 2841: (PIC) suitable for use in a shared library. All addresses will be
1.1 root 2842: accessed through a global offset table (GOT). If the GOT size for the
2843: linked executable exceeds a machine-specific maximum size, you will get
2844: an error message from the linker indicating that @samp{-fpic} does not
2845: work; recompile with @samp{-fPIC} instead. (These maximums are 16k on
2846: the m88k, 8k on the Sparc, and 32k on the m68k and RS/6000. The 386 has
2847: no such limit.)
2848:
2849: Position-independent code requires special support, and therefore works
1.1.1.4 ! root 2850: only on certain machines. For the 386, GNU CC supports PIC for System V
! 2851: but not for the Sun 386i. Code generated for the IBM RS/6000 is always
1.1 root 2852: position-independent.
2853:
1.1.1.2 root 2854: The GNU assembler does not fully support PIC. Currently, you must use
2855: some other assembler in order for PIC to work. We would welcome
2856: volunteers to upgrade GAS to handle this; the first part of the job is
2857: to figure out what the assembler must do differently.
2858:
1.1 root 2859: @item -fPIC
2860: If supported for the target machine, emit position-independent code,
2861: suitable for dynamic linking and avoiding any limit on the size of the
2862: global offset table. This option makes a difference on the m68k, m88k
2863: and the Sparc.
2864:
2865: Position-independent code requires special support, and therefore works
2866: only on certain machines.
2867:
2868: @item -ffixed-@var{reg}
2869: Treat the register named @var{reg} as a fixed register; generated code
2870: should never refer to it (except perhaps as a stack pointer, frame
2871: pointer or in some other fixed role).
2872:
2873: @var{reg} must be the name of a register. The register names accepted
2874: are machine-specific and are defined in the @code{REGISTER_NAMES}
2875: macro in the machine description macro file.
2876:
2877: This flag does not have a negative form, because it specifies a
2878: three-way choice.
2879:
2880: @item -fcall-used-@var{reg}
2881: Treat the register named @var{reg} as an allocatable register that is
2882: clobbered by function calls. It may be allocated for temporaries or
2883: variables that do not live across a call. Functions compiled this way
2884: will not save and restore the register @var{reg}.
2885:
2886: Use of this flag for a register that has a fixed pervasive role in the
2887: machine's execution model, such as the stack pointer or frame pointer,
2888: will produce disastrous results.
2889:
2890: This flag does not have a negative form, because it specifies a
2891: three-way choice.
2892:
2893: @item -fcall-saved-@var{reg}
2894: Treat the register named @var{reg} as an allocatable register saved by
2895: functions. It may be allocated even for temporaries or variables that
2896: live across a call. Functions compiled this way will save and restore
2897: the register @var{reg} if they use it.
2898:
2899: Use of this flag for a register that has a fixed pervasive role in the
2900: machine's execution model, such as the stack pointer or frame pointer,
2901: will produce disastrous results.
2902:
2903: A different sort of disaster will result from the use of this flag for
2904: a register in which function values may be returned.
2905:
2906: This flag does not have a negative form, because it specifies a
2907: three-way choice.
2908: @end table
2909:
1.1.1.4 ! root 2910: @node Environment Variables
1.1 root 2911: @section Environment Variables Affecting GNU CC
2912: @cindex environment variables
2913:
2914: This section describes several environment variables that affect how GNU
2915: CC operates. They work by specifying directories or prefixes to use
2916: when searching for various kinds of files.
2917:
2918: @ifclear INTERNALS
2919: Note that you can also specify places to search using options such as
2920: @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
2921: take precedence over places specified using environment variables, which
2922: in turn take precedence over those specified by the configuration of GNU
2923: CC.
2924: @end ifclear
2925: @ifset INTERNALS
2926: Note that you can also specify places to search using options such as
2927: @samp{-B}, @samp{-I} and @samp{-L} (@pxref{Directory Options}). These
2928: take precedence over places specified using environment variables, which
2929: in turn take precedence over those specified by the configuration of GNU
2930: CC. @xref{Driver}.
2931: @end ifset
2932:
2933: @table @code
2934: @item TMPDIR
2935: @findex TMPDIR
2936: If @code{TMPDIR} is set, it specifies the directory to use for temporary
2937: files. GNU CC uses temporary files to hold the output of one stage of
2938: compilation which is to be used as input to the next stage: for example,
2939: the output of the preprocessor, which is the input to the compiler
2940: proper.
2941:
2942: @item GCC_EXEC_PREFIX
2943: @findex GCC_EXEC_PREFIX
2944: If @code{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
2945: names of the subprograms executed by the compiler. No slash is added
2946: when this prefix is combined with the name of a subprogram, but you can
2947: specify a prefix that ends with a slash if you wish.
2948:
2949: If GNU CC cannot find the subprogram using the specified prefix, it
2950: tries looking in the usual places for the subprogram.
2951:
2952: Other prefixes specified with @samp{-B} take precedence over this prefix.
2953:
2954: This prefix is also used for finding files such as @file{crt0.o} that are
2955: used for linking.
2956:
2957: In addition, the prefix is used in an unusual way in finding the
2958: directories to search for header files. For each of the standard
1.1.1.2 root 2959: directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
1.1 root 2960: (more precisely, with the value of @code{GCC_INCLUDE_DIR}), GNU CC tries
2961: replacing that beginning with the specified prefix to produce an
2962: alternate directory name. Thus, with @samp{-Bfoo/}, GNU CC will search
2963: @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
2964: These alternate directories are searched first; the standard directories
2965: come next.
2966:
2967: @item COMPILER_PATH
2968: @findex COMPILER_PATH
2969: The value of @code{COMPILER_PATH} is a colon-separated list of
2970: directories, much like @code{PATH}. GNU CC tries the directories thus
2971: specified when searching for subprograms, if it can't find the
2972: subprograms using @code{GCC_EXEC_PREFIX}.
2973:
2974: @item LIBRARY_PATH
2975: @findex LIBRARY_PATH
2976: The value of @code{LIBRARY_PATH} is a colon-separated list of
2977: directories, much like @code{PATH}. GNU CC tries the directories thus
2978: specified when searching for special linker files, if it can't find them
2979: using @code{GCC_EXEC_PREFIX}. Linking using GNU CC also uses these
2980: directories when searching for ordinary libraries for the @samp{-l}
2981: option (but directories specified with @samp{-L} come first).
2982:
2983: @item C_INCLUDE_PATH
1.1.1.2 root 2984: @itemx CPLUS_INCLUDE_PATH
1.1 root 2985: @itemx OBJC_INCLUDE_PATH
2986: @findex C_INCLUDE_PATH
1.1.1.2 root 2987: @findex CPLUS_INCLUDE_PATH
1.1 root 2988: @findex OBJC_INCLUDE_PATH
1.1.1.2 root 2989: @c @itemx OBJCPLUS_INCLUDE_PATH
1.1 root 2990: These environment variables pertain to particular languages. Each
2991: variable's value is a colon-separated list of directories, much like
2992: @code{PATH}. When GNU CC searches for header files, it tries the
2993: directories listed in the variable for the language you are using, after
2994: the directories specified with @samp{-I} but before the standard header
2995: file directories.
2996:
2997: @item DEPENDENCIES_OUTPUT
2998: @findex DEPENDENCIES_OUTPUT
2999: @cindex dependencies for make as output
3000: If this variable is set, its value specifies how to output dependencies
3001: for Make based on the header files processed by the compiler. This
3002: output looks much like the output from the @samp{-M} option
3003: (@pxref{Preprocessor Options}), but it goes to a separate file, and is
3004: in addition to the usual results of compilation.
3005:
3006: The value of @code{DEPENDENCIES_OUTPUT} can be just a file name, in
3007: which case the Make rules are written to that file, guessing the target
3008: name from the source file name. Or the value can have the form
3009: @samp{@var{file} @var{target}}, in which case the rules are written to
3010: file @var{file} using @var{target} as the target name.
3011: @end table
1.1.1.4 ! root 3012:
! 3013: @node Running Protoize
! 3014: @section Running Protoize
! 3015:
! 3016: The program @code{protoize} is an optional part of GNU C. You can use
! 3017: it to add prototypes to a program, thus converting the program to ANSI
! 3018: C in one respect. The companion program @code{unprotoize} does the
! 3019: reverse: it removes argument types from any prototypes that are found.
! 3020:
! 3021: When you run these programs, you must specify a set of source files as
! 3022: command line arguments. The conversion programs start out by compiling
! 3023: these files to see what functions they define. The information gathered
! 3024: about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
! 3025:
! 3026: After scanning comes actual conversion. The specified files are all
! 3027: eligible to be converted; any files they include (whether sources or
! 3028: just headers) are eligible as well.
! 3029:
! 3030: But not all the eligible files are converted. By default,
! 3031: @code{protoize} and @code{unprotoize} convert only source and header
! 3032: files in the current directory. You can specify additional directories
! 3033: whose files should be converted with the @samp{-d @var{directory}}
! 3034: option. You can also specify particular files to exclude with the
! 3035: @samp{-x @var{file}} option. A file is converted if it is eligible, its
! 3036: directory name matches one of the specified directory names, and its
! 3037: name within the directory has not been excluded.
! 3038:
! 3039: Basic conversion with @code{protoize} consists of rewriting most
! 3040: function definitions and function declarations to specify the types of
! 3041: the arguments. The only ones not rewritten are those for varargs
! 3042: functions.
! 3043:
! 3044: @code{protoize} optionally inserts prototype declarations at the
! 3045: beginning of the source file, to make them available for any calls that
! 3046: precede the function's definition. Or it can insert prototype
! 3047: declarations with block scope in the blocks where undeclared functions
! 3048: are called.
! 3049:
! 3050: Basic conversion with @code{unprotoize} consists of rewriting most
! 3051: function declarations to remove any argument types, and rewriting
! 3052: function definitions to the old-style pre-ANSI form.
! 3053:
! 3054: Both conversion programs print a warning for any function declaration or
! 3055: definition that they can't convert. You can suppress these warnings
! 3056: with @samp{-q}.
! 3057:
! 3058: The output from @code{protoize} or @code{unprotoize} replaces the
! 3059: original source file. The original file is renamed to a name ending
! 3060: with @samp{.save}. If the @samp{.save} file already exists, then
! 3061: the source file is simply discarded.
! 3062:
! 3063: @code{protoize} and @code{unprotoize} both depend on GNU CC itself to
! 3064: scan the program and collect information about the functions it uses.
! 3065: So neither of these programs will work until GNU CC is installed.
! 3066:
! 3067: Here is a table of the options you can use with @code{protoize} and
! 3068: @code{unprotoize}. Each option works with both programs unless
! 3069: otherwise stated.
! 3070:
! 3071: @table @samp
! 3072: @item -B @var{directory}
! 3073: Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
! 3074: usual directory (normally @file{/usr/local/lib}). This file contains
! 3075: prototype information about standard system functions. This option
! 3076: applies only to @code{protoize}.
! 3077:
! 3078: @item -c @var{compilation-options}
! 3079: Use @var{compilation-options} as the options when running @code{gcc} to
! 3080: produce the @samp{.X} files. The special option @samp{-aux-info} is
! 3081: always passed in addition, to tell @code{gcc} to write a @samp{.X} file.
! 3082:
! 3083: Note that the compilation options must be given as a single argument to
! 3084: @code{protoize} or @code{unprotoize}. If you want to specify several
! 3085: @code{gcc} options, you must quote the entire set of compilation options
! 3086: to make them a single word in the shell.
! 3087:
! 3088: There are certain @code{gcc} arguments that you cannot use, because they
! 3089: would produce the wrong kind of output. These include @samp{-g},
! 3090: @samp{-O}, @samp{-c}, @samp{-S}, and @samp{-o} If you include these in
! 3091: the @var{compilation-options}, they are ignored.
! 3092:
! 3093: @item -C
! 3094: Rename files to end in @samp{.C} instead of @samp{.c}.
! 3095: This is convenient if you are converting a C program to C++.
! 3096: This option applies only to @code{protoize}.
! 3097:
! 3098: @item -g
! 3099: Add explicit global declarations. This means inserting explicit
! 3100: declarations at the beginning of each source file for each function
! 3101: that is called in the file and was not declared. These declarations
! 3102: precede the first function definition that contains a call to an
! 3103: undeclared function. This option applies only to @code{protoize}.
! 3104:
! 3105: @item -i @var{string}
! 3106: Indent old-style parameter declarations with the string @var{string}.
! 3107: This option applies only to @code{protoize}.
! 3108:
! 3109: @code{unprotoize} converts prototyped function definitions to old-style
! 3110: function definitions, where the arguments are declared between the
! 3111: argument list and the initial @samp{@{}. By default, @code{unprotoize}
! 3112: uses five spaces as the indentation. If you want to indent with just
! 3113: one space instead, use @samp{-i " "}.
! 3114:
! 3115: @item -k
! 3116: Keep the @samp{.X} files. Normally, they are deleted after conversion
! 3117: is finished.
! 3118:
! 3119: @item -l
! 3120: Add explicit local declarations. @code{protoize} with @samp{-l} inserts
! 3121: a prototype declaration for each function in each block which calls the
! 3122: function without any declaration. This option applies only to
! 3123: @code{protoize}.
! 3124:
! 3125: @item -n
! 3126: Make no real changes. This mode just prints information about the conversions
! 3127: that would have been done without @samp{-n}.
! 3128:
! 3129: @item -N
! 3130: Make no @samp{.save} files. The original files are simply deleted.
! 3131: Use this option with caution.
! 3132:
! 3133: @item -p @var{program}
! 3134: Use the program @var{program} as the compiler. Normally, the name
! 3135: @file{gcc} is used.
! 3136:
! 3137: @item -q
! 3138: Work quietly. Most warnings are suppressed.
! 3139:
! 3140: @item -v
! 3141: Print the version number, just like @samp{-v} for @code{gcc}.
! 3142: @end table
! 3143:
! 3144: If you need special compiler options to compile one of your program's
! 3145: source files, then you should generate that file's @samp{.X} file
! 3146: specially, by running @code{gcc} on that source file with the
! 3147: appropriate options and the option @samp{-aux-info}. Then run
! 3148: @code{protoize} on the entire set of files. @code{protoize} will use
! 3149: the existing @samp{.X} file because it is newer than the source file.
! 3150: For example:
! 3151:
! 3152: @example
! 3153: gcc -Dfoo=bar file1.c -aux-info
! 3154: protoize *.c
! 3155: @end example
! 3156:
! 3157: @noindent
! 3158: You need to include the special files along with the rest in the
! 3159: @code{protoize} command, even though their @samp{.X} files already
! 3160: exist, because otherwise they won't get converted.
! 3161:
! 3162: @xref{Protoize Caveats}, for more information on how to use
! 3163: @code{protoize} successfully.
! 3164:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.