home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / gcc / gcc261a.zoo / cat1 / gcc.1 < prev   
Encoding:
Text File  |  1994-11-02  |  148.1 KB  |  3,499 lines

  1.  
  2.  
  3.  
  4. GCC(1)                      GNU Tools                      GCC(1)
  5.  
  6.  
  7. N✓NA✓AM✓ME✓E
  8.        gcc, g++ - GNU project C and C++ Compiler (v2.6)
  9.  
  10. S✓SY✓YN✓NO✓OP✓PS✓SI✓IS✓S
  11.        g✓gc✓cc✓c [ _✓o_✓p_✓t_✓i_✓o_✓n | _✓f_✓i_✓l_✓e_✓n_✓a_✓m_✓e ]...
  12.        g✓g+✓++✓+ [ _✓o_✓p_✓t_✓i_✓o_✓n | _✓f_✓i_✓l_✓e_✓n_✓a_✓m_✓e ]...
  13.  
  14. W✓WA✓AR✓RN✓NI✓IN✓NG✓G
  15.        The  information  in  this man page is an extract from the
  16.        full documentation of the GNU C compiler, and  is  limited
  17.        to the meaning of the options.
  18.  
  19.        This  man  page  is not kept up to date except when volun-
  20.        teers want to maintain it.   If  you  find  a  discrepancy
  21.        between  the  man  page and the software, please check the
  22.        Info file, which is the authoritative documentation.
  23.  
  24.        If we find that the things in this man page that  are  out
  25.        of date cause significant confusion or complaints, we will
  26.        stop distributing the man page.  The alternative, updating
  27.        the  man  page when we update the Info file, is impossible
  28.        because the rest of the work of maintaining GNU CC  leaves
  29.        us no time for that.  The GNU project regards man pages as
  30.        obsolete and should not let them take time away from other
  31.        things.
  32.  
  33.        For  complete and current documentation, refer to the Info
  34.        file `g✓gc✓cc✓c' or the manual _✓U_✓s_✓i_✓n_✓g _✓a_✓n_✓d  _✓P_✓o_✓r_✓t_✓i_✓n_✓g  _✓G_✓N_✓U  _✓C_✓C  _✓(_✓f_✓o_✓r
  35.        _✓v_✓e_✓r_✓s_✓i_✓o_✓n  _✓2_✓._✓0_✓).  Both are made from the Texinfo source file
  36.        g✓gc✓cc✓c.✓.t✓te✓ex✓xi✓in✓nf✓fo✓o.
  37.  
  38. D✓DE✓ES✓SC✓CR✓RI✓IP✓PT✓TI✓IO✓ON✓N
  39.        The C and C++  compilers  are  integrated.   Both  process
  40.        input  files  through  one or more of four stages: prepro-
  41.        cessing, compilation, assembly, and linking.  Source file-
  42.        name suffixes identify the source language, but which name
  43.        you use for the compiler governs default assumptions:
  44.  
  45.        g✓gc✓cc✓c    assumes preprocessed (.✓.i✓i) files are C and assumes C
  46.               style linking.
  47.  
  48.        g✓g+✓++✓+    assumes preprocessed (.✓.i✓i) files are C++ and assumes
  49.               C++ style linking.
  50.  
  51.        Suffixes of source file names indicate  the  language  and
  52.        kind of processing to be done:
  53.  
  54.        .✓.c✓c    C source; preprocess, compile, assemble
  55.        .✓.C✓C    C++ source; preprocess, compile, assemble
  56.        .✓.c✓cc✓c   C++ source; preprocess, compile, assemble
  57.        .✓.c✓cx✓xx✓x  C++ source; preprocess, compile, assemble
  58.        .✓.m✓m    Objective-C source; preprocess, compile, assemble
  59.        .✓.i✓i    preprocessed C; compile, assemble
  60.        .✓.i✓ii✓i   preprocessed C++; compile, assemble
  61.  
  62.  
  63.  
  64. GNU Tools                   1993/10/13                          1
  65.  
  66.  
  67.  
  68.  
  69.  
  70. GCC(1)                      GNU Tools                      GCC(1)
  71.  
  72.  
  73.        .✓.s✓s    Assembler source; assemble
  74.        .✓.S✓S    Assembler source; preprocess, assemble
  75.        .✓.h✓h    Preprocessor file; not usually named on command line
  76.  
  77.        Files  with other suffixes are passed to the linker.  Com-
  78.        mon cases include:
  79.  
  80.        .✓.o✓o    Object file
  81.        .✓.a✓a    Archive file
  82.  
  83.        Linking is always the last stage unless you use one of the
  84.        -✓-c✓c,  -✓-S✓S,  or -✓-E✓E options to avoid it (or unless compilation
  85.        errors stop the whole process).  For the link  stage,  all
  86.        .✓.o✓o  files  corresponding  to  source  files, -✓-l✓l libraries,
  87.        unrecognized filenames (including named  .✓.o✓o  object  files
  88.        and  .✓.a✓a archives) are passed to the linker in command-line
  89.        order.
  90.  
  91. O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  92.        Options must be separate: `-✓-d✓dr✓r' is  quite  different  from
  93.        `-✓-d✓d -✓-r✓r '.
  94.  
  95.        Most `-✓-f✓f' and `-✓-W✓W' options have two contrary forms: -✓-f✓f_✓n_✓a_✓m_✓e
  96.        and -✓-f✓fn✓no✓o-✓-_✓n_✓a_✓m_✓e (or -✓-W✓W_✓n_✓a_✓m_✓e and -✓-W✓Wn✓no✓o-✓-_✓n_✓a_✓m_✓e).   Only  the  non-
  97.        default forms are shown here.
  98.  
  99.        Here  is  a  summary  of all the options, grouped by type.
  100.        Explanations are in the following sections.
  101.  
  102.        O✓Ov✓ve✓er✓ra✓al✓ll✓l O✓Op✓pt✓ti✓io✓on✓ns✓s
  103.               -c -S -E -o _✓f_✓i_✓l_✓e -pipe -v -x _✓l_✓a_✓n_✓g_✓u_✓a_✓g_✓e
  104.  
  105.        L✓La✓an✓ng✓gu✓ua✓ag✓ge✓e O✓Op✓pt✓ti✓io✓on✓ns✓s
  106.               -ansi -fall-virtual -fcond-mismatch
  107.               -fdollars-in-identifiers -fenum-int-equiv
  108.               -fexternal-templates -fno-asm -fno-builtin
  109.               -fno-strict-prototype -fsigned-bitfields
  110.               -fsigned-char -fthis-is-variable
  111.               -funsigned-bitfields -funsigned-char
  112.               -fwritable-strings -traditional -traditional-cpp
  113.               -trigraphs
  114.  
  115.        W✓Wa✓ar✓rn✓ni✓in✓ng✓g O✓Op✓pt✓ti✓io✓on✓ns✓s
  116.               -fsyntax-only -pedantic -pedantic-errors -w -W
  117.               -Wall -Waggregate-return -Wcast-align -Wcast-qual
  118.               -Wchar-subscript -Wcomment -Wconversion
  119.               -Wenum-clash -Werror -Wformat -Wid-clash-_✓l_✓e_✓n
  120.               -Wimplicit -Winline -Wmissing-prototypes
  121.               -Wmissing-declarations -Wnested-externs -Wno-import
  122.               -Wparentheses -Wpointer-arith -Wredundant-decls
  123.               -Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch
  124.               -Wtemplate-debugging -Wtraditional -Wtrigraphs
  125.               -Wuninitialized -Wunused -Wwrite-strings
  126.  
  127.  
  128.  
  129.  
  130. GNU Tools                   1993/10/13                          2
  131.  
  132.  
  133.  
  134.  
  135.  
  136. GCC(1)                      GNU Tools                      GCC(1)
  137.  
  138.  
  139.        D✓De✓eb✓bu✓ug✓gg✓gi✓in✓ng✓g O✓Op✓pt✓ti✓io✓on✓ns✓s
  140.               -a -d_✓l_✓e_✓t_✓t_✓e_✓r_✓s -fpretend-float -g -g_✓l_✓e_✓v_✓e_✓l -gcoff
  141.               -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+
  142.               -ggdb -p -pg -save-temps -print-file-name=_✓l_✓i_✓b_✓r_✓a_✓r_✓y
  143.               -print-libgcc-file-name -print-prog-name=_✓p_✓r_✓o_✓g_✓r_✓a_✓m
  144.  
  145.        O✓Op✓pt✓ti✓im✓mi✓iz✓za✓at✓ti✓io✓on✓n O✓Op✓pt✓ti✓io✓on✓ns✓s
  146.               -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
  147.               -fdelayed-branch -felide-constructors
  148.               -fexpensive-optimizations -ffast-math -ffloat-store
  149.               -fforce-addr -fforce-mem -finline-functions
  150.               -fkeep-inline-functions -fmemoize-lookups
  151.               -fno-default-inline -fno-defer-pop
  152.               -fno-function-cse -fno-inline -fno-peephole
  153.               -fomit-frame-pointer -frerun-cse-after-loop
  154.               -fschedule-insns -fschedule-insns2
  155.               -fstrength-reduce -fthread-jumps -funroll-all-loops
  156.               -funroll-loops -O -O2
  157.  
  158.        P✓Pr✓re✓ep✓pr✓ro✓oc✓ce✓es✓ss✓so✓or✓r O✓Op✓pt✓ti✓io✓on✓ns✓s
  159.               -A_✓a_✓s_✓s_✓e_✓r_✓t_✓i_✓o_✓n -C -dD -dM -dN -D_✓m_✓a_✓c_✓r_✓o[=_✓d_✓e_✓f_✓n] -E -H
  160.               -idirafter _✓d_✓i_✓r -include _✓f_✓i_✓l_✓e -imacros _✓f_✓i_✓l_✓e -iprefix
  161.               _✓f_✓i_✓l_✓e -iwithprefix _✓d_✓i_✓r -M -MD -MM -MMD -nostdinc -P
  162.               -U_✓m_✓a_✓c_✓r_✓o -undef
  163.  
  164.        A✓As✓ss✓se✓em✓mb✓bl✓le✓er✓r O✓Op✓pt✓ti✓io✓on✓n
  165.               -Wa,_✓o_✓p_✓t_✓i_✓o_✓n
  166.  
  167.        L✓Li✓in✓nk✓ke✓er✓r O✓Op✓pt✓ti✓io✓on✓ns✓s
  168.               -l_✓l_✓i_✓b_✓r_✓a_✓r_✓y -nostartfiles -nostdlib -static -shared
  169.               -symbolic -Xlinker _✓o_✓p_✓t_✓i_✓o_✓n -Wl,_✓o_✓p_✓t_✓i_✓o_✓n -u _✓s_✓y_✓m_✓b_✓o_✓l
  170.  
  171.        D✓Di✓ir✓re✓ec✓ct✓to✓or✓ry✓y O✓Op✓pt✓ti✓io✓on✓ns✓s
  172.               -B_✓p_✓r_✓e_✓f_✓i_✓x -I_✓d_✓i_✓r -I- -L_✓d_✓i_✓r
  173.  
  174.        T✓Ta✓ar✓rg✓ge✓et✓t O✓Op✓pt✓ti✓io✓on✓ns✓s
  175.               -b  _✓m_✓a_✓c_✓h_✓i_✓n_✓e -V _✓v_✓e_✓r_✓s_✓i_✓o_✓n
  176.  
  177.        C✓Co✓on✓nf✓fi✓ig✓gu✓ur✓ra✓at✓ti✓io✓on✓n D✓De✓ep✓pe✓en✓nd✓de✓en✓nt✓t O✓Op✓pt✓ti✓io✓on✓ns✓s
  178.               _✓M_✓6_✓8_✓0_✓x_✓0 _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  179.               -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
  180.               -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
  181.               -mrtd -mshort -msoft-float
  182.  
  183.               _✓V_✓A_✓X _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  184.               -mg -mgnu -munix
  185.  
  186.               _✓S_✓P_✓A_✓R_✓C _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  187.               -mepilogue -mfpu -mhard-float -mno-fpu
  188.               -mno-epilogue -msoft-float -msparclite -mv8
  189.               -msupersparc -mcypress
  190.  
  191.               _✓C_✓o_✓n_✓v_✓e_✓x _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  192.               -margcount -mc1 -mc2 -mnoargcount
  193.  
  194.  
  195.  
  196. GNU Tools                   1993/10/13                          3
  197.  
  198.  
  199.  
  200.  
  201.  
  202. GCC(1)                      GNU Tools                      GCC(1)
  203.  
  204.  
  205.               _✓A_✓M_✓D_✓2_✓9_✓K _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  206.               -m29000 -m29050 -mbw -mdw -mkernel-registers
  207.               -mlarge -mnbw -mnodw -msmall -mstack-check
  208.               -muser-registers
  209.  
  210.               _✓M_✓8_✓8_✓K _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  211.               -m88000 -m88100 -m88110 -mbig-pic
  212.               -mcheck-zero-division -mhandle-large-shift
  213.               -midentify-revision -mno-check-zero-division
  214.               -mno-ocs-debug-info -mno-ocs-frame-position
  215.               -mno-optimize-arg-area -mno-seriazlize-volatile
  216.               -mno-underscores -mocs-debug-info
  217.               -mocs-frame-position -moptimize-arg-area
  218.               -mserialize-volatile -mshort-data-_✓n_✓u_✓m -msvr3 -msvr4
  219.               -mtrap-large-shift -muse-div-instruction
  220.               -mversion-03.00 -mwarn-passed-structs
  221.  
  222.               _✓R_✓S_✓6_✓0_✓0_✓0 _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  223.               -mfp-in-toc -mno-fop-in-toc
  224.  
  225.               _✓R_✓T _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  226.               -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
  227.               -mfull-fp-blocks -mhc-struct-return -min-line-mul
  228.               -mminimum-fp-blocks -mnohc-struct-return
  229.  
  230.               _✓M_✓I_✓P_✓S _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  231.               -mcpu=_✓c_✓p_✓u _✓t_✓y_✓p_✓e -mips2 -mips3 -mint64 -mlong64
  232.               -mlonglong128 -mmips-as -mgas -mrnames -mno-rnames
  233.               -mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy
  234.               -mno-memcpy -mno-mips-tfile -mmips-tfile
  235.               -msoft-float -mhard-float -mabicalls -mno-abicalls
  236.               -mhalf-pic -mno-half-pic -G _✓n_✓u_✓m -nocpp
  237.  
  238.               _✓i_✓3_✓8_✓6 _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  239.               -m486 -mno-486 -msoft-float -mno-fp-ret-in-387
  240.  
  241.               _✓H_✓P_✓P_✓A _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  242.               -mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
  243.               -mno-shared-libs -mlong-calls -mdisable-fpregs
  244.               -mdisable-indexing -mtrailing-colon
  245.  
  246.               _✓i_✓9_✓6_✓0 _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  247.               -m_✓c_✓p_✓u_✓-_✓t_✓y_✓p_✓e -mnumerics -msoft-float
  248.               -mleaf-procedures -mno-leaf-procedures -mtail-call
  249.               -mno-tail-call -mcomplex-addr -mno-complex-addr
  250.               -mcode-align -mno-code-align -mic-compat
  251.               -mic2.0-compat -mic3.0-compat -masm-compat
  252.               -mintel-asm -mstrict-align -mno-strict-align
  253.               -mold-align -mno-old-align
  254.  
  255.               _✓D_✓E_✓C _✓A_✓l_✓p_✓h_✓a _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  256.               -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
  257.  
  258.               _✓S_✓y_✓s_✓t_✓e_✓m _✓V _✓O_✓p_✓t_✓i_✓o_✓n_✓s
  259.  
  260.  
  261.  
  262. GNU Tools                   1993/10/13                          4
  263.  
  264.  
  265.  
  266.  
  267.  
  268. GCC(1)                      GNU Tools                      GCC(1)
  269.  
  270.  
  271.               -G -Qy -Qn -YP,_✓p_✓a_✓t_✓h_✓s -Ym,_✓d_✓i_✓r
  272.  
  273.        C✓Co✓od✓de✓e G✓Ge✓en✓ne✓er✓ra✓at✓ti✓io✓on✓n O✓Op✓pt✓ti✓io✓on✓ns✓s
  274.               -fcall-saved-_✓r_✓e_✓g -fcall-used-_✓r_✓e_✓g -ffixed-_✓r_✓e_✓g
  275.               -finhibit-size-directive -fnonnull-objects
  276.               -fno-common -fno-ident -fno-gnu-linker
  277.               -fpcc-struct-return -fpic -fPIC
  278.               -freg-struct-returno -fshared-data -fshort-enums
  279.               -fshort-double -fvolatile -fvolatile-global
  280.               -fverbose-asm
  281.  
  282. O✓OV✓VE✓ER✓RA✓AL✓LL✓L O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  283.        -✓-x✓x _✓l_✓a_✓n_✓g_✓u_✓a_✓g_✓e
  284.               Specify explicitly the _✓l_✓a_✓n_✓g_✓u_✓a_✓g_✓e for  the  following
  285.               input  files  (rather than choosing a default based
  286.               on the file name suffix) .  This option applies  to
  287.               all  following  input files until the next `-✓-x✓x' op-
  288.               tion.   Possible  values  of  _✓l_✓a_✓n_✓g_✓u_✓a_✓g_✓e   are   `c✓c',
  289.               `o✓ob✓bj✓je✓ec✓ct✓ti✓iv✓ve✓e-✓-c✓c',   `c✓c-✓-h✓he✓ea✓ad✓de✓er✓r',  `c✓c+✓++✓+',  `c✓cp✓pp✓p-✓-o✓ou✓ut✓tp✓pu✓ut✓t',
  290.               `a✓as✓ss✓se✓em✓mb✓bl✓le✓er✓r', and `a✓as✓ss✓se✓em✓mb✓bl✓le✓er✓r-✓-w✓wi✓it✓th✓h-✓-c✓cp✓pp✓p'.
  291.  
  292.        -✓-x✓x n✓no✓on✓ne✓e
  293.               Turn off any specification of a language,  so  that
  294.               subsequent  files  are  handled  according to their
  295.               file name suffixes (as they are  if  `-✓-x✓x'  has  not
  296.               been used at all).
  297.  
  298.        If you want only some of the four stages (preprocess, com-
  299.        pile, assemble, link), you can use `-✓-x✓x' (or filename  suf-
  300.        fixes)  to tell g✓gc✓cc✓c where to start, and one of the options
  301.        `-✓-c✓c', `-✓-S✓S', or `-✓-E✓E' to say where g✓gc✓cc✓c  is  to  stop.   Note
  302.        that  some  combinations (for example, `-✓-x✓x c✓cp✓pp✓p-✓-o✓ou✓ut✓tp✓pu✓ut✓t -✓-E✓E')
  303.        instruct g✓gc✓cc✓c to do nothing at all.
  304.  
  305.        -✓-c✓c     Compile or assemble the source files,  but  do  not
  306.               link.  The compiler output is an object file corre-
  307.               sponding to each source file.
  308.  
  309.               By default, GCC makes the object file  name  for  a
  310.               source  file  by  replacing  the suffix `.✓.c✓c', `.✓.i✓i',
  311.               `.✓.s✓s', etc., with `.✓.o✓o'.  Use -✓-o✓o  to  select  another
  312.               name.
  313.  
  314.               GCC  ignores  any  unrecognized  input files (those
  315.               that do not require compilation or  assembly)  with
  316.               the -✓-c✓c option.
  317.  
  318.        -✓-S✓S     Stop  after the stage of compilation proper; do not
  319.               assemble.  The output is an assembler code file for
  320.               each non-assembler input file specified.
  321.  
  322.               By default, GCC makes the assembler file name for a
  323.               source file by replacing  the  suffix  `.✓.c✓c',  `.✓.i✓i',
  324.               etc., with `.✓.s✓s'.  Use -✓-o✓o to select another name.
  325.  
  326.  
  327.  
  328. GNU Tools                   1993/10/13                          5
  329.  
  330.  
  331.  
  332.  
  333.  
  334. GCC(1)                      GNU Tools                      GCC(1)
  335.  
  336.  
  337.               GCC ignores any input files that don't require com-
  338.               pilation.
  339.  
  340.        -✓-E✓E     Stop after the preprocessing stage; do not run  the
  341.               compiler proper.  The output is preprocessed source
  342.               code, which is sent to the standard output.
  343.  
  344.               GCC ignores input files which don't require prepro-
  345.               cessing.
  346.  
  347.        -✓-o✓o _✓f_✓i_✓l_✓e
  348.               Place output in file _✓f_✓i_✓l_✓e.  This applies regardless
  349.               to  whatever  sort  of  output  GCC  is  producing,
  350.               whether  it  be an executable file, an object file,
  351.               an assembler file or preprocessed C code.
  352.  
  353.               Since only one output file  can  be  specified,  it
  354.               does not make sense to use `-✓-o✓o' when compiling more
  355.               than one input file, unless you  are  producing  an
  356.               executable file as output.
  357.  
  358.               If  you  do not specify `-✓-o✓o', the default is to put
  359.               an executable file in `a✓a.✓.o✓ou✓ut✓t', the object file  for
  360.               `_✓s_✓o_✓u_✓r_✓c_✓e.✓._✓s_✓u_✓f_✓f_✓i_✓x'  in  `_✓s_✓o_✓u_✓r_✓c_✓e.✓.o✓o', its assembler file
  361.               in `_✓s_✓o_✓u_✓r_✓c_✓e.✓.s✓s', and all  preprocessed  C  source  on
  362.               standard output.
  363.  
  364.        -✓-v✓v     Print  (on standard error output) the commands exe-
  365.               cuted to run the stages of compilation.  Also print
  366.               the  version  number of the compiler driver program
  367.               and of the preprocessor and the compiler proper.
  368.  
  369.        -✓-p✓pi✓ip✓pe✓e  Use pipes rather than temporary files for  communi-
  370.               cation  between  the various stages of compilation.
  371.               This fails to work on some systems where the assem-
  372.               bler cannot read from a pipe; but the GNU assembler
  373.               has no trouble.
  374.  
  375.  
  376. L✓LA✓AN✓NG✓GU✓UA✓AG✓GE✓E O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  377.        The following options control the dialect of  C  that  the
  378.        compiler accepts:
  379.  
  380.        -✓-a✓an✓ns✓si✓i  Support all ANSI standard C programs.
  381.  
  382.               This  turns  off certain features of GNU C that are
  383.               incompatible with ANSI C, such as the  a✓as✓sm✓m,  i✓in✓nl✓li✓in✓ne✓e
  384.               and  t✓ty✓yp✓pe✓eo✓of✓f keywords, and predefined macros such as
  385.               u✓un✓ni✓ix✓x and v✓va✓ax✓x that identify the type of  system  you
  386.               are  using.   It  also  enables the undesirable and
  387.               rarely used ANSI trigraph  feature,  and  disallows
  388.               `$✓$' as part of identifiers.
  389.  
  390.               The   alternate  keywords  _✓__✓_a✓as✓sm✓m_✓__✓_,  _✓__✓_e✓ex✓xt✓te✓en✓ns✓si✓io✓on✓n_✓__✓_,
  391.  
  392.  
  393.  
  394. GNU Tools                   1993/10/13                          6
  395.  
  396.  
  397.  
  398.  
  399.  
  400. GCC(1)                      GNU Tools                      GCC(1)
  401.  
  402.  
  403.               _✓__✓_i✓in✓nl✓li✓in✓ne✓e_✓__✓_ and _✓__✓_t✓ty✓yp✓pe✓eo✓of✓f_✓__✓_ continue to work  despite
  404.               `-✓-a✓an✓ns✓si✓i'.  You would not want to use them in an ANSI
  405.               C program, of course, but it is useful to put  them
  406.               in  header files that might be included in compila-
  407.               tions  done  with  `-✓-a✓an✓ns✓si✓i'.   Alternate  predefined
  408.               macros such as _✓__✓_u✓un✓ni✓ix✓x_✓__✓_ and _✓__✓_v✓va✓ax✓x_✓__✓_ are also avail-
  409.               able, with or without `-✓-a✓an✓ns✓si✓i'.
  410.  
  411.               The `-✓-a✓an✓ns✓si✓i' option does not cause non-ANSI programs
  412.               to be rejected gratuitously.  For that, `-✓-p✓pe✓ed✓da✓an✓nt✓ti✓ic✓c'
  413.               is required in addition to `-✓-a✓an✓ns✓si✓i'.
  414.  
  415.               The preprocessor predefines a macro _✓__✓_S✓ST✓TR✓RI✓IC✓CT✓T_✓_A✓AN✓NS✓SI✓I_✓__✓_
  416.               when you use the `-✓-a✓an✓ns✓si✓i' option.  Some header files
  417.               may notice this macro and  refrain  from  declaring
  418.               certain  functions  or defining certain macros that
  419.               the ANSI standard doesn't  call  for;  this  is  to
  420.               avoid  interfering with any programs that might use
  421.               these names for other things.
  422.  
  423.        -✓-f✓fn✓no✓o-✓-a✓as✓sm✓m
  424.               Do not recognize a✓as✓sm✓m, i✓in✓nl✓li✓in✓ne✓e or t✓ty✓yp✓pe✓eo✓of✓f  as  a  key-
  425.               word.  These words may then be used as identifiers.
  426.               You can use _✓__✓_a✓as✓sm✓m_✓__✓_, _✓__✓_i✓in✓nl✓li✓in✓ne✓e_✓__✓_ and _✓__✓_t✓ty✓yp✓pe✓eo✓of✓f_✓__✓_  in-
  427.               stead.  `-✓-a✓an✓ns✓si✓i' implies `-✓-f✓fn✓no✓o-✓-a✓as✓sm✓m'.
  428.  
  429.        -✓-f✓fn✓no✓o-✓-b✓bu✓ui✓il✓lt✓ti✓in✓n
  430.               Don't  recognize built-in functions that do not be-
  431.               gin with two leading underscores.   Currently,  the
  432.               functions affected include _✓_e✓ex✓xi✓it✓t, a✓ab✓bo✓or✓rt✓t, a✓ab✓bs✓s, a✓al✓ll✓lo✓o-✓-
  433.               c✓ca✓a, c✓co✓os✓s, e✓ex✓xi✓it✓t, f✓fa✓ab✓bs✓s,  l✓la✓ab✓bs✓s,  m✓me✓em✓mc✓cm✓mp✓p,  m✓me✓em✓mc✓cp✓py✓y,  s✓si✓in✓n,
  434.               s✓sq✓qr✓rt✓t, s✓st✓tr✓rc✓cm✓mp✓p, s✓st✓tr✓rc✓cp✓py✓y, and s✓st✓tr✓rl✓le✓en✓n.
  435.  
  436.               The  `-✓-a✓an✓ns✓si✓i'  option prevents a✓al✓ll✓lo✓oc✓ca✓a and _✓_e✓ex✓xi✓it✓t from
  437.               being builtin functions.
  438.  
  439.        -✓-f✓fn✓no✓o-✓-s✓st✓tr✓ri✓ic✓ct✓t-✓-p✓pr✓ro✓ot✓to✓ot✓ty✓yp✓pe✓e
  440.               Treat a function  declaration  with  no  arguments,
  441.               such as `i✓in✓nt✓t f✓fo✓oo✓o ();', as C would treat it--as say-
  442.               ing nothing about the number of arguments or  their
  443.               types  (C++ only).  Normally, such a declaration in
  444.               C++ means that the function f✓fo✓oo✓o takes no arguments.
  445.  
  446.        -✓-t✓tr✓ri✓ig✓gr✓ra✓ap✓ph✓hs✓s
  447.               Support  ANSI  C trigraphs.  The `-✓-a✓an✓ns✓si✓i' option im-
  448.               plies `-✓-t✓tr✓ri✓ig✓gr✓ra✓ap✓ph✓hs✓s'.
  449.  
  450.        -✓-t✓tr✓ra✓ad✓di✓it✓ti✓io✓on✓na✓al✓l
  451.               Attempt to support some aspects  of  traditional  C
  452.               compilers.   For details, see the GNU C Manual; the
  453.               duplicate list here has been  deleted  so  that  we
  454.               won't get complaints when it is out of date.
  455.  
  456.               But  one  note  about  C++  programs  only (not C).
  457.  
  458.  
  459.  
  460. GNU Tools                   1993/10/13                          7
  461.  
  462.  
  463.  
  464.  
  465.  
  466. GCC(1)                      GNU Tools                      GCC(1)
  467.  
  468.  
  469.               `-✓-t✓tr✓ra✓ad✓di✓it✓ti✓io✓on✓na✓al✓l' has one additional effect  for  C++:
  470.               assignment  to t✓th✓hi✓is✓s is permitted.  This is the same
  471.               as the effect of `-✓-f✓ft✓th✓hi✓is✓s-✓-i✓is✓s-✓-v✓va✓ar✓ri✓ia✓ab✓bl✓le✓e'.
  472.  
  473.        -✓-t✓tr✓ra✓ad✓di✓it✓ti✓io✓on✓na✓al✓l-✓-c✓cp✓pp✓p
  474.               Attempt to support some aspects  of  traditional  C
  475.               preprocessors.    This   includes  the  items  that
  476.               specifically mention the  preprocessor  above,  but
  477.               none of the other effects of `-✓-t✓tr✓ra✓ad✓di✓it✓ti✓io✓on✓na✓al✓l'.
  478.  
  479.        -✓-f✓fd✓do✓ol✓ll✓la✓ar✓rs✓s-✓-i✓in✓n-✓-i✓id✓de✓en✓nt✓ti✓if✓fi✓ie✓er✓rs✓s
  480.               Permit  the  use  of `$✓$' in identifiers (C++ only).
  481.               You can also use  `-✓-f✓fn✓no✓o-✓-d✓do✓ol✓ll✓la✓ar✓rs✓s-✓-i✓in✓n-✓-i✓id✓de✓en✓nt✓ti✓if✓fi✓ie✓er✓rs✓s'  to
  482.               explicitly  prohibit  use  of `$✓$'.  (GNU C++ allows
  483.               `$✓$' by default on some target systems but not  oth-
  484.               ers.)
  485.  
  486.        -✓-f✓fe✓en✓nu✓um✓m-✓-i✓in✓nt✓t-✓-e✓eq✓qu✓ui✓iv✓v
  487.               Permit  implicit  conversion  of i✓in✓nt✓t to enumeration
  488.               types (C++ only).  Normally GNU C++ allows  conver-
  489.               sion  of e✓en✓nu✓um✓m to i✓in✓nt✓t, but not the other way around.
  490.  
  491.        -✓-f✓fe✓ex✓xt✓te✓er✓rn✓na✓al✓l-✓-t✓te✓em✓mp✓pl✓la✓at✓te✓es✓s
  492.               Produce smaller code for template declarations,  by
  493.               generating  only  a  single  copy  of each template
  494.               function where it is defined (C++  only).   To  use
  495.               this  option  successfully,  you must also mark all
  496.               files  that  use  templates  with  either  `#✓#p✓pr✓ra✓ag✓gm✓ma✓a
  497.               i✓im✓mp✓pl✓le✓em✓me✓en✓nt✓ta✓at✓ti✓io✓on✓n'   (the   definition)   or  `#✓#p✓pr✓ra✓ag✓gm✓ma✓a
  498.               i✓in✓nt✓te✓er✓rf✓fa✓ac✓ce✓e' (declarations).
  499.  
  500.               When     your     code     is     compiled     with
  501.               `-✓-f✓fe✓ex✓xt✓te✓er✓rn✓na✓al✓l-✓-t✓te✓em✓mp✓pl✓la✓at✓te✓es✓s', all template instantiations
  502.               are external.  You must arrange for  all  necessary
  503.               instantiations  to  appear  in  the  implementation
  504.               file; you can do this with a  t✓ty✓yp✓pe✓ed✓de✓ef✓f  that  refer-
  505.               ences  each instantiation needed.  Conversely, when
  506.               you    compile    using    the    default    option
  507.               `-✓-f✓fn✓no✓o-✓-e✓ex✓xt✓te✓er✓rn✓na✓al✓l-✓-t✓te✓em✓mp✓pl✓la✓at✓te✓es✓s',  all template instantia-
  508.               tions are explicitly internal.
  509.  
  510.        -✓-f✓fa✓al✓ll✓l-✓-v✓vi✓ir✓rt✓tu✓ua✓al✓l
  511.               Treat all possible member functions as virtual, im-
  512.               plicitly.   All  member  functions (except for con-
  513.               structor functions and n✓ne✓ew✓w or d✓de✓el✓le✓et✓te✓e member  opera-
  514.               tors) are treated as virtual functions of the class
  515.               where they appear.
  516.  
  517.               This does not mean that all calls to  these  member
  518.               functions  will  be made through the internal table
  519.               of virtual functions.   Under  some  circumstances,
  520.               the  compiler  can determine that a call to a given
  521.               virtual function can be  made  directly;  in  these
  522.               cases the calls are direct in any case.
  523.  
  524.  
  525.  
  526. GNU Tools                   1993/10/13                          8
  527.  
  528.  
  529.  
  530.  
  531.  
  532. GCC(1)                      GNU Tools                      GCC(1)
  533.  
  534.  
  535.        -✓-f✓fc✓co✓on✓nd✓d-✓-m✓mi✓is✓sm✓ma✓at✓tc✓ch✓h
  536.               Allow conditional expressions with mismatched types
  537.               in the second and third arguments.   The  value  of
  538.               such an expression is void.
  539.  
  540.        -✓-f✓ft✓th✓hi✓is✓s-✓-i✓is✓s-✓-v✓va✓ar✓ri✓ia✓ab✓bl✓le✓e
  541.               Permit assignment to t✓th✓hi✓is✓s (C++ only).  The incorpo-
  542.               ration of user-defined free store  management  into
  543.               C++  has  made assignment to `t✓th✓hi✓is✓s' an anachronism.
  544.               Therefore, by default it is invalid  to  assign  to
  545.               t✓th✓hi✓is✓s  within a class member function.  However, for
  546.               backwards compatibility, you can make it valid with
  547.               `-✓-f✓ft✓th✓hi✓is✓s-✓-i✓is✓s-✓-v✓va✓ar✓ri✓ia✓ab✓bl✓le✓e'.
  548.  
  549.        -✓-f✓fu✓un✓ns✓si✓ig✓gn✓ne✓ed✓d-✓-c✓ch✓ha✓ar✓r
  550.               Let  the type c✓ch✓ha✓ar✓r be unsigned, like u✓un✓ns✓si✓ig✓gn✓ne✓ed✓d c✓ch✓ha✓ar✓r.
  551.  
  552.               Each kind of machine has a default  for  what  c✓ch✓ha✓ar✓r
  553.               should  be.  It is either like u✓un✓ns✓si✓ig✓gn✓ne✓ed✓d c✓ch✓ha✓ar✓r by de-
  554.               fault or like s✓si✓ig✓gn✓ne✓ed✓d c✓ch✓ha✓ar✓r by default.
  555.  
  556.               Ideally,  a  portable  program  should  always  use
  557.               s✓si✓ig✓gn✓ne✓ed✓d c✓ch✓ha✓ar✓r or u✓un✓ns✓si✓ig✓gn✓ne✓ed✓d c✓ch✓ha✓ar✓r when it depends on the
  558.               signedness of an object.  But  many  programs  have
  559.               been  written to use plain c✓ch✓ha✓ar✓r and expect it to be
  560.               signed, or expect it to be unsigned,  depending  on
  561.               the  machines  they were written for.  This option,
  562.               and its inverse, let you make such a  program  work
  563.               with the opposite default.
  564.  
  565.               The  type  c✓ch✓ha✓ar✓r is always a distinct type from each
  566.               of s✓si✓ig✓gn✓ne✓ed✓d c✓ch✓ha✓ar✓r and u✓un✓ns✓si✓ig✓gn✓ne✓ed✓d c✓ch✓ha✓ar✓r, even  though  its
  567.               behavior is always just like one of those two.
  568.  
  569.        -✓-f✓fs✓si✓ig✓gn✓ne✓ed✓d-✓-c✓ch✓ha✓ar✓r
  570.               Let the type c✓ch✓ha✓ar✓r be signed, like s✓si✓ig✓gn✓ne✓ed✓d c✓ch✓ha✓ar✓r.
  571.  
  572.               Note     that     this     is     equivalent     to
  573.               `-✓-f✓fn✓no✓o-✓-u✓un✓ns✓si✓ig✓gn✓ne✓ed✓d-✓-c✓ch✓ha✓ar✓r', which is the negative form of
  574.               `-✓-f✓fu✓un✓ns✓si✓ig✓gn✓ne✓ed✓d-✓-c✓ch✓ha✓ar✓r'.  Likewise, `-✓-f✓fn✓no✓o-✓-s✓si✓ig✓gn✓ne✓ed✓d-✓-c✓ch✓ha✓ar✓r' is
  575.               equivalent to `-✓-f✓fu✓un✓ns✓si✓ig✓gn✓ne✓ed✓d-✓-c✓ch✓ha✓ar✓r'.
  576.  
  577.        -✓-f✓fs✓si✓ig✓gn✓ne✓ed✓d-✓-b✓bi✓it✓tf✓fi✓ie✓el✓ld✓ds✓s
  578.  
  579.        -✓-f✓fu✓un✓ns✓si✓ig✓gn✓ne✓ed✓d-✓-b✓bi✓it✓tf✓fi✓ie✓el✓ld✓ds✓s
  580.  
  581.        -✓-f✓fn✓no✓o-✓-s✓si✓ig✓gn✓ne✓ed✓d-✓-b✓bi✓it✓tf✓fi✓ie✓el✓ld✓ds✓s
  582.  
  583.        -✓-f✓fn✓no✓o-✓-u✓un✓ns✓si✓ig✓gn✓ne✓ed✓d-✓-b✓bi✓it✓tf✓fi✓ie✓el✓ld✓ds✓s
  584.               These options control whether a bitfield is  signed
  585.               or   unsigned,   when  declared  with  no  explicit
  586.               `s✓si✓ig✓gn✓ne✓ed✓d' or `u✓un✓ns✓si✓ig✓gn✓ne✓ed✓d' qualifier.  By default, such
  587.               a  bitfield  is signed, because this is consistent:
  588.               the basic integer types  such  as  i✓in✓nt✓t  are  signed
  589.  
  590.  
  591.  
  592. GNU Tools                   1993/10/13                          9
  593.  
  594.  
  595.  
  596.  
  597.  
  598. GCC(1)                      GNU Tools                      GCC(1)
  599.  
  600.  
  601.               types.
  602.  
  603.               However, when you specify `-✓-t✓tr✓ra✓ad✓di✓it✓ti✓io✓on✓na✓al✓l', bitfields
  604.               are all unsigned no matter what.
  605.  
  606.        -✓-f✓fw✓wr✓ri✓it✓ta✓ab✓bl✓le✓e-✓-s✓st✓tr✓ri✓in✓ng✓gs✓s
  607.               Store string constants in the writable data segment
  608.               and don't uniquize them.  This is for compatibility
  609.               with old programs which assume they can write  into
  610.               string constants.  `-✓-t✓tr✓ra✓ad✓di✓it✓ti✓io✓on✓na✓al✓l' also has this ef-
  611.               fect.
  612.  
  613.               Writing into string constants is a very  bad  idea;
  614.               "constants" should be constant.
  615.  
  616. P✓PR✓RE✓EP✓PR✓RO✓OC✓CE✓ES✓SS✓SO✓OR✓R O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  617.        These  options control the C preprocessor, which is run on
  618.        each C source file before actual compilation.
  619.  
  620.        If you use the `-✓-E✓E' option, GCC does nothing  except  pre-
  621.        processing.  Some of these options make sense only togeth-
  622.        er with `-✓-E✓E' because they cause the preprocessor output to
  623.        be unsuitable for actual compilation.
  624.  
  625.        -✓-i✓in✓nc✓cl✓lu✓ud✓de✓e _✓f_✓i_✓l_✓e
  626.               Process _✓f_✓i_✓l_✓e as input before processing the regular
  627.               input file.  In effect, the contents  of  _✓f_✓i_✓l_✓e  are
  628.               compiled  first.   Any `-✓-D✓D' and `-✓-U✓U' options on the
  629.               command line are always processed before  `-✓-i✓in✓nc✓cl✓lu✓ud✓de✓e
  630.               _✓f_✓i_✓l_✓e',  regardless  of  the order in which they are
  631.               written.  All the `-✓-i✓in✓nc✓cl✓lu✓ud✓de✓e' and `-✓-i✓im✓ma✓ac✓cr✓ro✓os✓s' options
  632.               are  processed in the order in which they are writ-
  633.               ten.
  634.  
  635.        -✓-i✓im✓ma✓ac✓cr✓ro✓os✓s _✓f_✓i_✓l_✓e
  636.               Process _✓f_✓i_✓l_✓e as  input,  discarding  the  resulting
  637.               output,  before  processing the regular input file.
  638.               Because the output generated from _✓f_✓i_✓l_✓e is  discard-
  639.               ed,  the  only effect of `-✓-i✓im✓ma✓ac✓cr✓ro✓os✓s _✓f_✓i_✓l_✓e' is to make
  640.               the macros defined in _✓f_✓i_✓l_✓e available for use in the
  641.               main  input.   The  preprocessor evaluates any `-✓-D✓D'
  642.               and `-✓-U✓U' options on the command  line  before  pro-
  643.               cessing  `-✓-i✓im✓ma✓ac✓cr✓ro✓os✓s_✓f_✓i_✓l_✓e', regardless of the order in
  644.               which they are written.   All  the  `-✓-i✓in✓nc✓cl✓lu✓ud✓de✓e'  and
  645.               `-✓-i✓im✓ma✓ac✓cr✓ro✓os✓s'  options  are  processed in the order in
  646.               which they are written.
  647.  
  648.        -✓-i✓id✓di✓ir✓ra✓af✓ft✓te✓er✓r _✓d_✓i_✓r
  649.               Add the directory _✓d_✓i_✓r to the second  include  path.
  650.               The  directories  on  the  second  include path are
  651.               searched when a header file is not found in any  of
  652.               the  directories  in the main include path (the one
  653.               that `-✓-I✓I' adds to).
  654.  
  655.  
  656.  
  657.  
  658. GNU Tools                   1993/10/13                         10
  659.  
  660.  
  661.  
  662.  
  663.  
  664. GCC(1)                      GNU Tools                      GCC(1)
  665.  
  666.  
  667.        -✓-i✓ip✓pr✓re✓ef✓fi✓ix✓x _✓p_✓r_✓e_✓f_✓i_✓x
  668.               Specify  _✓p_✓r_✓e_✓f_✓i_✓x  as  the  prefix   for   subsequent
  669.               `-✓-i✓iw✓wi✓it✓th✓hp✓pr✓re✓ef✓fi✓ix✓x' options.
  670.  
  671.        -✓-i✓iw✓wi✓it✓th✓hp✓pr✓re✓ef✓fi✓ix✓x _✓d_✓i_✓r
  672.               Add  a  directory  to the second include path.  The
  673.               directory's name is made  by  concatenating  _✓p_✓r_✓e_✓f_✓i_✓x
  674.               and _✓d_✓i_✓r, where _✓p_✓r_✓e_✓f_✓i_✓x was specified previously with
  675.               `-✓-i✓ip✓pr✓re✓ef✓fi✓ix✓x'.
  676.  
  677.        -✓-n✓no✓os✓st✓td✓di✓in✓nc✓c
  678.               Do not search the standard system  directories  for
  679.               header files.  Only the directories you have speci-
  680.               fied with `-✓-I✓I' options (and the current  directory,
  681.               if appropriate) are searched.
  682.  
  683.               By  using both `-✓-n✓no✓os✓st✓td✓di✓in✓nc✓c' and `-✓-I✓I-✓-', you can limit
  684.               the include-file search file to only those directo-
  685.               ries you specify explicitly.
  686.  
  687.        -✓-n✓no✓os✓st✓td✓di✓in✓nc✓c+✓++✓+
  688.               Do  not search for header files in the C++-specific
  689.               standard directories, but do still search the other
  690.               standard  directories.   (This  option is used when
  691.               building `l✓li✓ib✓bg✓g+✓++✓+'.)
  692.  
  693.        -✓-u✓un✓nd✓de✓ef✓f Do not predefine any nonstandard macros.   (Includ-
  694.               ing architecture flags).
  695.  
  696.        -✓-E✓E     Run  only the C preprocessor.  Preprocess all the C
  697.               source files specified and output  the  results  to
  698.               standard output or to the specified output file.
  699.  
  700.        -✓-C✓C     Tell  the  preprocessor  not  to  discard comments.
  701.               Used with the `-✓-E✓E' option.
  702.  
  703.        -✓-P✓P     Tell the preprocessor not to generate `#✓#l✓li✓in✓ne✓e'  com-
  704.               mands.  Used with the `-✓-E✓E' option.
  705.  
  706.        -✓-M✓M  [✓[ -✓-M✓MG✓G ]✓]
  707.               Tell the preprocessor to output a rule suitable for
  708.               m✓ma✓ak✓ke✓e describing the  dependencies  of  each  object
  709.               file.   For each source file, the preprocessor out-
  710.               puts one m✓ma✓ak✓ke✓e-rule whose target is the object  file
  711.               name  for  that  source file and whose dependencies
  712.               are all the files `#✓#i✓in✓nc✓cl✓lu✓ud✓de✓e'd in it.  This rule may
  713.               be  a single line or may be continued with `\✓\'-new-
  714.               line if it is long.  The list of rules  is  printed
  715.               on  standard  output  instead of the preprocessed C
  716.               program.
  717.  
  718.               `-✓-M✓M' implies `-✓-E✓E'.
  719.  
  720.               `-✓-M✓MG✓G' says to treat missing header files as  gener-
  721.  
  722.  
  723.  
  724. GNU Tools                   1993/10/13                         11
  725.  
  726.  
  727.  
  728.  
  729.  
  730. GCC(1)                      GNU Tools                      GCC(1)
  731.  
  732.  
  733.               ated  files and assume they live in the same direc-
  734.               tory as the source file.  It must be  specified  in
  735.               addition to `-✓-M✓M'.
  736.  
  737.        -✓-M✓MM✓M  [✓[ -✓-M✓MG✓G ]✓]
  738.               Like  `-✓-M✓M'  but  the  output mentions only the user
  739.               header files included with `#✓#i✓in✓nc✓cl✓lu✓ud✓de✓e _✓f_✓i_✓l_✓e"'.   Sys-
  740.               tem  header  files  included with `#✓#i✓in✓nc✓cl✓lu✓ud✓de✓e <✓<_✓f_✓i_✓l_✓e>'
  741.               are omitted.
  742.  
  743.        -✓-M✓MD✓D    Like `-✓-M✓M' but the dependency information is written
  744.               to  files  with  names  made by replacing `.✓.o✓o' with
  745.               `.✓.d✓d' at the end of the output file names.  This  is
  746.               in    addition    to    compiling   the   file   as
  747.               specified--`-✓-M✓MD✓D' does not inhibit ordinary compila-
  748.               tion the way `-✓-M✓M' does.
  749.  
  750.               The Mach utility `m✓md✓d' can be used to merge the `.✓.d✓d'
  751.               files into a single dependency  file  suitable  for
  752.               using with the `m✓ma✓ak✓ke✓e' command.
  753.  
  754.        -✓-M✓MM✓MD✓D   Like  `-✓-M✓MD✓D'  except mention only user header files,
  755.               not system header files.
  756.  
  757.        -✓-H✓H     Print the name of each header file used,  in  addi-
  758.               tion to other normal activities.
  759.  
  760.        -✓-A✓A_✓q_✓u_✓e_✓s_✓t_✓i_✓o_✓n(✓(_✓a_✓n_✓s_✓w_✓e_✓r)✓)
  761.               Assert  the  answer _✓a_✓n_✓s_✓w_✓e_✓r for _✓q_✓u_✓e_✓s_✓t_✓i_✓o_✓n, in case it
  762.               is tested with a preprocessor conditional  such  as
  763.               `#✓#i✓if✓f  #✓#_✓q_✓u_✓e_✓s_✓t_✓i_✓o_✓n(✓(_✓a_✓n_✓s_✓w_✓e_✓r)✓)'.  `-✓-A✓A-✓-' disables the stan-
  764.               dard assertions that normally describe  the  target
  765.               machine.
  766.  
  767.        -✓-A✓A_✓q_✓u_✓e_✓s_✓t_✓i_✓o_✓n
  768.               (_✓a_✓n_✓s_✓w_✓e_✓r)  Assert the answer _✓a_✓n_✓s_✓w_✓e_✓r for _✓q_✓u_✓e_✓s_✓t_✓i_✓o_✓n, in
  769.               case it is tested with a  preprocessor  conditional
  770.               such  as  `#✓#i✓if✓f  #_✓q_✓u_✓e_✓s_✓t_✓i_✓o_✓n(_✓a_✓n_✓s_✓w_✓e_✓r)'.  `-✓-A✓A-✓-' disables
  771.               the standard assertions that normally describe  the
  772.               target machine.
  773.  
  774.        -✓-D✓D_✓m_✓a_✓c_✓r_✓o
  775.               Define macro _✓m_✓a_✓c_✓r_✓o with the string `1✓1' as its defi-
  776.               nition.
  777.  
  778.        -✓-D✓D_✓m_✓a_✓c_✓r_✓o=✓=_✓d_✓e_✓f_✓n
  779.               Define macro _✓m_✓a_✓c_✓r_✓o as  _✓d_✓e_✓f_✓n.     All  instances  of
  780.               `-✓-D✓D'  on  the command line are processed before any
  781.               `-✓-U✓U' options.
  782.  
  783.        -✓-U✓U_✓m_✓a_✓c_✓r_✓o
  784.               Undefine macro _✓m_✓a_✓c_✓r_✓o.  `-✓-U✓U' options  are  evaluated
  785.               after  all  `-✓-D✓D' options, but before any `-✓-i✓in✓nc✓cl✓lu✓ud✓de✓e'
  786.               and `-✓-i✓im✓ma✓ac✓cr✓ro✓os✓s' options.
  787.  
  788.  
  789.  
  790. GNU Tools                   1993/10/13                         12
  791.  
  792.  
  793.  
  794.  
  795.  
  796. GCC(1)                      GNU Tools                      GCC(1)
  797.  
  798.  
  799.        -✓-d✓dM✓M    Tell the preprocessor to output only a list of  the
  800.               macro  definitions that are in effect at the end of
  801.               preprocessing.  Used with the `-✓-E✓E' option.
  802.  
  803.        -✓-d✓dD✓D    Tell the preprocessor to pass all macro definitions
  804.               into  the  output,  in their proper sequence in the
  805.               rest of the output.
  806.  
  807.        -✓-d✓dN✓N    Like `-✓-d✓dD✓D' except that the macro arguments and con-
  808.               tents are omitted.  Only `#✓#d✓de✓ef✓fi✓in✓ne✓e _✓n_✓a_✓m_✓e' is included
  809.               in the output.
  810.  
  811. A✓AS✓SS✓SE✓EM✓MB✓BL✓LE✓ER✓R O✓OP✓PT✓TI✓IO✓ON✓N
  812.        -✓-W✓Wa✓a,✓,_✓o_✓p_✓t_✓i_✓o_✓n
  813.               Pass _✓o_✓p_✓t_✓i_✓o_✓n as an option to the assembler.  If  _✓o_✓p_✓-
  814.               _✓t_✓i_✓o_✓n contains commas, it is split into multiple op-
  815.               tions at the commas.
  816.  
  817. L✓LI✓IN✓NK✓KE✓ER✓R O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  818.        These options come into play when the compiler  links  ob-
  819.        ject files into an executable output file.  They are mean-
  820.        ingless if the compiler is not doing a link step.
  821.  
  822.        _✓o_✓b_✓j_✓e_✓c_✓t_✓-_✓f_✓i_✓l_✓e_✓-_✓n_✓a_✓m_✓e
  823.               A file name that does not end in a  special  recog-
  824.               nized  suffix  is considered to name an object file
  825.               or library.  (Object files are  distinguished  from
  826.               libraries  by the linker according to the file con-
  827.               tents.)  If GCC does  a  link  step,  these  object
  828.               files are used as input to the linker.
  829.  
  830.        -✓-l✓l_✓l_✓i_✓b_✓r_✓a_✓r_✓y
  831.               Use the library named _✓l_✓i_✓b_✓r_✓a_✓r_✓y when linking.
  832.  
  833.               The  linker searches a standard list of directories
  834.               for the library, which is  actually  a  file  named
  835.               `l✓li✓ib✓b_✓l_✓i_✓b_✓r_✓a_✓r_✓y.a'.   The linker then uses this file as
  836.               if it had been specified precisely by name.
  837.  
  838.               The directories searched include  several  standard
  839.               system  directories  plus any that you specify with
  840.               `-✓-L✓L'.
  841.  
  842.               Normally the  files  found  this  way  are  library
  843.               files--archive   files  whose  members  are  object
  844.               files.  The linker handles an archive file by scan-
  845.               ning  through  it  for members which define symbols
  846.               that have so far been referenced but  not  defined.
  847.               However,  if  the  linker  finds an ordinary object
  848.               file rather than a  library,  the  object  file  is
  849.               linked  in  the usual fashion.  The only difference
  850.               between using an `-✓-l✓l' option and specifying a  file
  851.               name  is that `-✓-l✓l' surrounds _✓l_✓i_✓b_✓r_✓a_✓r_✓y with `l✓li✓ib✓b' and
  852.               `.✓.a✓a' and searches several directories.
  853.  
  854.  
  855.  
  856. GNU Tools                   1993/10/13                         13
  857.  
  858.  
  859.  
  860.  
  861.  
  862. GCC(1)                      GNU Tools                      GCC(1)
  863.  
  864.  
  865.        -✓-l✓lo✓ob✓bj✓jc✓c You need this special case of the -✓-l✓l option in  or-
  866.               der to link an Objective C program.
  867.  
  868.        -✓-n✓no✓os✓st✓ta✓ar✓rt✓tf✓fi✓il✓le✓es✓s
  869.               Do  not  use the standard system startup files when
  870.               linking.  The standard libraries are used normally.
  871.  
  872.        -✓-n✓no✓os✓st✓td✓dl✓li✓ib✓b
  873.               Don't use the standard system libraries and startup
  874.               files when linking.  Only  the  files  you  specify
  875.               will be passed to the linker.
  876.  
  877.        -✓-s✓st✓ta✓at✓ti✓ic✓c
  878.               On  systems that support dynamic linking, this pre-
  879.               vents linking with the shared libraries.  On  other
  880.               systems, this option has no effect.
  881.  
  882.        -✓-s✓sh✓ha✓ar✓re✓ed✓d
  883.               Produce  a  shared  object which can then be linked
  884.               with other objects to form an executable.   Only  a
  885.               few systems support this option.
  886.  
  887.        -✓-s✓sy✓ym✓mb✓bo✓ol✓li✓ic✓c
  888.               Bind  references  to global symbols when building a
  889.               shared object.  Warn about  any  unresolved  refer-
  890.               ences  (unless overridden by the link editor option
  891.               `-✓-X✓Xl✓li✓in✓nk✓ke✓er✓r -✓-z✓z -✓-X✓Xl✓li✓in✓nk✓ke✓er✓r d✓de✓ef✓fs✓s').  Only a  few  systems
  892.               support this option.
  893.  
  894.        -✓-X✓Xl✓li✓in✓nk✓ke✓er✓r _✓o_✓p_✓t_✓i_✓o_✓n
  895.               Pass  _✓o_✓p_✓t_✓i_✓o_✓n  as  an option to the linker.  You can
  896.               use this to supply system-specific  linker  options
  897.               which GNU CC does not know how to recognize.
  898.  
  899.               If  you  want to pass an option that takes an argu-
  900.               ment, you must use `-✓-X✓Xl✓li✓in✓nk✓ke✓er✓r' twice, once  for  the
  901.               option  and once for the argument.  For example, to
  902.               pass `-✓-a✓as✓ss✓se✓er✓rt✓t d✓de✓ef✓fi✓in✓ni✓it✓ti✓io✓on✓ns✓s', you must write `-✓-X✓Xl✓li✓in✓nk✓k-✓-
  903.               e✓er✓r -✓-a✓as✓ss✓se✓er✓rt✓t -✓-X✓Xl✓li✓in✓nk✓ke✓er✓r d✓de✓ef✓fi✓in✓ni✓it✓ti✓io✓on✓ns✓s'.  It does not work
  904.               to write `-✓-X✓Xl✓li✓in✓nk✓ke✓er✓r "✓"-✓-a✓as✓ss✓se✓er✓rt✓t d✓de✓ef✓fi✓in✓ni✓it✓ti✓io✓on✓ns✓s"✓"',  because
  905.               this passes the entire string as a single argument,
  906.               which is not what the linker expects.
  907.  
  908.        -✓-W✓Wl✓l,✓,_✓o_✓p_✓t_✓i_✓o_✓n
  909.               Pass _✓o_✓p_✓t_✓i_✓o_✓n as an option to the linker.  If  _✓o_✓p_✓t_✓i_✓o_✓n
  910.               contains  commas, it is split into multiple options
  911.               at the commas.
  912.  
  913.        -✓-u✓u _✓s_✓y_✓m_✓b_✓o_✓l
  914.               Pretend the symbol _✓s_✓y_✓m_✓b_✓o_✓l is  undefined,  to  force
  915.               linking  of  library modules to define it.  You can
  916.               use `-✓-u✓u' multiple times with different  symbols  to
  917.               force loading of additional library modules.
  918.  
  919.  
  920.  
  921.  
  922. GNU Tools                   1993/10/13                         14
  923.  
  924.  
  925.  
  926.  
  927.  
  928. GCC(1)                      GNU Tools                      GCC(1)
  929.  
  930.  
  931. D✓DI✓IR✓RE✓EC✓CT✓TO✓OR✓RY✓Y O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  932.        These  options  specify  directories  to search for header
  933.        files, for libraries and for parts of the compiler:
  934.  
  935.        -✓-I✓I_✓d_✓i_✓r  Append directory _✓d_✓i_✓r to  the  list  of  directories
  936.               searched for include files.
  937.  
  938.        -✓-I✓I-✓-    Any  directories  you specify with `-✓-I✓I' options be-
  939.               fore the `-✓-I✓I-✓-' option are  searched  only  for  the
  940.               case  of  `#✓#i✓in✓nc✓cl✓lu✓ud✓de✓e  "✓"_✓f_✓i_✓l_✓e"✓"'; they are not searched
  941.               for `#✓#i✓in✓nc✓cl✓lu✓ud✓de✓e <✓<_✓f_✓i_✓l_✓e>'.
  942.  
  943.               If additional directories are specified  with  `-✓-I✓I'
  944.               options  after  the  `-✓-I✓I-✓-',  these  directories are
  945.               searched for all `#✓#i✓in✓nc✓cl✓lu✓ud✓de✓e' directives.  (Ordinari-
  946.               ly _✓a_✓l_✓l `-✓-I✓I' directories are used this way.)
  947.  
  948.               In  addition,  the `-✓-I✓I-✓-' option inhibits the use of
  949.               the current directory (where the current input file
  950.               came  from) as the first search directory for `#✓#i✓in✓n-✓-
  951.               c✓cl✓lu✓ud✓de✓e "✓"_✓f_✓i_✓l_✓e"✓"'.  There is no way  to  override  this
  952.               effect  of  `-✓-I✓I-✓-'.   With  `-✓-I✓I.✓.'  you  can  specify
  953.               searching the directory which was current when  the
  954.               compiler was invoked.  That is not exactly the same
  955.               as what the preprocessor does by default, but it is
  956.               often satisfactory.
  957.  
  958.               `-✓-I✓I-✓-' does not inhibit the use of the standard sys-
  959.               tem directories for header files.  Thus, `-✓-I✓I-✓-'  and
  960.               `-✓-n✓no✓os✓st✓td✓di✓in✓nc✓c' are independent.
  961.  
  962.        -✓-L✓L_✓d_✓i_✓r  Add  directory _✓d_✓i_✓r to the list of directories to be
  963.               searched for `-✓-l✓l'.
  964.  
  965.        -✓-B✓B_✓p_✓r_✓e_✓f_✓i_✓x
  966.               This option specifies where to  find  the  executa-
  967.               bles,  libraries and data files of the compiler it-
  968.               self.
  969.  
  970.               The compiler driver program runs one or more of the
  971.               subprograms  `c✓cp✓pp✓p', `c✓cc✓c1✓1' (or, for C++, `c✓cc✓c1✓1p✓pl✓lu✓us✓s'),
  972.               `a✓as✓s' and `l✓ld✓d'.  It tries _✓p_✓r_✓e_✓f_✓i_✓x  as  a  prefix  for
  973.               each program it tries to run, both with and without
  974.               `_✓m_✓a_✓c_✓h_✓i_✓n_✓e/✓/_✓v_✓e_✓r_✓s_✓i_✓o_✓n/✓/'.
  975.  
  976.               For each subprogram to be run, the compiler  driver
  977.               first  tries the `-✓-B✓B' prefix, if any.  If that name
  978.               is not found, or if `-✓-B✓B'  was  not  specified,  the
  979.               driver  tries  two  standard  prefixes,  which  are
  980.               `/✓/u✓us✓sr✓r/✓/l✓li✓ib✓b/✓/g✓gc✓cc✓c/✓/' and `/✓/u✓us✓sr✓r/✓/l✓lo✓oc✓ca✓al✓l/✓/l✓li✓ib✓b/✓/g✓gc✓cc✓c-✓-l✓li✓ib✓b/✓/'.   If
  981.               neither  of  those  results  in a file name that is
  982.               found, the compiler driver searches for the unmodi-
  983.               fied  program name, using the directories specified
  984.               in your `P✓PA✓AT✓TH✓H' environment variable.
  985.  
  986.  
  987.  
  988. GNU Tools                   1993/10/13                         15
  989.  
  990.  
  991.  
  992.  
  993.  
  994. GCC(1)                      GNU Tools                      GCC(1)
  995.  
  996.  
  997.               The  run-time  support  file  `l✓li✓ib✓bg✓gc✓cc✓c.✓.a✓a'  is   also
  998.               searched  for using the `-✓-B✓B' prefix, if needed.  If
  999.               it is not found there, the  two  standard  prefixes
  1000.               above are tried, and that is all.  The file is left
  1001.               out of the link if it is not found by those  means.
  1002.               Most  of  the time, on most machines, `l✓li✓ib✓bg✓gc✓cc✓c.✓.a✓a' is
  1003.               not actually necessary.
  1004.  
  1005.               You can get a similar result from  the  environment
  1006.               variable  G✓GC✓CC✓C_✓_E✓EX✓XE✓EC✓C_✓_P✓PR✓RE✓EF✓FI✓IX✓X;  if  it  is defined, its
  1007.               value is used as a prefix in the same way.  If both
  1008.               the  `-✓-B✓B'  option  and the G✓GC✓CC✓C_✓_E✓EX✓XE✓EC✓C_✓_P✓PR✓RE✓EF✓FI✓IX✓X variable
  1009.               are present, the `-✓-B✓B' option is used first and  the
  1010.               environment variable value second.
  1011.  
  1012. W✓WA✓AR✓RN✓NI✓IN✓NG✓G O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  1013.        Warnings are diagnostic messages that report constructions
  1014.        which are not inherently erroneous but which are risky  or
  1015.        suggest there may have been an error.
  1016.  
  1017.        These  options  control  the  amount and kinds of warnings
  1018.        produced by GNU CC:
  1019.  
  1020.        -✓-f✓fs✓sy✓yn✓nt✓ta✓ax✓x-✓-o✓on✓nl✓ly✓y
  1021.               Check the code for syntax errors,  but  don't  emit
  1022.               any output.
  1023.  
  1024.        -✓-w✓w     Inhibit all warning messages.
  1025.  
  1026.        -✓-W✓Wn✓no✓o-✓-i✓im✓mp✓po✓or✓rt✓t
  1027.               Inhibit  warning messages about the use of #✓#i✓im✓mp✓po✓or✓rt✓t.
  1028.  
  1029.        -✓-p✓pe✓ed✓da✓an✓nt✓ti✓ic✓c
  1030.               Issue all the  warnings  demanded  by  strict  ANSI
  1031.               standard  C; reject all programs that use forbidden
  1032.               extensions.
  1033.  
  1034.               Valid ANSI standard C programs should compile prop-
  1035.               erly with or without this option (though a rare few
  1036.               will require `-✓-a✓an✓ns✓si✓i').  However, without  this  op-
  1037.               tion, certain GNU extensions and traditional C fea-
  1038.               tures are supported as  well.   With  this  option,
  1039.               they  are rejected.  There is no reason to _✓u_✓s_✓e this
  1040.               option; it exists only to satisfy pedants.
  1041.  
  1042.               `-✓-p✓pe✓ed✓da✓an✓nt✓ti✓ic✓c' does not cause warning messages for use
  1043.               of the alternate keywords whose names begin and end
  1044.               with `_✓__✓_'.  Pedantic warnings are also disabled  in
  1045.               the  expression that follows _✓__✓_e✓ex✓xt✓te✓en✓ns✓si✓io✓on✓n_✓__✓_.  Howev-
  1046.               er, only system header files should use  these  es-
  1047.               cape  routes;  application  programs  should  avoid
  1048.               them.
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054. GNU Tools                   1993/10/13                         16
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060. GCC(1)                      GNU Tools                      GCC(1)
  1061.  
  1062.  
  1063.        -✓-p✓pe✓ed✓da✓an✓nt✓ti✓ic✓c-✓-e✓er✓rr✓ro✓or✓rs✓s
  1064.               Like `-✓-p✓pe✓ed✓da✓an✓nt✓ti✓ic✓c', except that errors  are  produced
  1065.               rather than warnings.
  1066.  
  1067.        -✓-W✓W     Print extra warning messages for these events:
  1068.  
  1069.           +✓o   A  nonvolatile  automatic variable might be changed
  1070.               by a call to l✓lo✓on✓ng✓gj✓jm✓mp✓p.  These warnings are  possible
  1071.               only in optimizing compilation.
  1072.  
  1073.               The  compiler  sees  only  the calls to s✓se✓et✓tj✓jm✓mp✓p.  It
  1074.               cannot know where l✓lo✓on✓ng✓gj✓jm✓mp✓p will be called; in  fact,
  1075.               a  signal handler could call it at any point in the
  1076.               code.  As a result, you may get a warning even when
  1077.               there  is in fact no problem because l✓lo✓on✓ng✓gj✓jm✓mp✓p cannot
  1078.               in fact be called at the place which would cause  a
  1079.               problem.
  1080.  
  1081.           +✓o   A function can return either with or without a val-
  1082.               ue.  (Falling off the end of the function  body  is
  1083.               considered  returning  without a value.)  For exam-
  1084.               ple, this function would evoke such a warning:
  1085.  
  1086.               foo (a)
  1087.               {
  1088.                 if (a > 0)
  1089.                   return a;
  1090.               }
  1091.  
  1092.               Spurious warnings can occur because GNU CC does not
  1093.               realize that certain functions (including a✓ab✓bo✓or✓rt✓t and
  1094.               l✓lo✓on✓ng✓gj✓jm✓mp✓p) will never return.
  1095.  
  1096.           +✓o   An expression-statement contains no side effects.
  1097.  
  1098.           +✓o   An unsigned value is compared against zero with `>✓>'
  1099.               or `<✓<=✓='.
  1100.  
  1101.  
  1102.        -✓-W✓Wi✓im✓mp✓pl✓li✓ic✓ci✓it✓t
  1103.               Warn whenever a function or parameter is implicitly
  1104.               declared.
  1105.  
  1106.        -✓-W✓Wr✓re✓et✓tu✓ur✓rn✓n-✓-t✓ty✓yp✓pe✓e
  1107.               Warn whenever a function is defined with a  return-
  1108.               type that defaults to i✓in✓nt✓t.  Also warn about any r✓re✓e-✓-
  1109.               t✓tu✓ur✓rn✓n statement with no return-value in  a  function
  1110.               whose return-type is not v✓vo✓oi✓id✓d.
  1111.  
  1112.        -✓-W✓Wu✓un✓nu✓us✓se✓ed✓d
  1113.               Warn whenever a local variable is unused aside from
  1114.               its declaration, whenever a  function  is  declared
  1115.               static  but never defined, and whenever a statement
  1116.               computes a result that is explicitly not used.
  1117.  
  1118.  
  1119.  
  1120. GNU Tools                   1993/10/13                         17
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126. GCC(1)                      GNU Tools                      GCC(1)
  1127.  
  1128.  
  1129.        -✓-W✓Ws✓sw✓wi✓it✓tc✓ch✓h
  1130.               Warn whenever a s✓sw✓wi✓it✓tc✓ch✓h statement has  an  index  of
  1131.               enumeral  type  and lacks a c✓ca✓as✓se✓e for one or more of
  1132.               the named codes of that enumeration.  (The presence
  1133.               of  a  d✓de✓ef✓fa✓au✓ul✓lt✓t  label prevents this warning.)  c✓ca✓as✓se✓e
  1134.               labels outside the enumeration range  also  provoke
  1135.               warnings when this option is used.
  1136.  
  1137.        -✓-W✓Wc✓co✓om✓mm✓me✓en✓nt✓t
  1138.               Warn whenever a comment-start sequence `/✓/*✓*' appears
  1139.               in a comment.
  1140.  
  1141.        -✓-W✓Wt✓tr✓ri✓ig✓gr✓ra✓ap✓ph✓hs✓s
  1142.               Warn if any  trigraphs  are  encountered  (assuming
  1143.               they are enabled).
  1144.  
  1145.        -✓-W✓Wf✓fo✓or✓rm✓ma✓at✓t
  1146.               Check calls to p✓pr✓ri✓in✓nt✓tf✓f and s✓sc✓ca✓an✓nf✓f, etc., to make sure
  1147.               that the arguments supplied have types  appropriate
  1148.               to the format string specified.
  1149.  
  1150.        -✓-W✓Wc✓ch✓ha✓ar✓r-✓-s✓su✓ub✓bs✓sc✓cr✓ri✓ip✓pt✓ts✓s
  1151.               Warn  if an array subscript has type c✓ch✓ha✓ar✓r.  This is
  1152.               a common cause of error, as programmers often  for-
  1153.               get that this type is signed on some machines.
  1154.  
  1155.        -✓-W✓Wu✓un✓ni✓in✓ni✓it✓ti✓ia✓al✓li✓iz✓ze✓ed✓d
  1156.               An  automatic  variable is used without first being
  1157.               initialized.
  1158.  
  1159.               These warnings are possible only in optimizing com-
  1160.               pilation,  because  they require data flow informa-
  1161.               tion that is computed only when optimizing.  If you
  1162.               don't  specify  `-✓-O✓O',  you  simply  won't get these
  1163.               warnings.
  1164.  
  1165.               These warnings occur only for  variables  that  are
  1166.               candidates  for  register  allocation.   Therefore,
  1167.               they do not occur for a variable that  is  declared
  1168.               v✓vo✓ol✓la✓at✓ti✓il✓le✓e,  or whose address is taken, or whose size
  1169.               is other than 1, 2, 4 or 8 bytes.   Also,  they  do
  1170.               not  occur  for  structures, unions or arrays, even
  1171.               when they are in registers.
  1172.  
  1173.               Note that there may be no warning about a  variable
  1174.               that is used only to compute a value that itself is
  1175.               never used, because such computations may be delet-
  1176.               ed  by  data  flow analysis before the warnings are
  1177.               printed.
  1178.  
  1179.               These warnings are made optional because GNU CC  is
  1180.               not  smart  enough  to  see all the reasons why the
  1181.               code might be correct despite appearing to have  an
  1182.               error.  Here is one example of how this can happen:
  1183.  
  1184.  
  1185.  
  1186. GNU Tools                   1993/10/13                         18
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192. GCC(1)                      GNU Tools                      GCC(1)
  1193.  
  1194.  
  1195.               {
  1196.                 int x;
  1197.                 switch (y)
  1198.                   {
  1199.                   case 1: x = 1;
  1200.                     break;
  1201.                   case 2: x = 4;
  1202.                     break;
  1203.                   case 3: x = 5;
  1204.                   }
  1205.                 foo (x);
  1206.               }
  1207.  
  1208.               If the value of y✓y is always 1, 2 or 3,  then  x✓x  is
  1209.               always  initialized,  but GNU CC doesn't know this.
  1210.               Here is another common case:
  1211.  
  1212.               {
  1213.                 int save_y;
  1214.                 if (change_y) save_y = y, y = new_y;
  1215.                 ...
  1216.                 if (change_y) y = save_y;
  1217.               }
  1218.  
  1219.               This has no bug because s✓sa✓av✓ve✓e_✓_y✓y is used only  if  it
  1220.               is set.
  1221.  
  1222.               Some  spurious  warnings  can be avoided if you de-
  1223.               clare as v✓vo✓ol✓la✓at✓ti✓il✓le✓e all the functions  you  use  that
  1224.               never return.
  1225.  
  1226.        -✓-W✓Wp✓pa✓ar✓re✓en✓nt✓th✓he✓es✓se✓es✓s
  1227.               Warn  if  parentheses  are  omitted in certain con-
  1228.               texts.
  1229.  
  1230.        -✓-W✓Wt✓te✓em✓mp✓pl✓la✓at✓te✓e-✓-d✓de✓eb✓bu✓ug✓gg✓gi✓in✓ng✓g
  1231.               When using templates in a C++ program, warn if  de-
  1232.               bugging is not yet fully available (C++ only).
  1233.  
  1234.        -✓-W✓Wa✓al✓ll✓l  All  of the above `-✓-W✓W' options combined.  These are
  1235.               all the options which pertain to usage that we rec-
  1236.               ommend  avoiding  and  that  we  believe is easy to
  1237.               avoid, even in conjunction with macros.
  1238.  
  1239.        The remaining `-✓-W✓W.✓..✓..✓.' options are not implied  by  `-✓-W✓Wa✓al✓ll✓l'
  1240.        because  they  warn  about  constructions that we consider
  1241.        reasonable to use, on occasion, in clean programs.
  1242.  
  1243.        -✓-W✓Wt✓tr✓ra✓ad✓di✓it✓ti✓io✓on✓na✓al✓l
  1244.               Warn about certain constructs that  behave  differ-
  1245.               ently in traditional and ANSI C.
  1246.  
  1247.           +✓o   Macro  arguments  occurring within string constants
  1248.               in the macro body.  These would substitute the  ar-
  1249.  
  1250.  
  1251.  
  1252. GNU Tools                   1993/10/13                         19
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258. GCC(1)                      GNU Tools                      GCC(1)
  1259.  
  1260.  
  1261.               gument  in  traditional C, but are part of the con-
  1262.               stant in ANSI C.
  1263.  
  1264.           +✓o   A function declared external in one block and  then
  1265.               used after the end of the block.
  1266.  
  1267.           +✓o   A s✓sw✓wi✓it✓tc✓ch✓h statement has an operand of type l✓lo✓on✓ng✓g.
  1268.  
  1269.  
  1270.        -✓-W✓Ws✓sh✓ha✓ad✓do✓ow✓w
  1271.               Warn  whenever a local variable shadows another lo-
  1272.               cal variable.
  1273.  
  1274.        -✓-W✓Wi✓id✓d-✓-c✓cl✓la✓as✓sh✓h-✓-_✓l_✓e_✓n
  1275.               Warn whenever two distinct identifiers match in the
  1276.               first  _✓l_✓e_✓n characters.  This may help you prepare a
  1277.               program that will compile  with  certain  obsolete,
  1278.               brain-damaged compilers.
  1279.  
  1280.        -✓-W✓Wp✓po✓oi✓in✓nt✓te✓er✓r-✓-a✓ar✓ri✓it✓th✓h
  1281.               Warn about anything that depends on the "size of" a
  1282.               function type or of  v✓vo✓oi✓id✓d.   GNU  C  assigns  these
  1283.               types  a size of 1, for convenience in calculations
  1284.               with v✓vo✓oi✓id✓d *✓* pointers and pointers to functions.
  1285.  
  1286.        -✓-W✓Wc✓ca✓as✓st✓t-✓-q✓qu✓ua✓al✓l
  1287.               Warn whenever a pointer is cast so as to  remove  a
  1288.               type  qualifier from the target type.  For example,
  1289.               warn if a c✓co✓on✓ns✓st✓t c✓ch✓ha✓ar✓r *✓* is cast to an ordinary  c✓ch✓ha✓ar✓r
  1290.               *✓*.
  1291.  
  1292.        -✓-W✓Wc✓ca✓as✓st✓t-✓-a✓al✓li✓ig✓gn✓n
  1293.               Warn  whenever  a pointer is cast such that the re-
  1294.               quired alignment of the target is  increased.   For
  1295.               example,  warn  if  a c✓ch✓ha✓ar✓r *✓* is cast to an i✓in✓nt✓t *✓* on
  1296.               machines where integers can  only  be  accessed  at
  1297.               two- or four-byte boundaries.
  1298.  
  1299.        -✓-W✓Ww✓wr✓ri✓it✓te✓e-✓-s✓st✓tr✓ri✓in✓ng✓gs✓s
  1300.               Give  string  constants the type c✓co✓on✓ns✓st✓t c✓ch✓ha✓ar✓r[✓[_✓l_✓e_✓n_✓g_✓t_✓h]✓]
  1301.               so that copying the address of one into a non-c✓co✓on✓ns✓st✓t
  1302.               c✓ch✓ha✓ar✓r  *✓* pointer will get a warning.  These warnings
  1303.               will help you find at compile time  code  that  can
  1304.               try  to  write  into a string constant, but only if
  1305.               you have been very careful  about  using  c✓co✓on✓ns✓st✓t  in
  1306.               declarations  and  prototypes.   Otherwise, it will
  1307.               just be a nuisance; this is why  we  did  not  make
  1308.               `-✓-W✓Wa✓al✓ll✓l' request these warnings.
  1309.  
  1310.        -✓-W✓Wc✓co✓on✓nv✓ve✓er✓rs✓si✓io✓on✓n
  1311.               Warn  if  a prototype causes a type conversion that
  1312.               is different from what would happen to the same ar-
  1313.               gument  in  the  absence  of a prototype.  This in-
  1314.               cludes conversions of fixed point to  floating  and
  1315.  
  1316.  
  1317.  
  1318. GNU Tools                   1993/10/13                         20
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324. GCC(1)                      GNU Tools                      GCC(1)
  1325.  
  1326.  
  1327.               vice  versa,  and conversions changing the width or
  1328.               signedness of a fixed point  argument  except  when
  1329.               the same as the default promotion.
  1330.  
  1331.        -✓-W✓Wa✓ag✓gg✓gr✓re✓eg✓ga✓at✓te✓e-✓-r✓re✓et✓tu✓ur✓rn✓n
  1332.               Warn  if  any  functions  that return structures or
  1333.               unions are defined or called.  (In languages  where
  1334.               you  can return an array, this also elicits a warn-
  1335.               ing.)
  1336.  
  1337.        -✓-W✓Ws✓st✓tr✓ri✓ic✓ct✓t-✓-p✓pr✓ro✓ot✓to✓ot✓ty✓yp✓pe✓es✓s
  1338.               Warn if a function is declared or  defined  without
  1339.               specifying the argument types.  (An old-style func-
  1340.               tion definition is permitted without a  warning  if
  1341.               preceded by a declaration which specifies the argu-
  1342.               ment types.)
  1343.  
  1344.        -✓-W✓Wm✓mi✓is✓ss✓si✓in✓ng✓g-✓-p✓pr✓ro✓ot✓to✓ot✓ty✓yp✓pe✓es✓s
  1345.               Warn if a global function is defined without a pre-
  1346.               vious  prototype  declaration.  This warning is is-
  1347.               sued even if the definition itself provides a  pro-
  1348.               totype.  The aim is to detect global functions that
  1349.               fail to be declared in header files.
  1350.  
  1351.        -✓-W✓Wm✓mi✓is✓ss✓si✓in✓ng✓g-✓-d✓de✓ec✓cl✓la✓ar✓ra✓at✓ti✓io✓on✓ns✓s
  1352.               Warn if a global function is defined without a pre-
  1353.               vious  declaration.   Do  so even if the definition
  1354.               itself provides a prototype.  Use  this  option  to
  1355.               detect  global  functions  that are not declared in
  1356.               header files.
  1357.  
  1358.        -✓-W✓Wr✓re✓ed✓du✓un✓nd✓da✓an✓nt✓t-✓-d✓de✓ec✓cl✓ls✓s
  1359.               Warn if anything is declared more than once in  the
  1360.               same  scope,  even in cases where multiple declara-
  1361.               tion is valid and changes nothing.
  1362.  
  1363.        -✓-W✓Wn✓ne✓es✓st✓te✓ed✓d-✓-e✓ex✓xt✓te✓er✓rn✓ns✓s
  1364.               Warn if an e✓ex✓xt✓te✓er✓rn✓n declaration is encountered within
  1365.               an function.
  1366.  
  1367.        -✓-W✓We✓en✓nu✓um✓m-✓-c✓cl✓la✓as✓sh✓h
  1368.               Warn about conversion between different enumeration
  1369.               types (C++ only).
  1370.  
  1371.        -✓-W✓Wo✓ov✓ve✓er✓rl✓lo✓oa✓ad✓de✓ed✓d-✓-v✓vi✓ir✓rt✓tu✓ua✓al✓l
  1372.               (C++ only.)  In a derived class, the definitions of
  1373.               virtual  functions must match the type signature of
  1374.               a virtual function declared in the base class.  Use
  1375.               this  option  to  request  warnings  when a derived
  1376.               class declares a function that may be an  erroneous
  1377.               attempt to define a virtual function: that is, warn
  1378.               when a function with the same  name  as  a  virtual
  1379.               function  in the base class, but with a type signa-
  1380.               ture that doesn't match any virtual functions  from
  1381.  
  1382.  
  1383.  
  1384. GNU Tools                   1993/10/13                         21
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390. GCC(1)                      GNU Tools                      GCC(1)
  1391.  
  1392.  
  1393.               the base class.
  1394.  
  1395.        -✓-W✓Wi✓in✓nl✓li✓in✓ne✓e
  1396.               Warn  if  a function can not be inlined, and either
  1397.               it was  declared  as  inline,  or  else  the  -✓-f✓fi✓in✓n-✓-
  1398.               l✓li✓in✓ne✓e-✓-f✓fu✓un✓nc✓ct✓ti✓io✓on✓ns✓s option was given.
  1399.  
  1400.        -✓-W✓We✓er✓rr✓ro✓or✓r
  1401.               Treat  warnings  as errors; abort compilation after
  1402.               any warning.
  1403.  
  1404. D✓DE✓EB✓BU✓UG✓GG✓GI✓IN✓NG✓G O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  1405.        GNU CC has various special options that are used  for  de-
  1406.        bugging either your program or GCC:
  1407.  
  1408.        -✓-g✓g     Produce debugging information in the operating sys-
  1409.               tem's native format (stabs, COFF, XCOFF, or DWARF).
  1410.               GDB can work with this debugging information.
  1411.  
  1412.               On most systems that use stabs format, `-✓-g✓g' enables
  1413.               use of extra debugging information  that  only  GDB
  1414.               can  use;  this  extra  information makes debugging
  1415.               work better in GDB but will probably make other de-
  1416.               buggers  crash  or  refuse to read the program.  If
  1417.               you want to control for certain whether to generate
  1418.               the  extra  information, use `-✓-g✓gs✓st✓ta✓ab✓bs✓s+✓+', `-✓-g✓gs✓st✓ta✓ab✓bs✓s',
  1419.               `-✓-g✓gx✓xc✓co✓of✓ff✓f+✓+',  `-✓-g✓gx✓xc✓co✓of✓ff✓f',  `-✓-g✓gd✓dw✓wa✓ar✓rf✓f+✓+',  or  `-✓-g✓gd✓dw✓wa✓ar✓rf✓f'
  1420.               (see below).
  1421.  
  1422.               Unlike most other C compilers, GNU CC allows you to
  1423.               use `-✓-g✓g' with `-✓-O✓O'.  The shortcuts taken  by  opti-
  1424.               mized  code may occasionally produce surprising re-
  1425.               sults: some variables you declared may not exist at
  1426.               all; flow of control may briefly move where you did
  1427.               not expect it; some statements may not be  executed
  1428.               because they compute constant results or their val-
  1429.               ues were already at hand; some statements may  exe-
  1430.               cute  in  different  places because they were moved
  1431.               out of loops.
  1432.  
  1433.               Nevertheless it proves possible to debug  optimized
  1434.               output.   This makes it reasonable to use the opti-
  1435.               mizer for programs that might have bugs.
  1436.  
  1437.        The following options are useful when GNU CC is  generated
  1438.        with the capability for more than one debugging format.
  1439.  
  1440.        -✓-g✓gg✓gd✓db✓b  Produce  debugging information in the native format
  1441.               (if that is supported), including GDB extensions if
  1442.               at all possible.
  1443.  
  1444.        -✓-g✓gs✓st✓ta✓ab✓bs✓s
  1445.               Produce  debugging  information in stabs format (if
  1446.               that is supported), without GDB  extensions.   This
  1447.  
  1448.  
  1449.  
  1450. GNU Tools                   1993/10/13                         22
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456. GCC(1)                      GNU Tools                      GCC(1)
  1457.  
  1458.  
  1459.               is the format used by DBX on most BSD systems.
  1460.  
  1461.        -✓-g✓gs✓st✓ta✓ab✓bs✓s+✓+
  1462.               Produce  debugging  information in stabs format (if
  1463.               that is supported), using GNU extensions understood
  1464.               only  by  the GNU debugger (GDB).  The use of these
  1465.               extensions is likely to make other debuggers  crash
  1466.               or refuse to read the program.
  1467.  
  1468.        -✓-g✓gc✓co✓of✓ff✓f Produce  debugging  information  in COFF format (if
  1469.               that is supported).  This is the format used by SDB
  1470.               on  most System V systems prior to System V Release
  1471.               4.
  1472.  
  1473.        -✓-g✓gx✓xc✓co✓of✓ff✓f
  1474.               Produce debugging information in XCOFF  format  (if
  1475.               that is supported).  This is the format used by the
  1476.               DBX debugger on IBM RS/6000 systems.
  1477.  
  1478.        -✓-g✓gx✓xc✓co✓of✓ff✓f+✓+
  1479.               Produce debugging information in XCOFF  format  (if
  1480.               that is supported), using GNU extensions understood
  1481.               only by the GNU debugger (GDB).  The use  of  these
  1482.               extensions  is likely to make other debuggers crash
  1483.               or refuse to read the program.
  1484.  
  1485.        -✓-g✓gd✓dw✓wa✓ar✓rf✓f
  1486.               Produce debugging information in DWARF  format  (if
  1487.               that is supported).  This is the format used by SDB
  1488.               on most System V Release 4 systems.
  1489.  
  1490.        -✓-g✓gd✓dw✓wa✓ar✓rf✓f+✓+
  1491.               Produce debugging information in DWARF  format  (if
  1492.               that is supported), using GNU extensions understood
  1493.               only by the GNU debugger (GDB).  The use  of  these
  1494.               extensions  is likely to make other debuggers crash
  1495.               or refuse to read the program.
  1496.  
  1497.        -✓-g✓g_✓l_✓e_✓v_✓e_✓l
  1498.        -✓-g✓gg✓gd✓db✓b_✓l_✓e_✓v_✓e_✓l
  1499.        -✓-g✓gs✓st✓ta✓ab✓bs✓s_✓l_✓e_✓v_✓e_✓l
  1500.        -✓-g✓gc✓co✓of✓ff✓f_✓l_✓e_✓v_✓e_✓l -✓-g✓gx✓xc✓co✓of✓ff✓f_✓l_✓e_✓v_✓e_✓l
  1501.  
  1502.        -✓-g✓gd✓dw✓wa✓ar✓rf✓f_✓l_✓e_✓v_✓e_✓l
  1503.               Request debugging information and also use _✓l_✓e_✓v_✓e_✓l to
  1504.               specify how much information.  The default level is
  1505.               2.
  1506.  
  1507.               Level 1 produces minimal  information,  enough  for
  1508.               making  backtraces in parts of the program that you
  1509.               don't plan to debug.  This includes descriptions of
  1510.               functions  and  external variables, but no informa-
  1511.               tion about local variables and no line numbers.
  1512.  
  1513.  
  1514.  
  1515.  
  1516. GNU Tools                   1993/10/13                         23
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522. GCC(1)                      GNU Tools                      GCC(1)
  1523.  
  1524.  
  1525.               Level 3 includes extra information, such as all the
  1526.               macro definitions present in the program.  Some de-
  1527.               buggers support macro expansion when you use `-✓-g✓g3✓3'.
  1528.  
  1529.        -✓-p✓p     Generate  extra  code  to write profile information
  1530.               suitable for the analysis program p✓pr✓ro✓of✓f.
  1531.  
  1532.        -✓-p✓pg✓g    Generate extra code to  write  profile  information
  1533.               suitable for the analysis program g✓gp✓pr✓ro✓of✓f.
  1534.  
  1535.        -✓-a✓a     Generate  extra  code  to write profile information
  1536.               for basic blocks, which will record the  number  of
  1537.               times  each  basic  block  is  executed.  This data
  1538.               could be analyzed by a program  like  t✓tc✓co✓ov✓v.   Note,
  1539.               however,  that  the  format of the data is not what
  1540.               t✓tc✓co✓ov✓v expects.  Eventually GNU g✓gp✓pr✓ro✓of✓f should  be  ex-
  1541.               tended to process this data.
  1542.  
  1543.        -✓-d✓d_✓l_✓e_✓t_✓t_✓e_✓r_✓s
  1544.               Says  to make debugging dumps during compilation at
  1545.               times specified by _✓l_✓e_✓t_✓t_✓e_✓r_✓s.  This is used  for  de-
  1546.               bugging  the  compiler.  The file names for most of
  1547.               the dumps are made  by  appending  a  word  to  the
  1548.               source    file    name    (e.g.    `f✓fo✓oo✓o.✓.c✓c.✓.r✓rt✓tl✓l'   or
  1549.               `f✓fo✓oo✓o.✓.c✓c.✓.j✓ju✓um✓mp✓p').
  1550.  
  1551.        -✓-d✓dM✓M    Dump all macro definitions, at the end  of  prepro-
  1552.               cessing, and write no output.
  1553.  
  1554.        -✓-d✓dN✓N    Dump  all macro names, at the end of preprocessing.
  1555.  
  1556.        -✓-d✓dD✓D    Dump all macro definitions, at the end  of  prepro-
  1557.               cessing, in addition to normal output.
  1558.  
  1559.        -✓-d✓dy✓y    Dump debugging information during parsing, to stan-
  1560.               dard error.
  1561.  
  1562.        -✓-d✓dr✓r    Dump after RTL generation, to `_✓f_✓i_✓l_✓e.✓.r✓rt✓tl✓l'.
  1563.  
  1564.        -✓-d✓dx✓x    Just generate RTL for a function instead of compil-
  1565.               ing it.  Usually used with `r✓r'.
  1566.  
  1567.        -✓-d✓dj✓j    Dump after first jump optimization, to `_✓f_✓i_✓l_✓e.✓.j✓ju✓um✓mp✓p'.
  1568.  
  1569.        -✓-d✓ds✓s    Dump after CSE  (including  the  jump  optimization
  1570.               that sometimes follows CSE), to `_✓f_✓i_✓l_✓e.✓.c✓cs✓se✓e'.
  1571.  
  1572.        -✓-d✓dL✓L    Dump after loop optimization, to `_✓f_✓i_✓l_✓e.✓.l✓lo✓oo✓op✓p'.
  1573.  
  1574.        -✓-d✓dt✓t    Dump  after the second CSE pass (including the jump
  1575.               optimization  that  sometimes  follows   CSE),   to
  1576.               `_✓f_✓i_✓l_✓e.✓.c✓cs✓se✓e2✓2'.
  1577.  
  1578.        -✓-d✓df✓f    Dump after flow analysis, to `_✓f_✓i_✓l_✓e.✓.f✓fl✓lo✓ow✓w'.
  1579.  
  1580.  
  1581.  
  1582. GNU Tools                   1993/10/13                         24
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588. GCC(1)                      GNU Tools                      GCC(1)
  1589.  
  1590.  
  1591.        -✓-d✓dc✓c    Dump     after    instruction    combination,    to
  1592.               `_✓f_✓i_✓l_✓e.✓.c✓co✓om✓mb✓bi✓in✓ne✓e'.
  1593.  
  1594.        -✓-d✓dS✓S    Dump after the first instruction  scheduling  pass,
  1595.               to `_✓f_✓i_✓l_✓e.✓.s✓sc✓ch✓he✓ed✓d'.
  1596.  
  1597.        -✓-d✓dl✓l    Dump    after   local   register   allocation,   to
  1598.               `_✓f_✓i_✓l_✓e.✓.l✓lr✓re✓eg✓g'.
  1599.  
  1600.        -✓-d✓dg✓g    Dump   after   global   register   allocation,   to
  1601.               `_✓f_✓i_✓l_✓e.✓.g✓gr✓re✓eg✓g'.
  1602.  
  1603.        -✓-d✓dR✓R    Dump  after the second instruction scheduling pass,
  1604.               to `_✓f_✓i_✓l_✓e.✓.s✓sc✓ch✓he✓ed✓d2✓2'.
  1605.  
  1606.        -✓-d✓dJ✓J    Dump after last jump optimization, to `_✓f_✓i_✓l_✓e.✓.j✓ju✓um✓mp✓p2✓2'.
  1607.  
  1608.        -✓-d✓dd✓d    Dump    after   delayed   branch   scheduling,   to
  1609.               `_✓f_✓i_✓l_✓e.✓.d✓db✓br✓r'.
  1610.  
  1611.        -✓-d✓dk✓k    Dump after conversion from registers to  stack,  to
  1612.               `_✓f_✓i_✓l_✓e.✓.s✓st✓ta✓ac✓ck✓k'.
  1613.  
  1614.        -✓-d✓da✓a    Produce all the dumps listed above.
  1615.  
  1616.        -✓-d✓dm✓m    Print statistics on memory usage, at the end of the
  1617.               run, to standard error.
  1618.  
  1619.        -✓-d✓dp✓p    Annotate the assembler output with a comment  indi-
  1620.               cating which pattern and alternative was used.
  1621.  
  1622.        -✓-f✓fp✓pr✓re✓et✓te✓en✓nd✓d-✓-f✓fl✓lo✓oa✓at✓t
  1623.               When  running  a  cross-compiler,  pretend that the
  1624.               target machine uses the same floating point  format
  1625.               as  the host machine.  This causes incorrect output
  1626.               of the actual floating constants,  but  the  actual
  1627.               instruction  sequence  will probably be the same as
  1628.               GNU CC would make when running on  the  target  ma-
  1629.               chine.
  1630.  
  1631.        -✓-s✓sa✓av✓ve✓e-✓-t✓te✓em✓mp✓ps✓s
  1632.               Store the usual "temporary" intermediate files per-
  1633.               manently; place them in the current  directory  and
  1634.               name  them based on the source file.  Thus, compil-
  1635.               ing `f✓fo✓oo✓o.✓.c✓c' with  `-✓-c✓c  -✓-s✓sa✓av✓ve✓e-✓-t✓te✓em✓mp✓ps✓s'  would  produce
  1636.               files `f✓fo✓oo✓o.✓.c✓cp✓pp✓p' and `f✓fo✓oo✓o.✓.s✓s', as well as `f✓fo✓oo✓o.✓.o✓o'.
  1637.  
  1638.        -✓-p✓pr✓ri✓in✓nt✓t-✓-f✓fi✓il✓le✓e-✓-n✓na✓am✓me✓e=✓=_✓l_✓i_✓b_✓r_✓a_✓r_✓y
  1639.               Print  the  full  absolute name of the library file
  1640.               _✓l_✓i_✓b_✓r_✓a_✓r_✓y  that would be used  when  linking--and  do
  1641.               not  do  anything  else.   With this option, GNU CC
  1642.               does not compile or link anything; it  just  prints
  1643.               the file name.
  1644.  
  1645.  
  1646.  
  1647.  
  1648. GNU Tools                   1993/10/13                         25
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654. GCC(1)                      GNU Tools                      GCC(1)
  1655.  
  1656.  
  1657.        -✓-p✓pr✓ri✓in✓nt✓t-✓-l✓li✓ib✓bg✓gc✓cc✓c-✓-f✓fi✓il✓le✓e-✓-n✓na✓am✓me✓e
  1658.               Same as `-✓-p✓pr✓ri✓in✓nt✓t-✓-f✓fi✓il✓le✓e-✓-n✓na✓am✓me✓e=✓=l✓li✓ib✓bg✓gc✓cc✓c.✓.a✓a'.
  1659.  
  1660.        -✓-p✓pr✓ri✓in✓nt✓t-✓-p✓pr✓ro✓og✓g-✓-n✓na✓am✓me✓e=✓=_✓p_✓r_✓o_✓g_✓r_✓a_✓m
  1661.               Like `-✓-p✓pr✓ri✓in✓nt✓t-✓-f✓fi✓il✓le✓e-✓-n✓na✓am✓me✓e', but searches for a program
  1662.               such as `cpp'.
  1663.  
  1664. O✓OP✓PT✓TI✓IM✓MI✓IZ✓ZA✓AT✓TI✓IO✓ON✓N O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  1665.        These options control various sorts of optimizations:
  1666.  
  1667.        -✓-O✓O
  1668.  
  1669.        -✓-O✓O1✓1    Optimize.  Optimizing  compilation  takes  somewhat
  1670.               more  time, and a lot more memory for a large func-
  1671.               tion.
  1672.  
  1673.               Without `-✓-O✓O', the compiler's goal is to reduce  the
  1674.               cost  of  compilation and to make debugging produce
  1675.               the expected results.  Statements are  independent:
  1676.               if  you  stop the program with a breakpoint between
  1677.               statements, you can then assign a new value to  any
  1678.               variable or change the program counter to any other
  1679.               statement in the function and get exactly  the  re-
  1680.               sults you would expect from the source code.
  1681.  
  1682.               Without  `-✓-O✓O', only variables declared r✓re✓eg✓gi✓is✓st✓te✓er✓r are
  1683.               allocated in  registers.   The  resulting  compiled
  1684.               code is a little worse than produced by PCC without
  1685.               `-✓-O✓O'.
  1686.  
  1687.               With `-✓-O✓O', the compiler tries to reduce  code  size
  1688.               and execution time.
  1689.  
  1690.               When    you   specify   `-✓-O✓O',   the   two   options
  1691.               `-✓-f✓ft✓th✓hr✓re✓ea✓ad✓d-✓-j✓ju✓um✓mp✓ps✓s' and `-✓-f✓fd✓de✓ef✓fe✓er✓r-✓-p✓po✓op✓p' are  turned  on.
  1692.               On    machines   that   have   delay   slots,   the
  1693.               `-✓-f✓fd✓de✓el✓la✓ay✓ye✓ed✓d-✓-b✓br✓ra✓an✓nc✓ch✓h' option is turned on.  For  those
  1694.               machines  that can support debugging even without a
  1695.               frame pointer, the `-✓-f✓fo✓om✓mi✓it✓t-✓-f✓fr✓ra✓am✓me✓e-✓-p✓po✓oi✓in✓nt✓te✓er✓r' option is
  1696.               turned  on.   On some machines other flags may also
  1697.               be turned on.
  1698.  
  1699.        -✓-O✓O2✓2    Optimize even more.  Nearly all supported optimiza-
  1700.               tions  that  do  not involve a space-speed tradeoff
  1701.               are performed.  Loop unrolling and function  inlin-
  1702.               ing  are not done, for example.  As compared to -✓-O✓O,
  1703.               this option increases both compilation time and the
  1704.               performance of the generated code.
  1705.  
  1706.        -✓-O✓O3✓3    Optimize  yet  more.  This  turns on everything -✓-O✓O2✓2
  1707.               does,   along   with   also   turning   on    -✓-f✓fi✓in✓n-✓-
  1708.               l✓li✓in✓ne✓e-✓-f✓fu✓un✓nc✓ct✓ti✓io✓on✓ns✓s.✓.
  1709.  
  1710.        -✓-O✓O0✓0    Do not optimize.
  1711.  
  1712.  
  1713.  
  1714. GNU Tools                   1993/10/13                         26
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720. GCC(1)                      GNU Tools                      GCC(1)
  1721.  
  1722.  
  1723.               If  you  use  multiple  -✓-O✓O options, with or without
  1724.               level numbers, the last such option is the one that
  1725.               is effective.
  1726.  
  1727.        Options  of  the form `-✓-f✓f_✓f_✓l_✓a_✓g' specify machine-independent
  1728.        flags.  Most flags have both positive and negative  forms;
  1729.        the  negative  form  of  `-✓-f✓ff✓fo✓oo✓o' would be `-✓-f✓fn✓no✓o-✓-f✓fo✓oo✓o'.  The
  1730.        following list shows only one form--the one which  is  not
  1731.        the  default.  You can figure out the other form by either
  1732.        removing `n✓no✓o-✓-' or adding it.
  1733.  
  1734.        -✓-f✓ff✓fl✓lo✓oa✓at✓t-✓-s✓st✓to✓or✓re✓e
  1735.               Do not store floating point variables in registers.
  1736.               This  prevents  undesirable excess precision on ma-
  1737.               chines such as the 68000 where the floating  regis-
  1738.               ters (of the 68881) keep more precision than a d✓do✓ou✓u-✓-
  1739.               b✓bl✓le✓e is supposed to have.
  1740.  
  1741.               For most programs, the excess precision  does  only
  1742.               good,  but a few programs rely on the precise defi-
  1743.               nition of IEEE floating point.  Use `-✓-f✓ff✓fl✓lo✓oa✓at✓t-✓-s✓st✓to✓or✓re✓e'
  1744.               for such programs.
  1745.  
  1746.        -✓-f✓fm✓me✓em✓mo✓oi✓iz✓ze✓e-✓-l✓lo✓oo✓ok✓ku✓up✓ps✓s
  1747.  
  1748.        -✓-f✓fs✓sa✓av✓ve✓e-✓-m✓me✓em✓mo✓oi✓iz✓ze✓ed✓d
  1749.               Use heuristics to compile faster (C++ only).  These
  1750.               heuristics are not enabled by default,  since  they
  1751.               are  only effective for certain input files.  Other
  1752.               input files compile more slowly.
  1753.  
  1754.               The first time the compiler must build a call to  a
  1755.               member function (or reference to a data member), it
  1756.               must (1) determine  whether  the  class  implements
  1757.               member  functions  of  that name; (2) resolve which
  1758.               member function to call  (which  involves  figuring
  1759.               out  what  sorts  of  type  conversions  need to be
  1760.               made); and (3) check the visibility of  the  member
  1761.               function  to  the  caller.   All of this adds up to
  1762.               slower compilation.  Normally, the  second  time  a
  1763.               call  is made to that member function (or reference
  1764.               to that data member), it must go through  the  same
  1765.               lengthy  process  again.  This means that code like
  1766.               this
  1767.  
  1768.                 cout << "This " << p  <<  "  has  "  <<  n  <<  "
  1769.               legs.\n";
  1770.  
  1771.               makes six passes through all three steps.  By using
  1772.               a software cache,  a  "hit"  significantly  reduces
  1773.               this  cost.   Unfortunately, using the cache intro-
  1774.               duces another layer of mechanisms which must be im-
  1775.               plemented,   and   so   incurs  its  own  overhead.
  1776.               `-✓-f✓fm✓me✓em✓mo✓oi✓iz✓ze✓e-✓-l✓lo✓oo✓ok✓ku✓up✓ps✓s' enables the software cache.
  1777.  
  1778.  
  1779.  
  1780. GNU Tools                   1993/10/13                         27
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786. GCC(1)                      GNU Tools                      GCC(1)
  1787.  
  1788.  
  1789.               Because access privileges (visibility)  to  members
  1790.               and  member  functions may differ from one function
  1791.               context to the next, g✓g+✓++✓+  may  need  to  flush  the
  1792.               cache.   With  the  `-✓-f✓fm✓me✓em✓mo✓oi✓iz✓ze✓e-✓-l✓lo✓oo✓ok✓ku✓up✓ps✓s'  flag,  the
  1793.               cache is flushed after every function that is  com-
  1794.               piled.  The `-fsave-memoized' flag enables the same
  1795.               software cache, but when  the  compiler  determines
  1796.               that  the  context  of  the  last function compiled
  1797.               would yield the same access privileges of the  next
  1798.               function  to compile, it preserves the cache.  This
  1799.               is most helpful when defining many member functions
  1800.               for  the  same  class: with the exception of member
  1801.               functions which are friends of other classes,  each
  1802.               member  function has exactly the same access privi-
  1803.               leges as every other, and the  cache  need  not  be
  1804.               flushed.
  1805.  
  1806.        -✓-f✓fn✓no✓o-✓-d✓de✓ef✓fa✓au✓ul✓lt✓t-✓-i✓in✓nl✓li✓in✓ne✓e
  1807.               Don't make member functions inline by default mere-
  1808.               ly because they are defined inside the class  scope
  1809.               (C++ only).
  1810.  
  1811.        -✓-f✓fn✓no✓o-✓-d✓de✓ef✓fe✓er✓r-✓-p✓po✓op✓p
  1812.               Always  pop  the arguments to each function call as
  1813.               soon as that function returns.  For machines  which
  1814.               must  pop arguments after a function call, the com-
  1815.               piler normally lets  arguments  accumulate  on  the
  1816.               stack  for several function calls and pops them all
  1817.               at once.
  1818.  
  1819.        -✓-f✓ff✓fo✓or✓rc✓ce✓e-✓-m✓me✓em✓m
  1820.               Force memory operands to be copied  into  registers
  1821.               before  doing arithmetic on them.  This may produce
  1822.               better code by making all memory references  poten-
  1823.               tial common subexpressions.  When they are not com-
  1824.               mon subexpressions, instruction combination  should
  1825.               eliminate  the separate register-load.  I am inter-
  1826.               ested in hearing about the difference this makes.
  1827.  
  1828.        -✓-f✓ff✓fo✓or✓rc✓ce✓e-✓-a✓ad✓dd✓dr✓r
  1829.               Force memory address constants to  be  copied  into
  1830.               registers  before  doing  arithmetic on them.  This
  1831.               may produce better code just as `-✓-f✓ff✓fo✓or✓rc✓ce✓e-✓-m✓me✓em✓m'  may.
  1832.               I  am  interested  in  hearing about the difference
  1833.               this makes.
  1834.  
  1835.        -✓-f✓fo✓om✓mi✓it✓t-✓-f✓fr✓ra✓am✓me✓e-✓-p✓po✓oi✓in✓nt✓te✓er✓r
  1836.               Don't keep the frame  pointer  in  a  register  for
  1837.               functions that don't need one.  This avoids the in-
  1838.               structions to save, set up and restore frame point-
  1839.               ers;  it  also makes an extra register available in
  1840.               many functions.  _✓I_✓t _✓a_✓l_✓s_✓o _✓m_✓a_✓k_✓e_✓s _✓d_✓e_✓b_✓u_✓g_✓g_✓i_✓n_✓g _✓i_✓m_✓p_✓o_✓s_✓s_✓i_✓b_✓l_✓e
  1841.               _✓o_✓n most machines.
  1842.  
  1843.  
  1844.  
  1845.  
  1846. GNU Tools                   1993/10/13                         28
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852. GCC(1)                      GNU Tools                      GCC(1)
  1853.  
  1854.  
  1855.               On some machines, such as the Vax, this flag has no
  1856.               effect, because the standard calling sequence auto-
  1857.               matically  handles the frame pointer and nothing is
  1858.               saved by pretending it doesn't exist.  The machine-
  1859.               description  macro  F✓FR✓RA✓AM✓ME✓E_✓_P✓PO✓OI✓IN✓NT✓TE✓ER✓R_✓_R✓RE✓EQ✓QU✓UI✓IR✓RE✓ED✓D controls
  1860.               whether a target machine supports this flag.
  1861.  
  1862.        -✓-f✓fi✓in✓nl✓li✓in✓ne✓e-✓-f✓fu✓un✓nc✓ct✓ti✓io✓on✓ns✓s
  1863.               Integrate all simple functions into their  callers.
  1864.               The  compiler heuristically decides which functions
  1865.               are simple enough to be worth integrating  in  this
  1866.               way.
  1867.  
  1868.               If  all  calls  to a given function are integrated,
  1869.               and the function is declared s✓st✓ta✓at✓ti✓ic✓c, then GCC  nor-
  1870.               mally  does  not  output  the function as assembler
  1871.               code in its own right.
  1872.  
  1873.        -✓-f✓fc✓ca✓al✓ll✓le✓er✓r-✓-s✓sa✓av✓ve✓es✓s
  1874.               Enable values to be  allocated  in  registers  that
  1875.               will  be  clobbered  by function calls, by emitting
  1876.               extra instructions to save and restore  the  regis-
  1877.               ters  around  such  calls.  Such allocation is done
  1878.               only when it seems to result in  better  code  than
  1879.               would otherwise be produced.
  1880.  
  1881.               This  option  is  enabled by default on certain ma-
  1882.               chines, usually those which have no  call-preserved
  1883.               registers to use instead.
  1884.  
  1885.        -✓-f✓fk✓ke✓ee✓ep✓p-✓-i✓in✓nl✓li✓in✓ne✓e-✓-f✓fu✓un✓nc✓ct✓ti✓io✓on✓ns✓s
  1886.               Even if all calls to a given function are integrat-
  1887.               ed, and the function is declared s✓st✓ta✓at✓ti✓ic✓c,  neverthe-
  1888.               less output a separate run-time callable version of
  1889.               the function.
  1890.  
  1891.        -✓-f✓fn✓no✓o-✓-f✓fu✓un✓nc✓ct✓ti✓io✓on✓n-✓-c✓cs✓se✓e
  1892.               Do not put function addresses  in  registers;  make
  1893.               each  instruction  that  calls  a constant function
  1894.               contain the function's address explicitly.
  1895.  
  1896.               This option results in  less  efficient  code,  but
  1897.               some  strange hacks that alter the assembler output
  1898.               may be confused by the optimizations performed when
  1899.               this option is not used.
  1900.  
  1901.        -✓-f✓fn✓no✓o-✓-p✓pe✓ee✓ep✓ph✓ho✓ol✓le✓e
  1902.               Disable  any  machine-specific  peephole  optimiza-
  1903.               tions.
  1904.  
  1905.        -✓-f✓ff✓fa✓as✓st✓t-✓-m✓ma✓at✓th✓h
  1906.               This option allows GCC to violate some ANSI or IEEE
  1907.               rules/specifications  in the interest of optimizing
  1908.               code for speed.  For example, it allows the compil-
  1909.  
  1910.  
  1911.  
  1912. GNU Tools                   1993/10/13                         29
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918. GCC(1)                      GNU Tools                      GCC(1)
  1919.  
  1920.  
  1921.               er  to  assume  arguments  to the s✓sq✓qr✓rt✓t function are
  1922.               non-negative numbers.
  1923.  
  1924.               This option should never be turned on by  any  `-✓-O✓O'
  1925.               option  since it can result in incorrect output for
  1926.               programs which depend on an exact implementation of
  1927.               IEEE  or  ANSI  rules/specifications for math func-
  1928.               tions.
  1929.  
  1930.        The following options control specific optimizations.  The
  1931.        `-✓-O✓O2✓2'  option  turns  on all of these optimizations except
  1932.        `-✓-f✓fu✓un✓nr✓ro✓ol✓ll✓l-✓-l✓lo✓oo✓op✓ps✓s' and `-✓-f✓fu✓un✓nr✓ro✓ol✓ll✓l-✓-a✓al✓ll✓l-✓-l✓lo✓oo✓op✓ps✓s'.
  1933.  
  1934.        The `-✓-O✓O' option usually turns on the `-✓-f✓ft✓th✓hr✓re✓ea✓ad✓d-✓-j✓ju✓um✓mp✓ps✓s'  and
  1935.        `-✓-f✓fd✓de✓el✓la✓ay✓ye✓ed✓d-✓-b✓br✓ra✓an✓nc✓ch✓h'  options,  but  specific  machines  may
  1936.        change the default optimizations.
  1937.  
  1938.        You can use the following flags in  the  rare  cases  when
  1939.        "fine-tuning" of optimizations to be performed is desired.
  1940.  
  1941.        -✓-f✓fs✓st✓tr✓re✓en✓ng✓gt✓th✓h-✓-r✓re✓ed✓du✓uc✓ce✓e
  1942.               Perform the optimizations of loop  strength  reduc-
  1943.               tion and elimination of iteration variables.
  1944.  
  1945.        -✓-f✓ft✓th✓hr✓re✓ea✓ad✓d-✓-j✓ju✓um✓mp✓ps✓s
  1946.               Perform  optimizations  where  we check to see if a
  1947.               jump branches to a location where another  compari-
  1948.               son  subsumed  by  the  first is found.  If so, the
  1949.               first branch is redirected to either  the  destina-
  1950.               tion  of  the  second branch or a point immediately
  1951.               following it, depending on whether the condition is
  1952.               known to be true or false.
  1953.  
  1954.        -✓-f✓fu✓un✓nr✓ro✓ol✓ll✓l-✓-l✓lo✓oo✓op✓ps✓s
  1955.               Perform  the  optimization of loop unrolling.  This
  1956.               is only done for loops whose number  of  iterations
  1957.               can be determined at compile time or run time.
  1958.  
  1959.        -✓-f✓fu✓un✓nr✓ro✓ol✓ll✓l-✓-a✓al✓ll✓l-✓-l✓lo✓oo✓op✓ps✓s
  1960.               Perform  the  optimization of loop unrolling.  This
  1961.               is done for all loops.  This usually makes programs
  1962.               run more slowly.
  1963.  
  1964.        -✓-f✓fc✓cs✓se✓e-✓-f✓fo✓ol✓ll✓lo✓ow✓w-✓-j✓ju✓um✓mp✓ps✓s
  1965.               In  common  subexpression elimination, scan through
  1966.               jump instructions when the target of  the  jump  is
  1967.               not  reached  by any other path.  For example, when
  1968.               CSE encounters an i✓if✓f statement with an e✓el✓ls✓se✓e clause,
  1969.               CSE  will follow the jump when the condition tested
  1970.               is false.
  1971.  
  1972.        -✓-f✓fc✓cs✓se✓e-✓-s✓sk✓ki✓ip✓p-✓-b✓bl✓lo✓oc✓ck✓ks✓s
  1973.               This is similar to `-✓-f✓fc✓cs✓se✓e-✓-f✓fo✓ol✓ll✓lo✓ow✓w-✓-j✓ju✓um✓mp✓ps✓s', but causes
  1974.               CSE  to  follow jumps which conditionally skip over
  1975.  
  1976.  
  1977.  
  1978. GNU Tools                   1993/10/13                         30
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984. GCC(1)                      GNU Tools                      GCC(1)
  1985.  
  1986.  
  1987.               blocks.  When CSE encounters a simple i✓if✓f  statement
  1988.               with no else clause, `-✓-f✓fc✓cs✓se✓e-✓-s✓sk✓ki✓ip✓p-✓-b✓bl✓lo✓oc✓ck✓ks✓s' causes CSE
  1989.               to follow the jump around the body of the i✓if✓f.
  1990.  
  1991.        -✓-f✓fr✓re✓er✓ru✓un✓n-✓-c✓cs✓se✓e-✓-a✓af✓ft✓te✓er✓r-✓-l✓lo✓oo✓op✓p
  1992.               Re-run common subexpression elimination after  loop
  1993.               optimizations has been performed.
  1994.  
  1995.        -✓-f✓fe✓el✓li✓id✓de✓e-✓-c✓co✓on✓ns✓st✓tr✓ru✓uc✓ct✓to✓or✓rs✓s
  1996.               Elide  constructors  when this seems plausible (C++
  1997.               only).  With this flag, GNU C++ initializes  y✓y  di-
  1998.               rectly from the call to f✓fo✓oo✓o without going through a
  1999.               temporary in the following code:
  2000.  
  2001.               A foo (); A y = foo ();
  2002.  
  2003.               Without this option, GNU C++ first initializes y✓y by
  2004.               calling  the  appropriate  constructor  for type A✓A;
  2005.               then assigns the result of f✓fo✓oo✓o to a temporary; and,
  2006.               finally,  replaces  the  initial valyue of `y✓y' with
  2007.               the temporary.
  2008.  
  2009.               The default behavior (`-✓-f✓fn✓no✓o-✓-e✓el✓li✓id✓de✓e-✓-c✓co✓on✓ns✓st✓tr✓ru✓uc✓ct✓to✓or✓rs✓s') is
  2010.               specified  by the draft ANSI C++ standard.  If your
  2011.               program's constructors  have  side  effects,  using
  2012.               `-✓-f✓fe✓el✓li✓id✓de✓e-✓-c✓co✓on✓ns✓st✓tr✓ru✓uc✓ct✓to✓or✓rs✓s'  can  make  your program act
  2013.               differently, since some constructor  calls  may  be
  2014.               omitted.
  2015.  
  2016.        -✓-f✓fe✓ex✓xp✓pe✓en✓ns✓si✓iv✓ve✓e-✓-o✓op✓pt✓ti✓im✓mi✓iz✓za✓at✓ti✓io✓on✓ns✓s
  2017.               Perform  a  number  of minor optimizations that are
  2018.               relatively expensive.
  2019.  
  2020.        -✓-f✓fd✓de✓el✓la✓ay✓ye✓ed✓d-✓-b✓br✓ra✓an✓nc✓ch✓h
  2021.               If supported for the target machine, attempt to re-
  2022.               order  instructions  to  exploit  instruction slots
  2023.               available after delayed branch instructions.
  2024.  
  2025.        -✓-f✓fs✓sc✓ch✓he✓ed✓du✓ul✓le✓e-✓-i✓in✓ns✓sn✓ns✓s
  2026.               If supported for the target machine, attempt to re-
  2027.               order  instructions  to  eliminate execution stalls
  2028.               due to required data being unavailable.  This helps
  2029.               machines  that  have  slow floating point or memory
  2030.               load instructions by allowing other instructions to
  2031.               be  issued until the result of the load or floating
  2032.               point instruction is required.
  2033.  
  2034.        -✓-f✓fs✓sc✓ch✓he✓ed✓du✓ul✓le✓e-✓-i✓in✓ns✓sn✓ns✓s2✓2
  2035.               Similar to `-✓-f✓fs✓sc✓ch✓he✓ed✓du✓ul✓le✓e-✓-i✓in✓ns✓sn✓ns✓s', but requests an  ad-
  2036.               ditional  pass of instruction scheduling after reg-
  2037.               ister allocation has been done.  This is especially
  2038.               useful  on  machines with a relatively small number
  2039.               of registers and  where  memory  load  instructions
  2040.               take more than one cycle.
  2041.  
  2042.  
  2043.  
  2044. GNU Tools                   1993/10/13                         31
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050. GCC(1)                      GNU Tools                      GCC(1)
  2051.  
  2052.  
  2053. T✓TA✓AR✓RG✓GE✓ET✓T O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  2054.        By  default, GNU CC compiles code for the same type of ma-
  2055.        chine that you are using.  However, it  can  also  be  in-
  2056.        stalled  as  a  cross-compiler,  to compile for some other
  2057.        type of machine.  In fact,  several  different  configura-
  2058.        tions of GNU CC, for different target machines, can be in-
  2059.        stalled side by side.  Then you specify which one  to  use
  2060.        with the `-✓-b✓b' option.
  2061.  
  2062.        In addition, older and newer versions of GNU CC can be in-
  2063.        stalled side by side.  One of them (probably  the  newest)
  2064.        will be the default, but you may sometimes wish to use an-
  2065.        other.
  2066.  
  2067.        -✓-b✓b _✓m_✓a_✓c_✓h_✓i_✓n_✓e
  2068.               The argument _✓m_✓a_✓c_✓h_✓i_✓n_✓e specifies the  target  machine
  2069.               for  compilation.  This is useful when you have in-
  2070.               stalled GNU CC as a cross-compiler.
  2071.  
  2072.               The value to use for _✓m_✓a_✓c_✓h_✓i_✓n_✓e is  the  same  as  was
  2073.               specified  as the machine type when configuring GNU
  2074.               CC as a cross-compiler.  For example, if  a  cross-
  2075.               compiler  was  configured  with  `c✓co✓on✓nf✓fi✓ig✓gu✓ur✓re✓e i386v',
  2076.               meaning to compile for an 80386 running  System  V,
  2077.               then you would specify `-✓-b✓b i✓i3✓38✓86✓6v✓v' to run that cross
  2078.               compiler.
  2079.  
  2080.               When you do not specify `-✓-b✓b', it normally means  to
  2081.               compile  for  the same type of machine that you are
  2082.               using.
  2083.  
  2084.        -✓-V✓V _✓v_✓e_✓r_✓s_✓i_✓o_✓n
  2085.               The argument _✓v_✓e_✓r_✓s_✓i_✓o_✓n specifies which version of GNU
  2086.               CC  to  run.  This is useful when multiple versions
  2087.               are  installed.   For  example,  _✓v_✓e_✓r_✓s_✓i_✓o_✓n  might  be
  2088.               `2✓2.✓.0✓0', meaning to run GNU CC version 2.0.
  2089.  
  2090.               The  default version, when you do not specify `-✓-V✓V',
  2091.               is controlled by the way GNU CC is installed.  Nor-
  2092.               mally, it will be a version that is recommended for
  2093.               general use.
  2094.  
  2095. M✓MA✓AC✓CH✓HI✓IN✓NE✓E D✓DE✓EP✓PE✓EN✓ND✓DE✓EN✓NT✓T O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  2096.        Each of the target machine types can have its own  special
  2097.        options, starting with `-✓-m✓m', to choose among various hard-
  2098.        ware  models  or  configurations--for  example,  68010  vs
  2099.        68020,  floating  coprocessor or none.  A single installed
  2100.        version of the compiler can compile for any model or  con-
  2101.        figuration, according to the options specified.
  2102.  
  2103.        Some configurations of the compiler also support addition-
  2104.        al special options, usually for command-line compatibility
  2105.        with other compilers on the same platform.
  2106.  
  2107.  
  2108.  
  2109.  
  2110. GNU Tools                   1993/10/13                         32
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116. GCC(1)                      GNU Tools                      GCC(1)
  2117.  
  2118.  
  2119.        These are the `-✓-m✓m' options defined for the 68000 series:
  2120.  
  2121.        -✓-m✓m6✓68✓80✓00✓00✓0
  2122.  
  2123.        -✓-m✓mc✓c6✓68✓80✓00✓00✓0
  2124.               Generate  output  for a 68000.  This is the default
  2125.               when the compiler  is  configured  for  68000-based
  2126.               systems.
  2127.  
  2128.        -✓-m✓m6✓68✓80✓02✓20✓0
  2129.  
  2130.        -✓-m✓mc✓c6✓68✓80✓02✓20✓0
  2131.               Generate  output for a 68020 (rather than a 68000).
  2132.               This is the default when the compiler is configured
  2133.               for 68020-based systems.
  2134.  
  2135.        -✓-m✓m6✓68✓88✓88✓81✓1
  2136.               Generate  output  containing 68881 instructions for
  2137.               floating point.   This  is  the  default  for  most
  2138.               68020-based  systems unless -✓-n✓nf✓fp✓p was specified when
  2139.               the compiler was configured.
  2140.  
  2141.        -✓-m✓m6✓68✓80✓03✓30✓0
  2142.               Generate output for a 68030.  This is  the  default
  2143.               when  the  compiler  is  configured for 68030-based
  2144.               systems.
  2145.  
  2146.        -✓-m✓m6✓68✓80✓04✓40✓0
  2147.               Generate output for a 68040.  This is  the  default
  2148.               when  the  compiler  is  configured for 68040-based
  2149.               systems.
  2150.  
  2151.        -✓-m✓m6✓68✓80✓02✓20✓0-✓-4✓40✓0
  2152.               Generate output for a 68040, without using  any  of
  2153.               the  new  instructions.  This results in code which
  2154.               can  run  relatively  efficiently   on   either   a
  2155.               68020/68881 or a 68030 or a 68040.
  2156.  
  2157.        -✓-m✓mf✓fp✓pa✓a  Generate output containing Sun FPA instructions for
  2158.               floating point.
  2159.  
  2160.        -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t
  2161.               Generate output containing library calls for float-
  2162.               ing  point.   _✓W_✓A_✓R_✓N_✓I_✓N_✓G_✓:  the requisite libraries are
  2163.               not part of GNU CC.  Normally the facilities of the
  2164.               machine's usual C compiler are used, but this can't
  2165.               be done directly in  cross-compilation.   You  must
  2166.               make  your own arrangements to provide suitable li-
  2167.               brary functions for cross-compilation.
  2168.  
  2169.        -✓-m✓ms✓sh✓ho✓or✓rt✓t
  2170.               Consider type i✓in✓nt✓t to be 16 bits  wide,  like  s✓sh✓ho✓or✓rt✓t
  2171.               i✓in✓nt✓t.
  2172.  
  2173.  
  2174.  
  2175.  
  2176. GNU Tools                   1993/10/13                         33
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182. GCC(1)                      GNU Tools                      GCC(1)
  2183.  
  2184.  
  2185.        -✓-m✓mn✓no✓ob✓bi✓it✓tf✓fi✓ie✓el✓ld✓d
  2186.               Do  not  use the bit-field instructions.  `-✓-m✓m6✓68✓80✓00✓00✓0'
  2187.               implies `-✓-m✓mn✓no✓ob✓bi✓it✓tf✓fi✓ie✓el✓ld✓d'.
  2188.  
  2189.        -✓-m✓mb✓bi✓it✓tf✓fi✓ie✓el✓ld✓d
  2190.               Do use the bit-field instructions.   `-✓-m✓m6✓68✓80✓02✓20✓0'  im-
  2191.               plies `-✓-m✓mb✓bi✓it✓tf✓fi✓ie✓el✓ld✓d'.  This is the default if you use
  2192.               the unmodified sources.
  2193.  
  2194.        -✓-m✓mr✓rt✓td✓d  Use a  different  function-calling  convention,  in
  2195.               which  functions  that take a fixed number of argu-
  2196.               ments return with the r✓rt✓td✓d instruction,  which  pops
  2197.               their  arguments  while  returning.  This saves one
  2198.               instruction in the caller since there is no need to
  2199.               pop the arguments there.
  2200.  
  2201.               This  calling  convention  is incompatible with the
  2202.               one normally used on Unix, so you cannot use it  if
  2203.               you  need  to call libraries compiled with the Unix
  2204.               compiler.
  2205.  
  2206.               Also, you must provide function prototypes for  all
  2207.               functions  that  take variable numbers of arguments
  2208.               (including p✓pr✓ri✓in✓nt✓tf✓f); otherwise incorrect  code  will
  2209.               be generated for calls to those functions.
  2210.  
  2211.               In  addition,  seriously incorrect code will result
  2212.               if you call a function  with  too  many  arguments.
  2213.               (Normally, extra arguments are harmlessly ignored.)
  2214.  
  2215.               The r✓rt✓td✓d instruction is supported by the  68010  and
  2216.               68020 processors, but not by the 68000.
  2217.  
  2218.        These `-✓-m✓m' options are defined for the Vax:
  2219.  
  2220.        -✓-m✓mu✓un✓ni✓ix✓x Do not output certain jump instructions (a✓ao✓ob✓bl✓le✓eq✓q and
  2221.               so on) that the Unix assembler for the  Vax  cannot
  2222.               handle across long ranges.
  2223.  
  2224.        -✓-m✓mg✓gn✓nu✓u  Do  output  those jump instructions, on the assump-
  2225.               tion that you will assemble with the GNU assembler.
  2226.  
  2227.        -✓-m✓mg✓g    Output code for g-format floating point numbers in-
  2228.               stead of d-format.
  2229.  
  2230.        These `-✓-m✓m' switches are supported on the SPARC:
  2231.  
  2232.        -✓-m✓mf✓fp✓pu✓u
  2233.  
  2234.        -✓-m✓mh✓ha✓ar✓rd✓d-✓-f✓fl✓lo✓oa✓at✓t
  2235.               Generate output containing floating point  instruc-
  2236.               tions.  This is the default.
  2237.  
  2238.        -✓-m✓mn✓no✓o-✓-f✓fp✓pu✓u
  2239.  
  2240.  
  2241.  
  2242. GNU Tools                   1993/10/13                         34
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248. GCC(1)                      GNU Tools                      GCC(1)
  2249.  
  2250.  
  2251.        -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t
  2252.               Generate output containing library calls for float-
  2253.               ing point.  _✓W_✓a_✓r_✓n_✓i_✓n_✓g_✓: there is no GNU floating-point
  2254.               library  for SPARC.  Normally the facilities of the
  2255.               machine's usual C compiler are used, but this  can-
  2256.               not  be  done  directly  in cross-compilation.  You
  2257.               must make your own arrangements to provide suitable
  2258.               library functions for cross-compilation.
  2259.  
  2260.               -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t  changes the calling convention in the
  2261.               output file; therefore, it is only  useful  if  you
  2262.               compile _✓a_✓l_✓l of a program with this option.
  2263.  
  2264.        -✓-m✓mn✓no✓o-✓-e✓ep✓pi✓il✓lo✓og✓gu✓ue✓e
  2265.  
  2266.        -✓-m✓me✓ep✓pi✓il✓lo✓og✓gu✓ue✓e
  2267.               With  -✓-m✓me✓ep✓pi✓il✓lo✓og✓gu✓ue✓e (the default), the compiler always
  2268.               emits code for function exit at  the  end  of  each
  2269.               function.   Any  function exit in the middle of the
  2270.               function (such as a return  statement  in  C)  will
  2271.               generate  a jump to the exit code at the end of the
  2272.               function.
  2273.  
  2274.               With -✓-m✓mn✓no✓o-✓-e✓ep✓pi✓il✓lo✓og✓gu✓ue✓e, the compiler tries to emit exit
  2275.               code inline at every function exit.
  2276.  
  2277.        -✓-m✓mn✓no✓o-✓-v✓v8✓8
  2278.  
  2279.        -✓-m✓mv✓v8✓8
  2280.  
  2281.        -✓-m✓ms✓sp✓pa✓ar✓rc✓cl✓li✓it✓te✓e
  2282.               These  three options select variations on the SPARC
  2283.               architecture.
  2284.  
  2285.               By default (unless specifically configured for  the
  2286.               Fujitsu  SPARClite),  GCC generates code for the v7
  2287.               variant of the SPARC architecture.
  2288.  
  2289.               -✓-m✓mv✓v8✓8 will give you SPARC v8 code.  The only differ-
  2290.               ence  from  v7  code is that the compiler emits the
  2291.               integer multiply and  integer  divide  instructions
  2292.               which exist in SPARC v8 but not in SPARC v7.
  2293.  
  2294.               -✓-m✓ms✓sp✓pa✓ar✓rc✓cl✓li✓it✓te✓e  will  give  you  SPARClite code.  This
  2295.               adds the integer multiply, integer divide step  and
  2296.               scan  (ffs)  instructions  which exist in SPARClite
  2297.               but not in SPARC v7.
  2298.  
  2299.        -✓-m✓mc✓cy✓yp✓pr✓re✓es✓ss✓s
  2300.  
  2301.        -✓-m✓ms✓su✓up✓pe✓er✓rs✓sp✓pa✓ar✓rc✓c
  2302.               These two options select the  processor  for  which
  2303.               the code is optimised.
  2304.  
  2305.  
  2306.  
  2307.  
  2308. GNU Tools                   1993/10/13                         35
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314. GCC(1)                      GNU Tools                      GCC(1)
  2315.  
  2316.  
  2317.               With -✓-m✓mc✓cy✓yp✓pr✓re✓es✓ss✓s (the default), the compiler optimis-
  2318.               es code for the Cypress CY7C602 chip,  as  used  in
  2319.               the SparcStation/SparcSever 3xx series. This is al-
  2320.               so apropriate for the older SparcStation 1, 2,  IPX
  2321.               etc.
  2322.  
  2323.               With  -✓-m✓ms✓su✓up✓pe✓er✓rs✓sp✓pa✓ar✓rc✓c  the compiler optimises code for
  2324.               the SuperSparc cpu, as used in the SparcStation 10,
  2325.               1000 and 2000 series. This flag also enables use of
  2326.               the full SPARC v8 instruction set.
  2327.  
  2328.        These `-✓-m✓m' options are defined for the Convex:
  2329.  
  2330.        -✓-m✓mc✓c1✓1   Generate output for a C1.  This is the default when
  2331.               the compiler is configured for a C1.
  2332.  
  2333.        -✓-m✓mc✓c2✓2   Generate output for a C2.  This is the default when
  2334.               the compiler is configured for a C2.
  2335.  
  2336.        -✓-m✓ma✓ar✓rg✓gc✓co✓ou✓un✓nt✓t
  2337.               Generate code which puts an argument count  in  the
  2338.               word  preceding  each  argument  list.   Some  non-
  2339.               portable Convex and Vax programs  need  this  word.
  2340.               (Debuggers  don't,  except for functions with vari-
  2341.               able-length argument lists; this  info  is  in  the
  2342.               symbol table.)
  2343.  
  2344.        -✓-m✓mn✓no✓oa✓ar✓rg✓gc✓co✓ou✓un✓nt✓t
  2345.               Omit  the argument count word.  This is the default
  2346.               if you use the unmodified sources.
  2347.  
  2348.        These `-✓-m✓m' options are defined for the AMD Am29000:
  2349.  
  2350.        -✓-m✓md✓dw✓w   Generate code that assumes the DW bit is set, i.e.,
  2351.               that byte and halfword operations are directly sup-
  2352.               ported by the hardware.  This is the default.
  2353.  
  2354.        -✓-m✓mn✓no✓od✓dw✓w Generate code that assumes the DW bit is not set.
  2355.  
  2356.        -✓-m✓mb✓bw✓w   Generate code that assumes the system supports byte
  2357.               and  halfword  write  operations.   This is the de-
  2358.               fault.
  2359.  
  2360.        -✓-m✓mn✓nb✓bw✓w  Generate code that assumes  the  systems  does  not
  2361.               support  byte  and halfword write operations.  This
  2362.               implies `-✓-m✓mn✓no✓od✓dw✓w'.
  2363.  
  2364.        -✓-m✓ms✓sm✓ma✓al✓ll✓l
  2365.               Use a small memory  model  that  assumes  that  all
  2366.               function  addresses  are either within a single 256
  2367.               KB segment or at an absolute address of  less  than
  2368.               256K.   This allows the c✓ca✓al✓ll✓l instruction to be used
  2369.               instead of a c✓co✓on✓ns✓st✓t, c✓co✓on✓ns✓st✓th✓h, c✓ca✓al✓ll✓li✓i sequence.
  2370.  
  2371.  
  2372.  
  2373.  
  2374. GNU Tools                   1993/10/13                         36
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380. GCC(1)                      GNU Tools                      GCC(1)
  2381.  
  2382.  
  2383.        -✓-m✓ml✓la✓ar✓rg✓ge✓e
  2384.               Do not assume that  the  c✓ca✓al✓ll✓l  instruction  can  be
  2385.               used; this is the default.
  2386.  
  2387.        -✓-m✓m2✓29✓90✓05✓50✓0
  2388.               Generate code for the Am29050.
  2389.  
  2390.        -✓-m✓m2✓29✓90✓00✓00✓0
  2391.               Generate  code  for  the  Am29000.  This is the de-
  2392.               fault.
  2393.  
  2394.        -✓-m✓mk✓ke✓er✓rn✓ne✓el✓l-✓-r✓re✓eg✓gi✓is✓st✓te✓er✓rs✓s
  2395.               Generate references to registers g✓gr✓r6✓64✓4-✓-g✓gr✓r9✓95✓5  instead
  2396.               of  g✓gr✓r9✓96✓6-✓-g✓gr✓r1✓12✓27✓7.   This option can be used when com-
  2397.               piling kernel code that wants a set of global  reg-
  2398.               isters disjoint from that used by user-mode code.
  2399.  
  2400.               Note  that when this option is used, register names
  2401.               in `-✓-f✓f'  flags  must  use  the  normal,  user-mode,
  2402.               names.
  2403.  
  2404.        -✓-m✓mu✓us✓se✓er✓r-✓-r✓re✓eg✓gi✓is✓st✓te✓er✓rs✓s
  2405.               Use the normal set of global registers, g✓gr✓r9✓96✓6-✓-g✓gr✓r1✓12✓27✓7.
  2406.               This is the default.
  2407.  
  2408.        -✓-m✓ms✓st✓ta✓ac✓ck✓k-✓-c✓ch✓he✓ec✓ck✓k
  2409.               Insert a call to _✓__✓_m✓ms✓sp✓p_✓_c✓ch✓he✓ec✓ck✓k after each  stack  ad-
  2410.               justment.  This is often used for kernel code.
  2411.  
  2412.        These  `-✓-m✓m' options are defined for Motorola 88K architec-
  2413.        tures:
  2414.  
  2415.        -✓-m✓m8✓88✓80✓00✓00✓0
  2416.               Generate code that works well on  both  the  m88100
  2417.               and the m88110.
  2418.  
  2419.        -✓-m✓m8✓88✓81✓10✓00✓0
  2420.               Generate  code  that works best for the m88100, but
  2421.               that also runs on the m88110.
  2422.  
  2423.        -✓-m✓m8✓88✓81✓11✓10✓0
  2424.               Generate code that works best for the  m88110,  and
  2425.               may not run on the m88100.
  2426.  
  2427.        -✓-m✓mi✓id✓de✓en✓nt✓ti✓if✓fy✓y-✓-r✓re✓ev✓vi✓is✓si✓io✓on✓n
  2428.               Include  an i✓id✓de✓en✓nt✓t directive in the assembler output
  2429.               recording the source file name, compiler  name  and
  2430.               version, timestamp, and compilation flags used.
  2431.  
  2432.        -✓-m✓mn✓no✓o-✓-u✓un✓nd✓de✓er✓rs✓sc✓co✓or✓re✓es✓s
  2433.               In  assembler  output,  emit  symbol  names without
  2434.               adding an underscore character at the beginning  of
  2435.               each  name.  The default is to use an underscore as
  2436.               prefix on each name.
  2437.  
  2438.  
  2439.  
  2440. GNU Tools                   1993/10/13                         37
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446. GCC(1)                      GNU Tools                      GCC(1)
  2447.  
  2448.  
  2449.        -✓-m✓mn✓no✓o-✓-c✓ch✓he✓ec✓ck✓k-✓-z✓ze✓er✓ro✓o-✓-d✓di✓iv✓vi✓is✓si✓io✓on✓n
  2450.  
  2451.        -✓-m✓mc✓ch✓he✓ec✓ck✓k-✓-z✓ze✓er✓ro✓o-✓-d✓di✓iv✓vi✓is✓si✓io✓on✓n
  2452.               Early models of the 88K architecture  had  problems
  2453.               with  division by zero; in particular, many of them
  2454.               didn't trap.  Use these options to avoid  including
  2455.               (or  to  include explicitly) additional code to de-
  2456.               tect division by zero and signal an exception.  All
  2457.               GCC     configurations     for    the    88K    use
  2458.               `-✓-m✓mc✓ch✓he✓ec✓ck✓k-✓-z✓ze✓er✓ro✓o-✓-d✓di✓iv✓vi✓is✓si✓io✓on✓n' by default.
  2459.  
  2460.        -✓-m✓mo✓oc✓cs✓s-✓-d✓de✓eb✓bu✓ug✓g-✓-i✓in✓nf✓fo✓o
  2461.  
  2462.        -✓-m✓mn✓no✓o-✓-o✓oc✓cs✓s-✓-d✓de✓eb✓bu✓ug✓g-✓-i✓in✓nf✓fo✓o
  2463.               Include (or omit) additional debugging  information
  2464.               (about registers used in each stack frame) as spec-
  2465.               ified in the 88Open Object Compatibility  Standard,
  2466.               "OCS".   This  extra  information  is not needed by
  2467.               GDB.  The default for DG/UX,  SVr4,  and  Delta  88
  2468.               SVr3.2  is  to  include this information; other 88k
  2469.               configurations omit this information by default.
  2470.  
  2471.        -✓-m✓mo✓oc✓cs✓s-✓-f✓fr✓ra✓am✓me✓e-✓-p✓po✓os✓si✓it✓ti✓io✓on✓n
  2472.  
  2473.        -✓-m✓mn✓no✓o-✓-o✓oc✓cs✓s-✓-f✓fr✓ra✓am✓me✓e-✓-p✓po✓os✓si✓it✓ti✓io✓on✓n
  2474.               Force (or do not require)  register  values  to  be
  2475.               stored  in  a  particular place in stack frames, as
  2476.               specified in OCS.  The DG/UX, Delta88  SVr3.2,  and
  2477.               BCS configurations use `-✓-m✓mo✓oc✓cs✓s-✓-f✓fr✓ra✓am✓me✓e-✓-p✓po✓os✓si✓it✓ti✓io✓on✓n'; oth-
  2478.               er   88k   configurations    have    the    default
  2479.               `-✓-m✓mn✓no✓o-✓-o✓oc✓cs✓s-✓-f✓fr✓ra✓am✓me✓e-✓-p✓po✓os✓si✓it✓ti✓io✓on✓n'.
  2480.  
  2481.        -✓-m✓mo✓op✓pt✓ti✓im✓mi✓iz✓ze✓e-✓-a✓ar✓rg✓g-✓-a✓ar✓re✓ea✓a
  2482.  
  2483.        -✓-m✓mn✓no✓o-✓-o✓op✓pt✓ti✓im✓mi✓iz✓ze✓e-✓-a✓ar✓rg✓g-✓-a✓ar✓re✓ea✓a
  2484.               Control  how  to  store function arguments in stack
  2485.               frames.  `-✓-m✓mo✓op✓pt✓ti✓im✓mi✓iz✓ze✓e-✓-a✓ar✓rg✓g-✓-a✓ar✓re✓ea✓a' saves space, but may
  2486.               break      some      debuggers      (not      GDB).
  2487.               `-✓-m✓mn✓no✓o-✓-o✓op✓pt✓ti✓im✓mi✓iz✓ze✓e-✓-a✓ar✓rg✓g-✓-a✓ar✓re✓ea✓a' conforms better  to  stan-
  2488.               dards.   By default GCC does not optimize the argu-
  2489.               ment area.
  2490.  
  2491.        -✓-m✓ms✓sh✓ho✓or✓rt✓t-✓-d✓da✓at✓ta✓a-✓-_✓n_✓u_✓m
  2492.               _✓n_✓u_✓m Generate smaller data references by making them
  2493.               relative  to r✓r0✓0, which allows loading a value using
  2494.               a single instruction (rather than the  usual  two).
  2495.               You  control  which data references are affected by
  2496.               specifying _✓n_✓u_✓m with this option.  For  example,  if
  2497.               you  specify `-✓-m✓ms✓sh✓ho✓or✓rt✓t-✓-d✓da✓at✓ta✓a-✓-5✓51✓12✓2', then the data ref-
  2498.               erences affected are those involving  displacements
  2499.               of  less than 512 bytes.  `-✓-m✓ms✓sh✓ho✓or✓rt✓t-✓-d✓da✓at✓ta✓a-✓-_✓n_✓u_✓m' is not
  2500.               effective for _✓n_✓u_✓m greater than 64K.
  2501.  
  2502.        -✓-m✓ms✓se✓er✓ri✓ia✓al✓li✓iz✓ze✓e-✓-v✓vo✓ol✓la✓at✓ti✓il✓le✓e
  2503.  
  2504.  
  2505.  
  2506. GNU Tools                   1993/10/13                         38
  2507.  
  2508.  
  2509.  
  2510.  
  2511.  
  2512. GCC(1)                      GNU Tools                      GCC(1)
  2513.  
  2514.  
  2515.        -✓-m✓mn✓no✓o-✓-s✓se✓er✓ri✓ia✓al✓li✓iz✓ze✓e-✓-v✓vo✓ol✓la✓at✓ti✓il✓le✓e
  2516.               Do, or do not, generate code to  guarantee  sequen-
  2517.               tial consistency of volatile memory references.
  2518.  
  2519.               GNU  CC  always  guarantees consistency by default,
  2520.               for the preferred processor submodel.  How this  is
  2521.               done depends on the submodel.
  2522.  
  2523.               The m88100 processor does not reorder memory refer-
  2524.               ences and so always provides sequential  consisten-
  2525.               cy.  If you use `-✓-m✓m8✓88✓81✓10✓00✓0', GNU CC does not generate
  2526.               any special instructions for sequential  consisten-
  2527.               cy.
  2528.  
  2529.               The  order  of memory references made by the m88110
  2530.               processor does not always match the  order  of  the
  2531.               instructions  requesting those references.  In par-
  2532.               ticular, a load instruction may  execute  before  a
  2533.               preceding  store instruction.  Such reordering vio-
  2534.               lates sequential  consistency  of  volatile  memory
  2535.               references,  when  there  are  multiple processors.
  2536.               When you use `-✓-m✓m8✓88✓80✓00✓00✓0' or `-✓-m✓m8✓88✓81✓11✓10✓0', GNU CC  gener-
  2537.               ates  special  instructions  when  appropriate,  to
  2538.               force execution in the proper order.
  2539.  
  2540.               The extra code generated to  guarantee  consistency
  2541.               may affect the performance of your application.  If
  2542.               you know that you can safely forgo this  guarantee,
  2543.               you may use the option `-✓-m✓mn✓no✓o-✓-s✓se✓er✓ri✓ia✓al✓li✓iz✓ze✓e-✓-v✓vo✓ol✓la✓at✓ti✓il✓le✓e'.
  2544.  
  2545.               If you use the `-✓-m✓m8✓88✓81✓10✓00✓0' option but require sequen-
  2546.               tial consistency when running on the m88110 proces-
  2547.               sor, you should use `-✓-m✓ms✓se✓er✓ri✓ia✓al✓li✓iz✓ze✓e-✓-v✓vo✓ol✓la✓at✓ti✓il✓le✓e'.
  2548.  
  2549.        -✓-m✓ms✓sv✓vr✓r4✓4
  2550.  
  2551.        -✓-m✓ms✓sv✓vr✓r3✓3 Turn  on  (`-✓-m✓ms✓sv✓vr✓r4✓4') or off (`-✓-m✓ms✓sv✓vr✓r3✓3') compiler ex-
  2552.               tensions related to  System  V  release  4  (SVr4).
  2553.               This controls the following:
  2554.  
  2555.           +✓o   Which  variant  of  the  assembler  syntax  to emit
  2556.               (which   you   can   select   independently   using
  2557.               `-✓-m✓mv✓ve✓er✓rs✓si✓io✓on✓n-✓-0✓03✓3.✓.0✓00✓0').
  2558.  
  2559.           +✓o   `-✓-m✓ms✓sv✓vr✓r4✓4' makes the C preprocessor recognize `#✓#p✓pr✓ra✓ag✓g-✓-
  2560.               m✓ma✓a w✓we✓ea✓ak✓k'
  2561.  
  2562.           +✓o   `-✓-m✓ms✓sv✓vr✓r4✓4' makes GCC issue additional declaration di-
  2563.               rectives used in SVr4.
  2564.  
  2565.        `-✓-m✓ms✓sv✓vr✓r3✓3' is the default for all m88K configurations except
  2566.        the SVr4 configuration.
  2567.  
  2568.  
  2569.  
  2570.  
  2571.  
  2572. GNU Tools                   1993/10/13                         39
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578. GCC(1)                      GNU Tools                      GCC(1)
  2579.  
  2580.  
  2581.        -✓-m✓mt✓tr✓ra✓ap✓p-✓-l✓la✓ar✓rg✓ge✓e-✓-s✓sh✓hi✓if✓ft✓t
  2582.  
  2583.        -✓-m✓mh✓ha✓an✓nd✓dl✓le✓e-✓-l✓la✓ar✓rg✓ge✓e-✓-s✓sh✓hi✓if✓ft✓t
  2584.               Include code to detect bit-shifts of more  than  31
  2585.               bits;  respectively,  trap such shifts or emit code
  2586.               to handle them properly.  By default GCC  makes  no
  2587.               special provision for large bit shifts.
  2588.  
  2589.        -✓-m✓mu✓us✓se✓e-✓-d✓di✓iv✓v-✓-i✓in✓ns✓st✓tr✓ru✓uc✓ct✓ti✓io✓on✓n
  2590.               Very  early  models  of the 88K architecture didn't
  2591.               have a divide instruction, so GCC avoids  that  in-
  2592.               struction  by  default.  Use this option to specify
  2593.               that it's safe to use the divide instruction.
  2594.  
  2595.        -✓-m✓mv✓ve✓er✓rs✓si✓io✓on✓n-✓-0✓03✓3.✓.0✓00✓0
  2596.               In the DG/UX configuration, there are  two  flavors
  2597.               of  SVr4.   This  option  modifies -✓-m✓ms✓sv✓vr✓r4✓4 to select
  2598.               whether the hybrid-COFF or real-ELF flavor is used.
  2599.               All other configurations ignore this option.
  2600.  
  2601.        -✓-m✓mw✓wa✓ar✓rn✓n-✓-p✓pa✓as✓ss✓se✓ed✓d-✓-s✓st✓tr✓ru✓uc✓ct✓ts✓s
  2602.               Warn when a function passes a struct as an argument
  2603.               or  result.   Structure-passing  conventions   have
  2604.               changed during the evolution of the C language, and
  2605.               are often the source of portability  problems.   By
  2606.               default, GCC issues no such warning.
  2607.  
  2608.        These options are defined for the IBM RS6000:
  2609.  
  2610.        -✓-m✓mf✓fp✓p-✓-i✓in✓n-✓-t✓to✓oc✓c
  2611.  
  2612.        -✓-m✓mn✓no✓o-✓-f✓fp✓p-✓-i✓in✓n-✓-t✓to✓oc✓c
  2613.               Control  whether or not floating-point constants go
  2614.               in the Table of Contents  (TOC),  a  table  of  all
  2615.               global variable and function addresses.  By default
  2616.               GCC puts floating-point constants there; if the TOC
  2617.               overflows, `-✓-m✓mn✓no✓o-✓-f✓fp✓p-✓-i✓in✓n-✓-t✓to✓oc✓c' will reduce the size of
  2618.               the TOC, which may avoid the overflow.
  2619.  
  2620.        These `-✓-m✓m' options are defined for the IBM RT PC:
  2621.  
  2622.        -✓-m✓mi✓in✓n-✓-l✓li✓in✓ne✓e-✓-m✓mu✓ul✓l
  2623.               Use an in-line code  sequence  for  integer  multi-
  2624.               plies.  This is the default.
  2625.  
  2626.        -✓-m✓mc✓ca✓al✓ll✓l-✓-l✓li✓ib✓b-✓-m✓mu✓ul✓l
  2627.               Call l✓lm✓mu✓ul✓l$✓$$✓$ for integer multiples.
  2628.  
  2629.        -✓-m✓mf✓fu✓ul✓ll✓l-✓-f✓fp✓p-✓-b✓bl✓lo✓oc✓ck✓ks✓s
  2630.               Generate  full-size floating point data blocks, in-
  2631.               cluding the minimum amount of scratch space  recom-
  2632.               mended by IBM.  This is the default.
  2633.  
  2634.  
  2635.  
  2636.  
  2637.  
  2638. GNU Tools                   1993/10/13                         40
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644. GCC(1)                      GNU Tools                      GCC(1)
  2645.  
  2646.  
  2647.        -✓-m✓mm✓mi✓in✓ni✓im✓mu✓um✓m-✓-f✓fp✓p-✓-b✓bl✓lo✓oc✓ck✓ks✓s
  2648.               Do  not  include  extra  scratch  space in floating
  2649.               point data blocks.  This results in  smaller  code,
  2650.               but  slower  execution, since scratch space must be
  2651.               allocated dynamically.
  2652.  
  2653.        -✓-m✓mf✓fp✓p-✓-a✓ar✓rg✓g-✓-i✓in✓n-✓-f✓fp✓pr✓re✓eg✓gs✓s
  2654.               Use a calling sequence incompatible  with  the  IBM
  2655.               calling  convention  in  which floating point argu-
  2656.               ments are passed in floating point registers.  Note
  2657.               that  v✓va✓ar✓ra✓ar✓rg✓gs✓s.✓.h✓h  and  s✓st✓td✓da✓ar✓rg✓gs✓s.✓.h✓h  will not work with
  2658.               floating point operands if this  option  is  speci-
  2659.               fied.
  2660.  
  2661.        -✓-m✓mf✓fp✓p-✓-a✓ar✓rg✓g-✓-i✓in✓n-✓-g✓gr✓re✓eg✓gs✓s
  2662.               Use  the  normal  calling  convention  for floating
  2663.               point arguments.  This is the default.
  2664.  
  2665.        -✓-m✓mh✓hc✓c-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n
  2666.               Return structures of more than one word in  memory,
  2667.               rather  than in a register.  This provides compati-
  2668.               bility with the MetaWare HighC (hc) compiler.   Use
  2669.               `-✓-f✓fp✓pc✓cc✓c-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n'  for  compatibility  with the
  2670.               Portable C Compiler (pcc).
  2671.  
  2672.        -✓-m✓mn✓no✓oh✓hc✓c-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n
  2673.               Return some structures of more  than  one  word  in
  2674.               registers,  when  convenient.  This is the default.
  2675.               For compatibility with the IBM-supplied  compilers,
  2676.               use       either      `-✓-f✓fp✓pc✓cc✓c-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n'      or
  2677.               `-✓-m✓mh✓hc✓c-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n'.
  2678.  
  2679.        These `-✓-m✓m' options are defined for the MIPS family of com-
  2680.        puters:
  2681.  
  2682.        -✓-m✓mc✓cp✓pu✓u=✓=_✓c_✓p_✓u_✓-_✓t_✓y_✓p_✓e
  2683.               Assume  the  defaults for the machine type _✓c_✓p_✓u_✓-_✓t_✓y_✓p_✓e
  2684.               when scheduling instructions.  The default _✓c_✓p_✓u_✓-_✓t_✓y_✓p_✓e
  2685.               is  d✓de✓ef✓fa✓au✓ul✓lt✓t,  which  picks the longest cycles times
  2686.               for any of the machines, in order that the code run
  2687.               at  reasonable  rates  on  all  MIPS  cpu's.  Other
  2688.               choices for _✓c_✓p_✓u_✓-_✓t_✓y_✓p_✓e are r✓r2✓20✓00✓00✓0, r✓r3✓30✓00✓00✓0,  r✓r4✓40✓00✓00✓0,  and
  2689.               r✓r6✓60✓00✓00✓0.   While  picking  a  specific  _✓c_✓p_✓u_✓-_✓t_✓y_✓p_✓e will
  2690.               schedule things appropriately for  that  particular
  2691.               chip,  the compiler will not generate any code that
  2692.               does not meet level 1 of the MIPS ISA  (instruction
  2693.               set  architecture)  without  the  -✓-m✓mi✓ip✓ps✓s2✓2  or -✓-m✓mi✓ip✓ps✓s3✓3
  2694.               switches being used.
  2695.  
  2696.        -✓-m✓mi✓ip✓ps✓s2✓2 Issue instructions from level 2  of  the  MIPS  ISA
  2697.               (branch  likely,  square  root  instructions).  The
  2698.               -✓-m✓mc✓cp✓pu✓u=✓=r✓r4✓40✓00✓00✓0 or -✓-m✓mc✓cp✓pu✓u=✓=r✓r6✓60✓00✓00✓0 switch must be  used  in
  2699.               conjunction with -✓-m✓mi✓ip✓ps✓s2✓2.
  2700.  
  2701.  
  2702.  
  2703.  
  2704. GNU Tools                   1993/10/13                         41
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710. GCC(1)                      GNU Tools                      GCC(1)
  2711.  
  2712.  
  2713.        -✓-m✓mi✓ip✓ps✓s3✓3 Issue instructions from level 3 of the MIPS ISA (64
  2714.               bit instructions).  The -✓-m✓mc✓cp✓pu✓u=✓=r✓r4✓40✓00✓00✓0 switch must  be
  2715.               used in conjunction with -✓-m✓mi✓ip✓ps✓s2✓2.
  2716.  
  2717.        -✓-m✓mi✓in✓nt✓t6✓64✓4
  2718.  
  2719.        -✓-m✓ml✓lo✓on✓ng✓g6✓64✓4
  2720.  
  2721.        -✓-m✓ml✓lo✓on✓ng✓gl✓lo✓on✓ng✓g1✓12✓28✓8
  2722.               These options don't work at present.
  2723.  
  2724.        -✓-m✓mm✓mi✓ip✓ps✓s-✓-a✓as✓s
  2725.               Generate  code  for  the MIPS assembler, and invoke
  2726.               m✓mi✓ip✓ps✓s-✓-t✓tf✓fi✓il✓le✓e to add normal debug  information.   This
  2727.               is  the  default  for  all platforms except for the
  2728.               OSF/1 reference platform, using the OSF/rose object
  2729.               format.   If any of the -✓-g✓gg✓gd✓db✓b, -✓-g✓gs✓st✓ta✓ab✓bs✓s, or -✓-g✓gs✓st✓ta✓ab✓bs✓s+✓+
  2730.               switches are used, the m✓mi✓ip✓ps✓s-✓-t✓tf✓fi✓il✓le✓e program will  en-
  2731.               capsulate the stabs within MIPS ECOFF.
  2732.  
  2733.        -✓-m✓mg✓ga✓as✓s  Generate  code  for the GNU assembler.  This is the
  2734.               default on the OSF/1 reference platform, using  the
  2735.               OSF/rose object format.
  2736.  
  2737.        -✓-m✓mr✓rn✓na✓am✓me✓es✓s
  2738.  
  2739.        -✓-m✓mn✓no✓o-✓-r✓rn✓na✓am✓me✓es✓s
  2740.               The  -✓-m✓mr✓rn✓na✓am✓me✓es✓s  switch says to output code using the
  2741.               MIPS software names for the registers,  instead  of
  2742.               the hardware names (ie, a✓a0✓0 instead of $✓$4✓4).  The GNU
  2743.               assembler does not support the -✓-m✓mr✓rn✓na✓am✓me✓es✓s switch, and
  2744.               the  MIPS  assembler  will be instructed to run the
  2745.               MIPS C preprocessor  over  the  source  file.   The
  2746.               -✓-m✓mn✓no✓o-✓-r✓rn✓na✓am✓me✓es✓s switch is default.
  2747.  
  2748.        -✓-m✓mg✓gp✓po✓op✓pt✓t
  2749.  
  2750.        -✓-m✓mn✓no✓o-✓-g✓gp✓po✓op✓pt✓t
  2751.               The  -✓-m✓mg✓gp✓po✓op✓pt✓t  switch  says to write all of the data
  2752.               declarations before the instructions  in  the  text
  2753.               section,  to all the MIPS assembler to generate one
  2754.               word memory references instead of using  two  words
  2755.               for  short global or static data items.  This is on
  2756.               by default if optimization is selected.
  2757.  
  2758.        -✓-m✓ms✓st✓ta✓at✓ts✓s
  2759.  
  2760.        -✓-m✓mn✓no✓o-✓-s✓st✓ta✓at✓ts✓s
  2761.               For each non-inline function processed, the -✓-m✓ms✓st✓ta✓at✓ts✓s
  2762.               switch  causes the compiler to emit one line to the
  2763.               standard error file to print statistics  about  the
  2764.               program  (number  of  registers  saved, stack size,
  2765.               etc.).
  2766.  
  2767.  
  2768.  
  2769.  
  2770. GNU Tools                   1993/10/13                         42
  2771.  
  2772.  
  2773.  
  2774.  
  2775.  
  2776. GCC(1)                      GNU Tools                      GCC(1)
  2777.  
  2778.  
  2779.        -✓-m✓mm✓me✓em✓mc✓cp✓py✓y
  2780.  
  2781.        -✓-m✓mn✓no✓o-✓-m✓me✓em✓mc✓cp✓py✓y
  2782.               The -✓-m✓mm✓me✓em✓mc✓cp✓py✓y switch makes all block moves call  the
  2783.               appropriate  string  function (m✓me✓em✓mc✓cp✓py✓y or b✓bc✓co✓op✓py✓y) in-
  2784.               stead of possibly generating inline code.
  2785.  
  2786.        -✓-m✓mm✓mi✓ip✓ps✓s-✓-t✓tf✓fi✓il✓le✓e
  2787.  
  2788.        -✓-m✓mn✓no✓o-✓-m✓mi✓ip✓ps✓s-✓-t✓tf✓fi✓il✓le✓e
  2789.               The -✓-m✓mn✓no✓o-✓-m✓mi✓ip✓ps✓s-✓-t✓tf✓fi✓il✓le✓e switch causes the compiler  not
  2790.               postprocess  the  object  file  with the m✓mi✓ip✓ps✓s-✓-t✓tf✓fi✓il✓le✓e
  2791.               program, after the MIPS assembler has generated  it
  2792.               to  add  debug  support.  If m✓mi✓ip✓ps✓s-✓-t✓tf✓fi✓il✓le✓e is not run,
  2793.               then no local variables will be  available  to  the
  2794.               debugger.   In  addition, s✓st✓ta✓ag✓ge✓e2✓2 and s✓st✓ta✓ag✓ge✓e3✓3 objects
  2795.               will have the temporary file names  passed  to  the
  2796.               assembler  embedded in the object file, which means
  2797.               the objects will not compare the same.
  2798.  
  2799.        -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t
  2800.               Generate output containing library calls for float-
  2801.               ing  point.   _✓W_✓A_✓R_✓N_✓I_✓N_✓G_✓:  the requisite libraries are
  2802.               not part of GNU CC.  Normally the facilities of the
  2803.               machine's usual C compiler are used, but this can't
  2804.               be done directly in  cross-compilation.   You  must
  2805.               make  your own arrangements to provide suitable li-
  2806.               brary functions for cross-compilation.
  2807.  
  2808.        -✓-m✓mh✓ha✓ar✓rd✓d-✓-f✓fl✓lo✓oa✓at✓t
  2809.               Generate output containing floating point  instruc-
  2810.               tions.   This is the default if you use the unmodi-
  2811.               fied sources.
  2812.  
  2813.        -✓-m✓mf✓fp✓p6✓64✓4 Assume that the F✓FR✓R bit in the status  word  is  on,
  2814.               and  that there are 32 64-bit floating point regis-
  2815.               ters, instead of 32 32-bit  floating  point  regis-
  2816.               ters.   You  must  also specify the -✓-m✓mc✓cp✓pu✓u=✓=r✓r4✓40✓00✓00✓0 and
  2817.               -✓-m✓mi✓ip✓ps✓s3✓3 switches.
  2818.  
  2819.        -✓-m✓mf✓fp✓p3✓32✓2 Assume that there are 32 32-bit floating point reg-
  2820.               isters.  This is the default.
  2821.  
  2822.        -✓-m✓ma✓ab✓bi✓ic✓ca✓al✓ll✓ls✓s
  2823.  
  2824.        -✓-m✓mn✓no✓o-✓-a✓ab✓bi✓ic✓ca✓al✓ll✓ls✓s
  2825.               Emit  (or  do not emit) the .✓.a✓ab✓bi✓ic✓ca✓al✓ll✓ls✓s, .✓.c✓cp✓pl✓lo✓oa✓ad✓d, and
  2826.               .✓.c✓cp✓pr✓re✓es✓st✓to✓or✓re✓e pseudo operations that some  System  V.4
  2827.               ports use for position independent code.
  2828.  
  2829.        -✓-m✓mh✓ha✓al✓lf✓f-✓-p✓pi✓ic✓c
  2830.  
  2831.        -✓-m✓mn✓no✓o-✓-h✓ha✓al✓lf✓f-✓-p✓pi✓ic✓c
  2832.               The  -✓-m✓mh✓ha✓al✓lf✓f-✓-p✓pi✓ic✓c  switch says to put pointers to ex-
  2833.  
  2834.  
  2835.  
  2836. GNU Tools                   1993/10/13                         43
  2837.  
  2838.  
  2839.  
  2840.  
  2841.  
  2842. GCC(1)                      GNU Tools                      GCC(1)
  2843.  
  2844.  
  2845.               tern references into the data section and load them
  2846.               up, rather than put the references in the text sec-
  2847.               tion.  This option does not work at present.  -✓-G✓G_✓n_✓u_✓m
  2848.               Put  global  and static items less than or equal to
  2849.               _✓n_✓u_✓m bytes into the small data or bss  sections  in-
  2850.               stead  of the normal data or bss section.  This al-
  2851.               lows the assembler to emit one word  memory  refer-
  2852.               ence  instructions  based on the global pointer (g✓gp✓p
  2853.               or $✓$2✓28✓8), instead of the normal two words used.   By
  2854.               default,  _✓n_✓u_✓m is 8 when the MIPS assembler is used,
  2855.               and 0 when the GNU assembler is  used.   The  -✓-G✓G_✓n_✓u_✓m
  2856.               switch  is also passed to the assembler and linker.
  2857.               All modules should be compiled with the same  -✓-G✓G_✓n_✓u_✓m
  2858.               value.
  2859.  
  2860.        -✓-n✓no✓oc✓cp✓pp✓p Tell  the MIPS assembler to not run it's preproces-
  2861.               sor over user assembler files (with a `.✓.s✓s'  suffix)
  2862.               when assembling them.
  2863.  
  2864.        These  `-✓-m✓m' options are defined for the Intel 80386 family
  2865.        of computers: -✓-m✓m4✓48✓86✓6
  2866.  
  2867.        -✓-m✓mn✓no✓o-✓-4✓48✓86✓6
  2868.               Control whether or not code is optimized for a  486
  2869.               instead  of  an 386.  Code generated for a 486 will
  2870.               run on a 386 and vice versa.
  2871.  
  2872.        -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t
  2873.               Generate output containing library calls for float-
  2874.               ing  point.   _✓W_✓a_✓r_✓n_✓i_✓n_✓g_✓:  the requisite libraries are
  2875.               not part of GNU CC.  Normally the facilities of the
  2876.               machine's usual C compiler are used, but this can't
  2877.               be done directly in  cross-compilation.   You  must
  2878.               make  your own arrangements to provide suitable li-
  2879.               brary functions for cross-compilation.
  2880.  
  2881.               On machines where a function returns floating point
  2882.               results  in the 80387 register stack, some floating
  2883.               point opcodes may be emitted even if `-✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t'
  2884.               is used.
  2885.  
  2886.        -✓-m✓mn✓no✓o-✓-f✓fp✓p-✓-r✓re✓et✓t-✓-i✓in✓n-✓-3✓38✓87✓7
  2887.               Do  not  use the FPU registers for return values of
  2888.               functions.
  2889.  
  2890.               The usual calling convention has  functions  return
  2891.               values  of  types f✓fl✓lo✓oa✓at✓t and d✓do✓ou✓ub✓bl✓le✓e in an FPU regis-
  2892.               ter, even if there is no FPU.  The idea is that the
  2893.               operating system should emulate an FPU.
  2894.  
  2895.               The  option `-✓-m✓mn✓no✓o-✓-f✓fp✓p-✓-r✓re✓et✓t-✓-i✓in✓n-✓-3✓38✓87✓7' causes such values
  2896.               to be returned in ordinary CPU registers instead.
  2897.  
  2898.        These `-✓-m✓m' options are defined for the HPPA family of com-
  2899.  
  2900.  
  2901.  
  2902. GNU Tools                   1993/10/13                         44
  2903.  
  2904.  
  2905.  
  2906.  
  2907.  
  2908. GCC(1)                      GNU Tools                      GCC(1)
  2909.  
  2910.  
  2911.        puters:
  2912.  
  2913.        -✓-m✓mp✓pa✓a-✓-r✓ri✓is✓sc✓c-✓-1✓1-✓-0✓0
  2914.               Generate code for a PA 1.0 processor.
  2915.  
  2916.        -✓-m✓mp✓pa✓a-✓-r✓ri✓is✓sc✓c-✓-1✓1-✓-1✓1
  2917.               Generate code for a PA 1.1 processor.
  2918.  
  2919.        -✓-m✓mk✓ke✓er✓rn✓ne✓el✓l
  2920.               Generate code which is suitable for use in kernels.
  2921.               Specifically, avoid a✓ad✓dd✓d instructions in  which  one
  2922.               of the arguments is the DP register; generate a✓ad✓dd✓di✓il✓l
  2923.               instructions instead.  This avoids a rather serious
  2924.               bug in the HP-UX linker.
  2925.  
  2926.        -✓-m✓ms✓sh✓ha✓ar✓re✓ed✓d-✓-l✓li✓ib✓bs✓s
  2927.               Generate  code  that  can  be  linked against HP-UX
  2928.               shared libraries.  This option is not  fully  func-
  2929.               tion  yet, and is not on by default for any PA tar-
  2930.               get.  Using this option can cause incorrect code to
  2931.               be generated by the compiler.
  2932.  
  2933.        -✓-m✓mn✓no✓o-✓-s✓sh✓ha✓ar✓re✓ed✓d-✓-l✓li✓ib✓bs✓s
  2934.               Don't  generate  code  that  will be linked against
  2935.               shared libraries.  This is the default for  all  PA
  2936.               targets.
  2937.  
  2938.        -✓-m✓ml✓lo✓on✓ng✓g-✓-c✓ca✓al✓ll✓ls✓s
  2939.               Generate  code  which  allows  calls  to  functions
  2940.               greater than 256K away from  the  caller  when  the
  2941.               caller  and callee are in the same source file.  Do
  2942.               not turn this option on unless code refuses to link
  2943.               with "branch out of range errors from the linker.
  2944.  
  2945.        -✓-m✓md✓di✓is✓sa✓ab✓bl✓le✓e-✓-f✓fp✓pr✓re✓eg✓gs✓s
  2946.               Prevent floating point registers from being used in
  2947.               any manner.  This is necessary for  compiling  ker-
  2948.               nels which perform lazy context switching of float-
  2949.               ing point registers.  If you use  this  option  and
  2950.               attempt  to  perform floating point operations, the
  2951.               compiler will abort.
  2952.  
  2953.        -✓-m✓md✓di✓is✓sa✓ab✓bl✓le✓e-✓-i✓in✓nd✓de✓ex✓xi✓in✓ng✓g
  2954.               Prevent the compiler from  using  indexing  address
  2955.               modes.   This  avoids  some rather obscure problems
  2956.               when compiling MIG generated code under MACH.
  2957.  
  2958.        -✓-m✓mt✓tr✓ra✓ai✓il✓li✓in✓ng✓g-✓-c✓co✓ol✓lo✓on✓n
  2959.               Add a colon to the end of  label  definitions  (for
  2960.               ELF assemblers).
  2961.  
  2962.        These  `-✓-m✓m' options are defined for the Intel 80960 family
  2963.        of computers:
  2964.  
  2965.  
  2966.  
  2967.  
  2968. GNU Tools                   1993/10/13                         45
  2969.  
  2970.  
  2971.  
  2972.  
  2973.  
  2974. GCC(1)                      GNU Tools                      GCC(1)
  2975.  
  2976.  
  2977.        -✓-m✓m_✓c_✓p_✓u_✓-_✓t_✓y_✓p_✓e
  2978.               Assume the defaults for the machine  type  _✓c_✓p_✓u_✓-_✓t_✓y_✓p_✓e
  2979.               for  instruction  and  addressing-mode availability
  2980.               and alignment.  The default _✓c_✓p_✓u_✓-_✓t_✓y_✓p_✓e is  k✓kb✓b;  other
  2981.               choices are k✓ka✓a, m✓mc✓c, c✓ca✓a, c✓cf✓f, s✓sa✓a, and s✓sb✓b.
  2982.  
  2983.        -✓-m✓mn✓nu✓um✓me✓er✓ri✓ic✓cs✓s
  2984.  
  2985.        -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t
  2986.               The  -✓-m✓mn✓nu✓um✓me✓er✓ri✓ic✓cs✓s option indicates that the processor
  2987.               does  support  floating-point  instructions.    The
  2988.               -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t  option  indicates that floating-point
  2989.               support should not be assumed.
  2990.  
  2991.        -✓-m✓ml✓le✓ea✓af✓f-✓-p✓pr✓ro✓oc✓ce✓ed✓du✓ur✓re✓es✓s
  2992.  
  2993.        -✓-m✓mn✓no✓o-✓-l✓le✓ea✓af✓f-✓-p✓pr✓ro✓oc✓ce✓ed✓du✓ur✓re✓es✓s
  2994.               Do (or do not) attempt to alter leaf procedures  to
  2995.               be  callable  with  the  _✓b_✓a_✓l instruction as well as
  2996.               _✓c_✓a_✓l_✓l.  This will result in more efficient code  for
  2997.               explicit calls when the _✓b_✓a_✓l instruction can be sub-
  2998.               stituted by the assembler or linker, but less effi-
  2999.               cient  code in other cases, such as calls via func-
  3000.               tion pointers, or using a linker that doesn't  sup-
  3001.               port this optimization.
  3002.  
  3003.        -✓-m✓mt✓ta✓ai✓il✓l-✓-c✓ca✓al✓ll✓l
  3004.  
  3005.        -✓-m✓mn✓no✓o-✓-t✓ta✓ai✓il✓l-✓-c✓ca✓al✓ll✓l
  3006.               Do  (or  do  not)  make additional attempts (beyond
  3007.               those of the machine-independent  portions  of  the
  3008.               compiler)  to  optimize  tail-recursive  calls into
  3009.               branches.  You may not want to do this because  the
  3010.               detection  of  cases where this is not valid is not
  3011.               totally complete.  The default is -✓-m✓mn✓no✓o-✓-t✓ta✓ai✓il✓l-✓-c✓ca✓al✓ll✓l.
  3012.  
  3013.        -✓-m✓mc✓co✓om✓mp✓pl✓le✓ex✓x-✓-a✓ad✓dd✓dr✓r
  3014.  
  3015.        -✓-m✓mn✓no✓o-✓-c✓co✓om✓mp✓pl✓le✓ex✓x-✓-a✓ad✓dd✓dr✓r
  3016.               Assume (or do not assume) that the use of a complex
  3017.               addressing  mode is a win on this implementation of
  3018.               the i960.  Complex  addressing  modes  may  not  be
  3019.               worthwhile on the K-series, but they definitely are
  3020.               on the C-series.  The default is  currently  -✓-m✓mc✓co✓om✓m-✓-
  3021.               p✓pl✓le✓ex✓x-✓-a✓ad✓dd✓dr✓r  for all processors except the CB and CC.
  3022.  
  3023.        -✓-m✓mc✓co✓od✓de✓e-✓-a✓al✓li✓ig✓gn✓n
  3024.  
  3025.        -✓-m✓mn✓no✓o-✓-c✓co✓od✓de✓e-✓-a✓al✓li✓ig✓gn✓n
  3026.               Align code to 8-byte boundaries for faster fetching
  3027.               (or  don't bother).  Currently turned on by default
  3028.               for C-series implementations only.
  3029.  
  3030.  
  3031.  
  3032.  
  3033.  
  3034. GNU Tools                   1993/10/13                         46
  3035.  
  3036.  
  3037.  
  3038.  
  3039.  
  3040. GCC(1)                      GNU Tools                      GCC(1)
  3041.  
  3042.  
  3043.        -✓-m✓mi✓ic✓c-✓-c✓co✓om✓mp✓pa✓at✓t
  3044.  
  3045.        -✓-m✓mi✓ic✓c2✓2.✓.0✓0-✓-c✓co✓om✓mp✓pa✓at✓t
  3046.  
  3047.        -✓-m✓mi✓ic✓c3✓3.✓.0✓0-✓-c✓co✓om✓mp✓pa✓at✓t
  3048.               Enable compatibility with iC960 v2.0 or v3.0.
  3049.  
  3050.        -✓-m✓ma✓as✓sm✓m-✓-c✓co✓om✓mp✓pa✓at✓t
  3051.  
  3052.        -✓-m✓mi✓in✓nt✓te✓el✓l-✓-a✓as✓sm✓m
  3053.               Enable compatibility with the iC960 assembler.
  3054.  
  3055.        -✓-m✓ms✓st✓tr✓ri✓ic✓ct✓t-✓-a✓al✓li✓ig✓gn✓n
  3056.  
  3057.        -✓-m✓mn✓no✓o-✓-s✓st✓tr✓ri✓ic✓ct✓t-✓-a✓al✓li✓ig✓gn✓n
  3058.               Do not permit (do permit) unaligned accesses.
  3059.  
  3060.        -✓-m✓mo✓ol✓ld✓d-✓-a✓al✓li✓ig✓gn✓n
  3061.               Enable structure-alignment compatibility  with  In-
  3062.               tel's  gcc release version 1.3 (based on gcc 1.37).
  3063.               Currently this is buggy in that #✓#p✓pr✓ra✓ag✓gm✓ma✓a a✓al✓li✓ig✓gn✓n 1✓1  is
  3064.               always assumed as well, and cannot be turned off.
  3065.  
  3066.        These `-✓-m✓m' options are defined for the DEC Alpha implemen-
  3067.        tations:
  3068.  
  3069.        -✓-m✓mn✓no✓o-✓-s✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t
  3070.  
  3071.        -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t
  3072.               Use (do not use) the  hardware  floating-point  in-
  3073.               structions  for  floating-point  operations.   When
  3074.               -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t is specified, functions in `l✓li✓ib✓bg✓gc✓cc✓c1✓1.✓.c✓c'
  3075.               will  be used to perform floating-point operations.
  3076.               Unless they are replaced by routines  that  emulate
  3077.               the  floating-point operations, or compiled in such
  3078.               a way as to call such  emulations  routines,  these
  3079.               routines will issue floating-point operations.   If
  3080.               you are compiling for an  Alpha  without  floating-
  3081.               point  operations, you must ensure that the library
  3082.               is built so as not to call them.
  3083.  
  3084.               Note that Alpha implementations  without  floating-
  3085.               point  operations  are  required  to have floating-
  3086.               point registers.
  3087.  
  3088.        -✓-m✓mf✓fp✓p-✓-r✓re✓eg✓g
  3089.  
  3090.        -✓-m✓mn✓no✓o-✓-f✓fp✓p-✓-r✓re✓eg✓gs✓s
  3091.               Generate code that uses (does not use)  the  float-
  3092.               ing-point   register   set.   -✓-m✓mn✓no✓o-✓-f✓fp✓p-✓-r✓re✓eg✓gs✓s  implies
  3093.               -✓-m✓ms✓so✓of✓ft✓t-✓-f✓fl✓lo✓oa✓at✓t.  If the floating-point  register  set
  3094.               is  not used, floating point operands are passed in
  3095.               integer registers as  if  they  were  integers  and
  3096.               floating-point  results are passed in $0 instead of
  3097.  
  3098.  
  3099.  
  3100. GNU Tools                   1993/10/13                         47
  3101.  
  3102.  
  3103.  
  3104.  
  3105.  
  3106. GCC(1)                      GNU Tools                      GCC(1)
  3107.  
  3108.  
  3109.               $f0.  This is a non-standard calling  sequence,  so
  3110.               any  function with a floating-point argument or re-
  3111.               turn value called by code  compiled  with  -✓-m✓mn✓no✓o-✓-f✓fp✓p-✓-
  3112.               r✓re✓eg✓gs✓s must also be compiled with that option.
  3113.  
  3114.               A  typical  use of this option is building a kernel
  3115.               that does not use, and hence need not save and  re-
  3116.               store, any floating-point registers.
  3117.  
  3118.        These additional options are available on System V Release
  3119.        4 for compatibility with other compilers on those systems:
  3120.  
  3121.        -✓-G✓G     On  SVr4  systems, g✓gc✓cc✓c accepts the option `-✓-G✓G' (and
  3122.               passes it to the system linker), for  compatibility
  3123.               with  other compilers.  However, we suggest you use
  3124.               `-✓-s✓sy✓ym✓mb✓bo✓ol✓li✓ic✓c' or `-✓-s✓sh✓ha✓ar✓re✓ed✓d' as appropriate, instead of
  3125.               supplying linker options on the g✓gc✓cc✓c command line.
  3126.  
  3127.        -✓-Q✓Qy✓y    Identify the versions of each tool used by the com-
  3128.               piler, in a .✓.i✓id✓de✓en✓nt✓t assembler directive in the  out-
  3129.               put.
  3130.  
  3131.        -✓-Q✓Qn✓n    Refrain from adding .✓.i✓id✓de✓en✓nt✓t directives to the output
  3132.               file (this is the default).
  3133.  
  3134.        -✓-Y✓YP✓P,✓,_✓d_✓i_✓r_✓s
  3135.               Search the directories _✓d_✓i_✓r_✓s, and no others, for li-
  3136.               braries  specified with `-✓-l✓l'.  You can separate di-
  3137.               rectory entries  in  _✓d_✓i_✓r_✓s  from  one  another  with
  3138.               colons.
  3139.  
  3140.        -✓-Y✓Ym✓m,✓,_✓d_✓i_✓r
  3141.               Look in the directory _✓d_✓i_✓r to find the M4 preproces-
  3142.               sor.  The assembler uses this option.
  3143.  
  3144. C✓CO✓OD✓DE✓E G✓GE✓EN✓NE✓ER✓RA✓AT✓TI✓IO✓ON✓N O✓OP✓PT✓TI✓IO✓ON✓NS✓S
  3145.        These machine-independent options  control  the  interface
  3146.        conventions used in code generation.
  3147.  
  3148.        Most  of  them  begin  with `-f'.  These options have both
  3149.        positive and negative forms; the negative form of  `-✓-f✓ff✓fo✓oo✓o'
  3150.        would  be `-✓-f✓fn✓no✓o-✓-f✓fo✓oo✓o'.  In the table below, only one of the
  3151.        forms is listed--the one which is not  the  default.   You
  3152.        can  figure out the other form by either removing `n✓no✓o-✓-' or
  3153.        adding it.
  3154.  
  3155.        -✓-f✓fn✓no✓on✓nn✓nu✓ul✓ll✓l-✓-o✓ob✓bj✓je✓ec✓ct✓ts✓s
  3156.               Assume that objects reached through references  are
  3157.               not null (C++ only).
  3158.  
  3159.               Normally,  GNU  C++  makes conservative assumptions
  3160.               about objects reached through references.  For  ex-
  3161.               ample,  the  compiler must check that a✓a is not null
  3162.               in code like the following:
  3163.  
  3164.  
  3165.  
  3166. GNU Tools                   1993/10/13                         48
  3167.  
  3168.  
  3169.  
  3170.  
  3171.  
  3172. GCC(1)                      GNU Tools                      GCC(1)
  3173.  
  3174.  
  3175.               obj &a = g (); a.f (2);
  3176.  
  3177.               Checking that references of this sort have non-null
  3178.               values  requires extra code, however, and it is un-
  3179.               necessary  for  many   programs.    You   can   use
  3180.               `-✓-f✓fn✓no✓on✓nn✓nu✓ul✓ll✓l-✓-o✓ob✓bj✓je✓ec✓ct✓ts✓s' to omit the checks for null, if
  3181.               your program doesn't require checking.
  3182.  
  3183.        -✓-f✓fp✓pc✓cc✓c-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n
  3184.               Use the same convention for  returning  s✓st✓tr✓ru✓uc✓ct✓t  and
  3185.               u✓un✓ni✓io✓on✓n  values  that is used by the usual C compiler
  3186.               on your system.  This convention is less  efficient
  3187.               for small structures, and on many machines it fails
  3188.               to be reentrant; but it has the advantage of allow-
  3189.               ing  intercallability between GCC-compiled code and
  3190.               PCC-compiled code.
  3191.  
  3192.        -✓-f✓fr✓re✓eg✓g-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n
  3193.               Use the convention that s✓st✓tr✓ru✓uc✓ct✓t and u✓un✓ni✓io✓on✓n values are
  3194.               returned  in registers when possible.  This is more
  3195.               efficient     for     small     structures     than
  3196.               -✓-f✓fp✓pc✓cc✓c-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n.
  3197.  
  3198.               If  you  specify  neither  -✓-f✓fp✓pc✓cc✓c-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n  nor
  3199.               -✓-f✓fr✓re✓eg✓g-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n, GNU CC defaults  to  whichever
  3200.               convention is standard for the target.  If there is
  3201.               no  standard  convention,  GNU   CC   defaults   to
  3202.               -✓-f✓fp✓pc✓cc✓c-✓-s✓st✓tr✓ru✓uc✓ct✓t-✓-r✓re✓et✓tu✓ur✓rn✓n.
  3203.  
  3204.        -✓-f✓fs✓sh✓ho✓or✓rt✓t-✓-e✓en✓nu✓um✓ms✓s
  3205.               Allocate  to  an e✓en✓nu✓um✓m type only as many bytes as it
  3206.               needs for the declared range  of  possible  values.
  3207.               Specifically,  the  e✓en✓nu✓um✓m type will be equivalent to
  3208.               the smallest integer type which has enough room.
  3209.  
  3210.        -✓-f✓fs✓sh✓ho✓or✓rt✓t-✓-d✓do✓ou✓ub✓bl✓le✓e
  3211.               Use the same size for d✓do✓ou✓ub✓bl✓le✓e as for f✓fl✓lo✓oa✓at✓t .
  3212.  
  3213.        -✓-f✓fs✓sh✓ha✓ar✓re✓ed✓d-✓-d✓da✓at✓ta✓a
  3214.               Requests that the data and non-c✓co✓on✓ns✓st✓t  variables  of
  3215.               this compilation be shared data rather than private
  3216.               data.  The distinction makes sense only on  certain
  3217.               operating  systems, where shared data is shared be-
  3218.               tween processes running  the  same  program,  while
  3219.               private data exists in one copy per process.
  3220.  
  3221.        -✓-f✓fn✓no✓o-✓-c✓co✓om✓mm✓mo✓on✓n
  3222.               Allocate even uninitialized global variables in the
  3223.               bss section of the object file, rather than  gener-
  3224.               ating  them  as common blocks.  This has the effect
  3225.               that if the same variable is declared (without  e✓ex✓x-✓-
  3226.               t✓te✓er✓rn✓n)  in  two different compilations, you will get
  3227.               an error when you link them.  The only reason  this
  3228.               might  be  useful is if you wish to verify that the
  3229.  
  3230.  
  3231.  
  3232. GNU Tools                   1993/10/13                         49
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238. GCC(1)                      GNU Tools                      GCC(1)
  3239.  
  3240.  
  3241.               program will work on  other  systems  which  always
  3242.               work this way.
  3243.  
  3244.        -✓-f✓fn✓no✓o-✓-i✓id✓de✓en✓nt✓t
  3245.               Ignore the `#✓#i✓id✓de✓en✓nt✓t' directive.
  3246.  
  3247.        -✓-f✓fn✓no✓o-✓-g✓gn✓nu✓u-✓-l✓li✓in✓nk✓ke✓er✓r
  3248.               Do  not  output global initializations (such as C++
  3249.               constructors and destructors) in the form  used  by
  3250.               the  GNU linker (on systems where the GNU linker is
  3251.               the standard method of handling  them).   Use  this
  3252.               option when you want to use a non-GNU linker, which
  3253.               also requires using the c✓co✓ol✓ll✓le✓ec✓ct✓t2✓2  program  to  make
  3254.               sure  the  system  linker includes constructors and
  3255.               destructors.  (c✓co✓ol✓ll✓le✓ec✓ct✓t2✓2 is included in the  GNU  CC
  3256.               distribution.)   For  systems  which  _✓m_✓u_✓s_✓t use c✓co✓ol✓l-✓-
  3257.               l✓le✓ec✓ct✓t2✓2, the compiler driver g✓gc✓cc✓c is configured to  do
  3258.               this automatically.
  3259.  
  3260.        -✓-f✓fi✓in✓nh✓hi✓ib✓bi✓it✓t-✓-s✓si✓iz✓ze✓e-✓-d✓di✓ir✓re✓ec✓ct✓ti✓iv✓ve✓e
  3261.               Don't  output  a .✓.s✓si✓iz✓ze✓e assembler directive, or any-
  3262.               thing else that would cause trouble if the function
  3263.               is  split  in  the  middle,  and the two halves are
  3264.               placed at locations far apart in memory.  This  op-
  3265.               tion  is  used  when  compiling  `c✓cr✓rt✓ts✓st✓tu✓uf✓ff✓f.✓.c✓c';  you
  3266.               should not need to use it for anything else.
  3267.  
  3268.        -✓-f✓fv✓ve✓er✓rb✓bo✓os✓se✓e-✓-a✓as✓sm✓m
  3269.               Put extra commentary information in  the  generated
  3270.               assembly  code  to make it more readable.  This op-
  3271.               tion is generally only of use to those who actually
  3272.               need  to  read the generated assembly code (perhaps
  3273.               while debugging the compiler itself).
  3274.  
  3275.        -✓-f✓fv✓vo✓ol✓la✓at✓ti✓il✓le✓e
  3276.               Consider all memory references through pointers  to
  3277.               be volatile.
  3278.  
  3279.        -✓-f✓fv✓vo✓ol✓la✓at✓ti✓il✓le✓e-✓-g✓gl✓lo✓ob✓ba✓al✓l
  3280.               Consider all memory references to extern and global
  3281.               data items to be volatile.
  3282.  
  3283.        -✓-f✓fp✓pi✓ic✓c  If supported for the target machines, generate  po-
  3284.               sition-independent  code,  suitable  for  use  in a
  3285.               shared library.
  3286.  
  3287.        -✓-f✓fP✓PI✓IC✓C  If supported for the target machine, emit position-
  3288.               independent  code,  suitable  for  dynamic linking,
  3289.               even if branches need large displacements.
  3290.  
  3291.        -✓-f✓ff✓fi✓ix✓xe✓ed✓d-✓-_✓r_✓e_✓g
  3292.               Treat the register named _✓r_✓e_✓g as a  fixed  register;
  3293.               generated  code  should  never  refer to it (except
  3294.               perhaps as a stack pointer,  frame  pointer  or  in
  3295.  
  3296.  
  3297.  
  3298. GNU Tools                   1993/10/13                         50
  3299.  
  3300.  
  3301.  
  3302.  
  3303.  
  3304. GCC(1)                      GNU Tools                      GCC(1)
  3305.  
  3306.  
  3307.               some other fixed role).
  3308.  
  3309.               _✓r_✓e_✓g  must  be the name of a register.  The register
  3310.               names accepted are machine-specific and are defined
  3311.               in the R✓RE✓EG✓GI✓IS✓ST✓TE✓ER✓R_✓_N✓NA✓AM✓ME✓ES✓S macro in the machine descrip-
  3312.               tion macro file.
  3313.  
  3314.               This flag does not have a negative form, because it
  3315.               specifies a three-way choice.
  3316.  
  3317.        -✓-f✓fc✓ca✓al✓ll✓l-✓-u✓us✓se✓ed✓d-✓-_✓r_✓e_✓g
  3318.               Treat the register named _✓r_✓e_✓g as an allocatable reg-
  3319.               ister that is clobbered by function calls.  It  may
  3320.               be  allocated  for temporaries or variables that do
  3321.               not live across a call.   Functions  compiled  this
  3322.               way will not save and restore the register _✓r_✓e_✓g.
  3323.  
  3324.               Use  of  this  flag for a register that has a fixed
  3325.               pervasive role in the  machine's  execution  model,
  3326.               such  as  the  stack pointer or frame pointer, will
  3327.               produce disastrous results.
  3328.  
  3329.               This flag does not have a negative form, because it
  3330.               specifies a three-way choice.
  3331.  
  3332.        -✓-f✓fc✓ca✓al✓ll✓l-✓-s✓sa✓av✓ve✓ed✓d-✓-_✓r_✓e_✓g
  3333.               Treat the register named _✓r_✓e_✓g as an allocatable reg-
  3334.               ister saved by functions.  It may be allocated even
  3335.               for  temporaries  or  variables  that live across a
  3336.               call.  Functions compiled this way  will  save  and
  3337.               restore the register _✓r_✓e_✓g if they use it.
  3338.  
  3339.               Use  of  this  flag for a register that has a fixed
  3340.               pervasive role in the  machine's  execution  model,
  3341.               such  as  the  stack pointer or frame pointer, will
  3342.               produce disastrous results.
  3343.  
  3344.               A different sort of disaster will result  from  the
  3345.               use  of  this flag for a register in which function
  3346.               values may be returned.
  3347.  
  3348.               This flag does not have a negative form, because it
  3349.               specifies a three-way choice.
  3350.  
  3351. P✓PR✓RA✓AG✓GM✓MA✓AS✓S
  3352.        Two  `#✓#p✓pr✓ra✓ag✓gm✓ma✓a'  directives  are  supported for GNU C++, to
  3353.        permit using the same header file for two purposes:  as  a
  3354.        definition  of  interfaces to a given object class, and as
  3355.        the full definition of the contents of that object  class.
  3356.  
  3357.        #✓#p✓pr✓ra✓ag✓gm✓ma✓a i✓in✓nt✓te✓er✓rf✓fa✓ac✓ce✓e
  3358.               (C++  only.)   Use  this  directive in header files
  3359.               that define object classes, to save space  in  most
  3360.               of  the  object files that use those classes.  Nor-
  3361.  
  3362.  
  3363.  
  3364. GNU Tools                   1993/10/13                         51
  3365.  
  3366.  
  3367.  
  3368.  
  3369.  
  3370. GCC(1)                      GNU Tools                      GCC(1)
  3371.  
  3372.  
  3373.               mally, local copies of certain information  (backup
  3374.               copies of inline member functions, debugging infor-
  3375.               mation, and the internal tables that implement vir-
  3376.               tual  functions)  must  be kept in each object file
  3377.               that includes class definitions.  You can use  this
  3378.               pragma  to  avoid  such duplication.  When a header
  3379.               file containing `#✓#p✓pr✓ra✓ag✓gm✓ma✓a i✓in✓nt✓te✓er✓rf✓fa✓ac✓ce✓e' is included  in
  3380.               a  compilation, this auxiliary information will not
  3381.               be generated (unless the main input source file it-
  3382.               self  uses `#✓#p✓pr✓ra✓ag✓gm✓ma✓a i✓im✓mp✓pl✓le✓em✓me✓en✓nt✓ta✓at✓ti✓io✓on✓n').  Instead, the
  3383.               object files will contain references to be resolved
  3384.               at link time.
  3385.  
  3386.        #✓#p✓pr✓ra✓ag✓gm✓ma✓a i✓im✓mp✓pl✓le✓em✓me✓en✓nt✓ta✓at✓ti✓io✓on✓n
  3387.  
  3388.        #✓#p✓pr✓ra✓ag✓gm✓ma✓a i✓im✓mp✓pl✓le✓em✓me✓en✓nt✓ta✓at✓ti✓io✓on✓n "✓"_✓o_✓b_✓j_✓e_✓c_✓t_✓s.✓.h✓h"✓"
  3389.               (C++  only.)  Use this pragma in a main input file,
  3390.               when you want  full  output  from  included  header
  3391.               files  to be generated (and made globally visible).
  3392.               The included  header  file,  in  turn,  should  use
  3393.               `#✓#p✓pr✓ra✓ag✓gm✓ma✓a  i✓in✓nt✓te✓er✓rf✓fa✓ac✓ce✓e'.  Backup copies of inline mem-
  3394.               ber functions, debugging information, and  the  in-
  3395.               ternal  tables  used to implement virtual functions
  3396.               are all generated in implementation files.
  3397.  
  3398.               If you use `#✓#p✓pr✓ra✓ag✓gm✓ma✓a i✓im✓mp✓pl✓le✓em✓me✓en✓nt✓ta✓at✓ti✓io✓on✓n' with  no  argu-
  3399.               ment,  it  applies to an include file with the same
  3400.               basename as  your  source  file;  for  example,  in
  3401.               `a✓al✓ll✓lc✓cl✓la✓as✓ss✓s.✓.c✓cc✓c',  `#✓#p✓pr✓ra✓ag✓gm✓ma✓a  i✓im✓mp✓pl✓le✓em✓me✓en✓nt✓ta✓at✓ti✓io✓on✓n' by itself
  3402.               is   equivalent    to    `#✓#p✓pr✓ra✓ag✓gm✓ma✓a    i✓im✓mp✓pl✓le✓em✓me✓en✓nt✓ta✓at✓ti✓io✓on✓n
  3403.               "✓"a✓al✓ll✓lc✓cl✓la✓as✓ss✓s.✓.h✓h"✓"'.  Use the string argument if you want
  3404.               a single implementation file to include  code  from
  3405.               multiple header files.
  3406.  
  3407.               There  is no way to split up the contents of a sin-
  3408.               gle header file into multiple implementation files.
  3409.  
  3410. F✓FI✓IL✓LE✓ES✓S
  3411.        file.c             C source file
  3412.        file.h             C header (preprocessor) file
  3413.        file.i             preprocessed C source file
  3414.        file.C             C++ source file
  3415.        file.cc            C++ source file
  3416.        file.cxx           C++ source file
  3417.        file.m             Objective-C source file
  3418.        file.s             assembly language file
  3419.        file.o             object file
  3420.        a.out              link edited output
  3421.        _✓T_✓M_✓P_✓D_✓I_✓R/cc*         temporary files
  3422.        _✓L_✓I_✓B_✓D_✓I_✓R/cpp         preprocessor
  3423.        _✓L_✓I_✓B_✓D_✓I_✓R/cc1         compiler for C
  3424.        _✓L_✓I_✓B_✓D_✓I_✓R/cc1plus     compiler for C++
  3425.        _✓L_✓I_✓B_✓D_✓I_✓R/collect     linker front end needed on some machines
  3426.        _✓L_✓I_✓B_✓D_✓I_✓R/libgcc.a    GCC subroutine library
  3427.  
  3428.  
  3429.  
  3430. GNU Tools                   1993/10/13                         52
  3431.  
  3432.  
  3433.  
  3434.  
  3435.  
  3436. GCC(1)                      GNU Tools                      GCC(1)
  3437.  
  3438.  
  3439.        /lib/crt[01n].o    start-up routine
  3440.        _✓L_✓I_✓B_✓D_✓I_✓R/ccrt0       additional start-up routine for C++
  3441.        /lib/libc.a        standard C library, see
  3442.        _✓i_✓n_✓t_✓r_✓o(3)
  3443.        /usr/include       standard directory for #✓#i✓in✓nc✓cl✓lu✓ud✓de✓e files
  3444.        _✓L_✓I_✓B_✓D_✓I_✓R/include     standard gcc directory for #✓#i✓in✓nc✓cl✓lu✓ud✓de✓e files
  3445.        _✓L_✓I_✓B_✓D_✓I_✓R/g++-include additional g++ directory for #✓#i✓in✓nc✓cl✓lu✓ud✓de✓e
  3446.  
  3447.        _✓L_✓I_✓B_✓D_✓I_✓R is usually /✓/u✓us✓sr✓r/✓/l✓lo✓oc✓ca✓al✓l/✓/l✓li✓ib✓b/✓/_✓m_✓a_✓c_✓h_✓i_✓n_✓e/_✓v_✓e_✓r_✓s_✓i_✓o_✓n.
  3448.        _✓T_✓M_✓P_✓D_✓I_✓R comes from the environment variable T✓TM✓MP✓PD✓DI✓IR✓R (default
  3449.        /✓/u✓us✓sr✓r/✓/t✓tm✓mp✓p if available, else /✓/t✓tm✓mp✓p).
  3450.  
  3451. S✓SE✓EE✓E A✓AL✓LS✓SO✓O
  3452.        cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
  3453.        `g✓gc✓cc✓c', `c✓cp✓pp✓p', `a✓as✓s', `l✓ld✓d', and `g✓gd✓db✓b' entries in i✓in✓nf✓fo✓o.
  3454.        _✓U_✓s_✓i_✓n_✓g _✓a_✓n_✓d _✓P_✓o_✓r_✓t_✓i_✓n_✓g _✓G_✓N_✓U _✓C_✓C _✓(_✓f_✓o_✓r  _✓v_✓e_✓r_✓s_✓i_✓o_✓n  _✓2_✓._✓0_✓),  Richard  M.
  3455.        Stallman;  _✓T_✓h_✓e _✓C _✓P_✓r_✓e_✓p_✓r_✓o_✓c_✓e_✓s_✓s_✓o_✓r, Richard M. Stallman; _✓D_✓e_✓b_✓u_✓g_✓-
  3456.        _✓g_✓i_✓n_✓g _✓w_✓i_✓t_✓h _✓G_✓D_✓B_✓: _✓t_✓h_✓e _✓G_✓N_✓U _✓S_✓o_✓u_✓r_✓c_✓e_✓-_✓L_✓e_✓v_✓e_✓l _✓D_✓e_✓b_✓u_✓g_✓g_✓e_✓r,  Richard  M.
  3457.        Stallman and Roland H. Pesch; _✓U_✓s_✓i_✓n_✓g _✓a_✓s_✓: _✓t_✓h_✓e _✓G_✓N_✓U _✓A_✓s_✓s_✓e_✓m_✓b_✓l_✓e_✓r,
  3458.        Dean Elsner, Jay Fenlason & friends; _✓l_✓d_✓: _✓t_✓h_✓e  _✓G_✓N_✓U  _✓l_✓i_✓n_✓k_✓e_✓r,
  3459.        Steve Chamberlain and Roland Pesch.
  3460.  
  3461. B✓BU✓UG✓GS✓S
  3462.        For instructions on reporting bugs, see the GCC manual.
  3463.  
  3464. C✓CO✓OP✓PY✓YI✓IN✓NG✓G
  3465.        Copyright  1991, 1992, 1993 Free Software Foundation, Inc.
  3466.  
  3467.        Permission is granted  to  make  and  distribute  verbatim
  3468.        copies  of  this  manual provided the copyright notice and
  3469.        this permission notice are preserved on all copies.
  3470.  
  3471.        Permission is granted to copy and distribute modified ver-
  3472.        sions  of  this  manual  under the conditions for verbatim
  3473.        copying, provided that the entire resulting  derived  work
  3474.        is  distributed  under  the  terms  of a permission notice
  3475.        identical to this one.
  3476.  
  3477.        Permission is granted to copy and distribute  translations
  3478.        of this manual into another language, under the above con-
  3479.        ditions for modified versions, except that this permission
  3480.        notice  may  be  included  in translations approved by the
  3481.        Free Software Foundation instead of in  the  original  En-
  3482.        glish.
  3483.  
  3484. A✓AU✓UT✓TH✓HO✓OR✓RS✓S
  3485.        See the GNU CC Manual for the contributors to GNU CC.
  3486.  
  3487.  
  3488.  
  3489.  
  3490.  
  3491.  
  3492.  
  3493.  
  3494.  
  3495.  
  3496. GNU Tools                   1993/10/13                         53
  3497.  
  3498.  
  3499.