Annotation of GNUtools/cc/invoke.texi, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.