home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / cprog / gccdoc2.zip / INVOKE.TXT < prev    next >
Text File  |  1992-05-22  |  118KB  |  3,169 lines

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