Annotation of gcc/gcc.info-2, revision 1.1.1.3

1.1.1.3 ! root        1: This is Info file gcc.info, produced by Makeinfo-1.47 from the input
1.1       root        2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
                      6:    Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
                      7: 
1.1.1.3 ! root        8:    Permission is granted to make and distribute verbatim copies of this
        !             9: manual provided the copyright notice and this permission notice are
        !            10: preserved on all copies.
1.1       root       11: 
                     12:    Permission is granted to copy and distribute modified versions of
                     13: this manual under the conditions for verbatim copying, provided also
1.1.1.3 ! root       14: that the sections entitled "GNU General Public License" and "Boycott"
        !            15: are included exactly as in the original, and provided that the entire
        !            16: resulting derived work is distributed under the terms of a permission
        !            17: notice identical to this one.
1.1       root       18: 
                     19:    Permission is granted to copy and distribute translations of this
                     20: manual into another language, under the above conditions for modified
1.1.1.3 ! root       21: versions, except that the sections entitled "GNU General Public
        !            22: License" and "Boycott", and this permission notice, may be included in
        !            23: translations approved by the Free Software Foundation instead of in the
        !            24: original English.
1.1       root       25: 
                     26: 
                     27: File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Dialect Options,  Up: Invoking GCC
                     28: 
                     29: Options to Request or Suppress Warnings
                     30: =======================================
                     31: 
1.1.1.3 ! root       32:    Warnings are diagnostic messages that report constructions which are
        !            33: not inherently erroneous but which are risky or suggest there may have
        !            34: been an error.
1.1       root       35: 
                     36:    You can request many specific warnings with options beginning `-W',
1.1.1.3 ! root       37: for example `-Wimplicit' to request warnings on implicit declarations. 
        !            38: Each of these specific warning options also has a negative form
1.1       root       39: beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 
                     40: This manual lists only one of the two forms, whichever is not the
                     41: default.
                     42: 
                     43:    These options control the amount and kinds of warnings produced by
                     44: GNU CC:
                     45: 
                     46: `-fsyntax-only'
                     47:      Check the code for syntax errors, but don't emit any output.
                     48: 
                     49: `-w'
                     50:      Inhibit all warning messages.
                     51: 
1.1.1.2   root       52: `-Wno_import'
                     53:      Inhibit warning messages about the use of `#import'.
                     54: 
1.1       root       55: `-pedantic'
                     56:      Issue all the warnings demanded by strict ANSI standard C; reject
                     57:      all programs that use forbidden extensions.
                     58: 
                     59:      Valid ANSI standard C programs should compile properly with or
                     60:      without this option (though a rare few will require `-ansi'). 
                     61:      However, without this option, certain GNU extensions and
                     62:      traditional C features are supported as well.  With this option,
                     63:      they are rejected.
                     64: 
                     65:      `-pedantic' does not cause warning messages for use of the
                     66:      alternate keywords whose names begin and end with `__'.  Pedantic
                     67:      warnings are also disabled in the expression that follows
                     68:      `__extension__'.  However, only system header files should use
1.1.1.3 ! root       69:      these escape routes; application programs should avoid them. *Note
        !            70:      Alternate Keywords::.
1.1       root       71: 
1.1.1.3 ! root       72:      This option is not intended to be useful; it exists only to satisfy
        !            73:      pedants who would otherwise claim that GNU CC fails to support the
        !            74:      ANSI standard.
        !            75: 
        !            76:      Some users try to use `-pedantic' to check programs for strict ANSI
        !            77:      C conformance.  They soon find that it does not do quite what they
        !            78:      want: it finds some non-ANSI practices, but not all--only those
        !            79:      for which ANSI C *requires* a diagnostic.
1.1       root       80: 
                     81:      A feature to report any failure to conform to ANSI C might be
                     82:      useful in some instances, but would require considerable
1.1.1.3 ! root       83:      additional work and would be quite different from `-pedantic'.  We
        !            84:      recommend, rather, that users take advantage of the extensions of
        !            85:      GNU C and disregard the limitations of other compilers.  Aside
1.1       root       86:      from certain supercomputers and obsolete small machines, there is
                     87:      less and less reason ever to use any other C compiler other than
                     88:      for bootstrapping GNU CC.
                     89: 
                     90: `-pedantic-errors'
                     91:      Like `-pedantic', except that errors are produced rather than
                     92:      warnings.
                     93: 
                     94: `-W'
                     95:      Print extra warning messages for these events:
                     96: 
1.1.1.3 ! root       97:         * A nonvolatile automatic variable might be changed by a call to
        !            98:           `longjmp'.  These warnings as well are possible only in
1.1       root       99:           optimizing compilation.
                    100: 
                    101:           The compiler sees only the calls to `setjmp'.  It cannot know
                    102:           where `longjmp' will be called; in fact, a signal handler
1.1.1.3 ! root      103:           could call it at any point in the code.  As a result, you may
        !           104:           get a warning even when there is in fact no problem because
        !           105:           `longjmp' cannot in fact be called at the place which would
        !           106:           cause a problem.
1.1       root      107: 
                    108:         * A function can return either with or without a value. 
                    109:           (Falling off the end of the function body is considered
1.1.1.3 ! root      110:           returning without a value.)  For example, this function would
        !           111:           evoke such a warning:
1.1       root      112: 
                    113:                foo (a)
                    114:                {
                    115:                  if (a > 0)
                    116:                    return a;
                    117:                }
                    118: 
                    119:         * An expression-statement contains no side effects.
                    120: 
                    121:         * An unsigned value is compared against zero with `>' or `<='.
                    122: 
                    123: `-Wimplicit'
                    124:      Warn whenever a function or parameter is implicitly declared.
                    125: 
                    126: `-Wreturn-type'
                    127:      Warn whenever a function is defined with a return-type that
                    128:      defaults to `int'.  Also warn about any `return' statement with no
                    129:      return-value in a function whose return-type is not `void'.
                    130: 
                    131: `-Wunused'
                    132:      Warn whenever a local variable is unused aside from its
                    133:      declaration, whenever a function is declared static but never
                    134:      defined, and whenever a statement computes a result that is
                    135:      explicitly not used.
                    136: 
                    137: `-Wswitch'
                    138:      Warn whenever a `switch' statement has an index of enumeral type
                    139:      and lacks a `case' for one or more of the named codes of that
                    140:      enumeration.  (The presence of a `default' label prevents this
                    141:      warning.)  `case' labels outside the enumeration range also
                    142:      provoke warnings when this option is used.
                    143: 
                    144: `-Wcomment'
                    145:      Warn whenever a comment-start sequence `/*' appears in a comment.
                    146: 
                    147: `-Wtrigraphs'
                    148:      Warn if any trigraphs are encountered (assuming they are enabled).
                    149: 
                    150: `-Wformat'
                    151:      Check calls to `printf' and `scanf', etc., to make sure that the
                    152:      arguments supplied have types appropriate to the format string
                    153:      specified.
                    154: 
                    155: `-Wchar-subscripts'
1.1.1.3 ! root      156:      Warn if an array subscript has type `char'.  This is a common cause
        !           157:      of error, as programmers often forget that this type is signed on
        !           158:      some machines.
1.1       root      159: 
                    160: `-Wuninitialized'
                    161:      An automatic variable is used without first being initialized.
                    162: 
                    163:      These warnings are possible only in optimizing compilation,
                    164:      because they require data flow information that is computed only
                    165:      when optimizing.  If you don't specify `-O', you simply won't get
                    166:      these warnings.
                    167: 
                    168:      These warnings occur only for variables that are candidates for
                    169:      register allocation.  Therefore, they do not occur for a variable
                    170:      that is declared `volatile', or whose address is taken, or whose
1.1.1.3 ! root      171:      size is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
        !           172:      structures, unions or arrays, even when they are in registers.
1.1       root      173: 
                    174:      Note that there may be no warning about a variable that is used
                    175:      only to compute a value that itself is never used, because such
                    176:      computations may be deleted by data flow analysis before the
                    177:      warnings are printed.
                    178: 
                    179:      These warnings are made optional because GNU CC is not smart
                    180:      enough to see all the reasons why the code might be correct
                    181:      despite appearing to have an error.  Here is one example of how
                    182:      this can happen:
                    183: 
                    184:           {
                    185:             int x;
                    186:             switch (y)
                    187:               {
                    188:               case 1: x = 1;
                    189:                 break;
                    190:               case 2: x = 4;
                    191:                 break;
                    192:               case 3: x = 5;
                    193:               }
                    194:             foo (x);
                    195:           }
                    196: 
                    197:      If the value of `y' is always 1, 2 or 3, then `x' is always
1.1.1.3 ! root      198:      initialized, but GNU CC doesn't know this.  Here is another common
        !           199:      case:
1.1       root      200: 
                    201:           {
                    202:             int save_y;
                    203:             if (change_y) save_y = y, y = new_y;
                    204:             ...
                    205:             if (change_y) y = save_y;
                    206:           }
                    207: 
                    208:      This has no bug because `save_y' is used only if it is set.
                    209: 
1.1.1.3 ! root      210:      Some spurious warnings can be avoided if you declare as `volatile'
        !           211:      all the functions you use that never return. *Note Function
        !           212:      Attributes::.
1.1       root      213: 
1.1.1.2   root      214: `-Wparentheses'
                    215:      Warn if parentheses are omitted in certain contexts.
                    216: 
1.1       root      217: `-Wall'
1.1.1.3 ! root      218:      All of the above `-W' options combined.  These are all the options
        !           219:      which pertain to usage that we recommend avoiding and that we
        !           220:      believe is easy to avoid, even in conjunction with macros.
1.1       root      221: 
                    222:    The remaining `-W...' options are not implied by `-Wall' because
                    223: they warn about constructions that we consider reasonable to use, on
                    224: occasion, in clean programs.
                    225: 
                    226: `-Wtraditional'
                    227:      Warn about certain constructs that behave differently in
                    228:      traditional and ANSI C.
                    229: 
                    230:         * Macro arguments occurring within string constants in the
1.1.1.3 ! root      231:           macro body. These would substitute the argument in
1.1       root      232:           traditional C, but are part of the constant in ANSI C.
                    233: 
1.1.1.3 ! root      234:         * A function declared external in one block and then used after
        !           235:           the end of the block.
1.1       root      236: 
                    237:         * A `switch' statement has an operand of type `long'.
                    238: 
                    239: `-Wshadow'
                    240:      Warn whenever a local variable shadows another local variable.
                    241: 
                    242: `-Wid-clash-LEN'
                    243:      Warn whenever two distinct identifiers match in the first LEN
                    244:      characters.  This may help you prepare a program that will compile
                    245:      with certain obsolete, brain-damaged compilers.
                    246: 
                    247: `-Wpointer-arith'
                    248:      Warn about anything that depends on the "size of" a function type
                    249:      or of `void'.  GNU C assigns these types a size of 1, for
1.1.1.3 ! root      250:      convenience in calculations with `void *' pointers and pointers to
        !           251:      functions.
1.1       root      252: 
                    253: `-Wcast-qual'
                    254:      Warn whenever a pointer is cast so as to remove a type qualifier
                    255:      from the target type.  For example, warn if a `const char *' is
                    256:      cast to an ordinary `char *'.
                    257: 
                    258: `-Wcast-align'
                    259:      Warn whenever a pointer is cast such that the required alignment
                    260:      of the target is increased.  For example, warn if a `char *' is
1.1.1.3 ! root      261:      cast to an `int *' on machines where integers can only be accessed
        !           262:      at two- or four-byte boundaries.
1.1       root      263: 
                    264: `-Wwrite-strings'
                    265:      Give string constants the type `const char[LENGTH]' so that
                    266:      copying the address of one into a non-`const' `char *' pointer
                    267:      will get a warning.  These warnings will help you find at compile
                    268:      time code that can try to write into a string constant, but only
                    269:      if you have been very careful about using `const' in declarations
                    270:      and prototypes.  Otherwise, it will just be a nuisance; this is
                    271:      why we did not make `-Wall' request these warnings.
                    272: 
                    273: `-Wconversion'
                    274:      Warn if a prototype causes a type conversion that is different
                    275:      from what would happen to the same argument in the absence of a
                    276:      prototype.  This includes conversions of fixed point to floating
                    277:      and vice versa, and conversions changing the width or signedness
                    278:      of a fixed point argument except when the same as the default
                    279:      promotion.
                    280: 
                    281: `-Waggregate-return'
1.1.1.3 ! root      282:      Warn if any functions that return structures or unions are defined
        !           283:      or called.  (In languages where you can return an array, this also
        !           284:      elicits a warning.)
1.1       root      285: 
                    286: `-Wstrict-prototypes'
                    287:      Warn if a function is declared or defined without specifying the
                    288:      argument types.  (An old-style function definition is permitted
1.1.1.3 ! root      289:      without a warning if preceded by a declaration which specifies the
        !           290:      argument types.)
1.1       root      291: 
                    292: `-Wmissing-prototypes'
                    293:      Warn if a global function is defined without a previous prototype
                    294:      declaration.  This warning is issued even if the definition itself
                    295:      provides a prototype.  The aim is to detect global functions that
                    296:      fail to be declared in header files.
                    297: 
                    298: `-Wredundant-decls'
                    299:      Warn if anything is declared more than once in the same scope,
                    300:      even in cases where multiple declaration is valid and changes
                    301:      nothing.
                    302: 
                    303: `-Wnested-externs'
                    304:      Warn if an `extern' declaration is encountered within an function.
                    305: 
1.1.1.2   root      306: `-Winline'
                    307:      Warn if a function can not be inlined, and either it was declared
                    308:      as inline, or else the `-finline-functions' option was given.
1.1       root      309: 
                    310: `-Werror'
                    311:      Make all warnings into errors.
                    312: 
                    313: 
                    314: File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
                    315: 
                    316: Options for Debugging Your Program or GNU CC
                    317: ============================================
                    318: 
                    319:    GNU CC has various special options that are used for debugging
                    320: either your program or GCC:
                    321: 
                    322: `-g'
                    323:      Produce debugging information in the operating system's native
1.1.1.2   root      324:      format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
1.1       root      325:      debugging information.
                    326: 
                    327:      On most systems that use stabs format, `-g' enables use of extra
1.1.1.3 ! root      328:      debugging information that only GDB can use; this extra information
        !           329:      makes debugging work better in GDB but will probably make DBX
        !           330:      crash or refuse to read the program.  If you want to control for
        !           331:      certain whether to generate the extra information, use `-gstabs+'
        !           332:      or `-gstabs' (see below).
1.1       root      333: 
                    334:      Unlike most other C compilers, GNU CC allows you to use `-g' with
                    335:      `-O'.  The shortcuts taken by optimized code may occasionally
                    336:      produce surprising results: some variables you declared may not
                    337:      exist at all; flow of control may briefly move where you did not
                    338:      expect it; some statements may not be executed because they
                    339:      compute constant results or their values were already at hand;
                    340:      some statements may execute in different places because they were
                    341:      moved out of loops.
                    342: 
                    343:      Nevertheless it proves possible to debug optimized output.  This
                    344:      makes it reasonable to use the optimizer for programs that might
                    345:      have bugs.
                    346: 
                    347:      The following options are useful when GNU CC is generated with the
                    348:      capability for more than one debugging format.
                    349: 
                    350: `-ggdb'
                    351:      Produce debugging information in the native format (if that is
                    352:      supported), including GDB extensions if at all possible.
                    353: 
                    354: `-gstabs'
                    355:      Produce debugging information in stabs format (if that is
                    356:      supported), without GDB extensions.  This is the format used by
                    357:      DBX on most BSD systems.
                    358: 
                    359: `-gstabs+'
                    360:      Produce debugging information in stabs format (if that is
                    361:      supported), using GDB extensions.  The use of these extensions is
                    362:      likely to make DBX crash or refuse to read the program.
                    363: 
                    364: `-gcoff'
                    365:      Produce debugging information in COFF format (if that is
1.1.1.3 ! root      366:      supported). This is the format used by SDB on COFF systems.
1.1       root      367: 
1.1.1.2   root      368: `-gxcoff'
                    369:      Produce debugging information in XCOFF format (if that is
1.1.1.3 ! root      370:      supported). This is the format used on IBM RS/6000 systems.
1.1.1.2   root      371: 
1.1       root      372: `-gdwarf'
                    373:      Produce debugging information in DWARF format (if that is
1.1.1.3 ! root      374:      supported). This is the format used by SDB on systems that use
1.1       root      375:      DWARF.
                    376: 
                    377: `-gLEVEL'
                    378: `-ggdbLEVEL'
                    379: `-gstabsLEVEL'
                    380: `-gcoffLEVEL'
1.1.1.2   root      381: `-gxcoffLEVEL'
1.1       root      382: `-gdwarfLEVEL'
                    383:      Request debugging information and also use LEVEL to specify how
                    384:      much information.  The default level is 2.
                    385: 
1.1.1.3 ! root      386:      Level 1 produces minimal information, enough for making backtraces
        !           387:      in parts of the program that you don't plan to debug.  This
        !           388:      includes descriptions of functions and external variables, but no
        !           389:      information about local variables and no line numbers.
1.1       root      390: 
                    391:      Level 3 includes extra information, such as all the macro
                    392:      definitions present in the program.  Some debuggers support macro
                    393:      expansion when you use `-g3'.
                    394: 
                    395: `-p'
                    396:      Generate extra code to write profile information suitable for the
                    397:      analysis program `prof'.
                    398: 
                    399: `-pg'
                    400:      Generate extra code to write profile information suitable for the
                    401:      analysis program `gprof'.
                    402: 
                    403: `-a'
                    404:      Generate extra code to write profile information for basic blocks,
1.1.1.3 ! root      405:      which will record the number of times each basic block is executed.
        !           406:      This data could be analyzed by a program like `tcov'.  Note,
        !           407:      however, that the format of the data is not what `tcov' expects.
        !           408:      Eventually GNU `gprof' should be extended to process this data.
1.1       root      409: 
                    410: `-dLETTERS'
1.1.1.3 ! root      411:      Says to make debugging dumps during compilation at times specified
        !           412:      by LETTERS.  This is used for debugging the compiler.  The file
        !           413:      names for most of the dumps are made by appending a word to the
        !           414:      source file name (e.g.  `foo.c.rtl' or `foo.c.jump').  Here are the
        !           415:      possible letters for use in LETTERS, and their meanings:
1.1       root      416: 
                    417:     `M'
                    418:           Dump all macro definitions, at the end of preprocessing, and
                    419:           write no output.
                    420: 
                    421:     `N'
                    422:           Dump all macro names, at the end of preprocessing.
                    423: 
                    424:     `D'
                    425:           Dump all macro definitions, at the end of preprocessing, in
                    426:           addition to normal output.
                    427: 
                    428:     `y'
                    429:           Dump debugging information during parsing, to standard error.
                    430: 
                    431:     `r'
                    432:           Dump after RTL generation, to `FILE.rtl'.
                    433: 
                    434:     `x'
                    435:           Just generate RTL for a function instead of compiling it. 
                    436:           Usually used with `r'.
                    437: 
                    438:     `j'
                    439:           Dump after first jump optimization, to `FILE.jump'.
                    440: 
                    441:     `s'
1.1.1.3 ! root      442:           Dump after CSE (including the jump optimization that sometimes
        !           443:           follows CSE), to `FILE.cse'.
1.1       root      444: 
                    445:     `L'
                    446:           Dump after loop optimization, to `FILE.loop'.
                    447: 
                    448:     `t'
                    449:           Dump after the second CSE pass (including the jump
                    450:           optimization that sometimes follows CSE), to `FILE.cse2'.
                    451: 
                    452:     `f'
                    453:           Dump after flow analysis, to `FILE.flow'.
                    454: 
                    455:     `c'
                    456:           Dump after instruction combination, to `FILE.combine'.
                    457: 
                    458:     `S'
                    459:           Dump after the first instruction scheduling pass, to
                    460:           `FILE.sched'.
                    461: 
                    462:     `l'
                    463:           Dump after local register allocation, to `FILE.lreg'.
                    464: 
                    465:     `g'
                    466:           Dump after global register allocation, to `FILE.greg'.
                    467: 
                    468:     `R'
                    469:           Dump after the second instruction scheduling pass, to
                    470:           `FILE.sched2'.
                    471: 
                    472:     `J'
                    473:           Dump after last jump optimization, to `FILE.jump2'.
                    474: 
                    475:     `d'
                    476:           Dump after delayed branch scheduling, to `FILE.dbr'.
                    477: 
                    478:     `k'
                    479:           Dump after conversion from registers to stack, to
                    480:           `FILE.stack'.
                    481: 
                    482:     `a'
                    483:           Produce all the dumps listed above.
                    484: 
                    485:     `m'
                    486:           Print statistics on memory usage, at the end of the run, to
                    487:           standard error.
                    488: 
                    489:     `p'
                    490:           Annotate the assembler output with a comment indicating which
                    491:           pattern and alternative was used.
                    492: 
                    493: `-fpretend-float'
                    494:      When running a cross-compiler, pretend that the target machine
                    495:      uses the same floating point format as the host machine.  This
                    496:      causes incorrect output of the actual floating constants, but the
                    497:      actual instruction sequence will probably be the same as GNU CC
                    498:      would make when running on the target machine.
                    499: 
                    500: `-save-temps'
                    501:      Store the usual "temporary" intermediate files permanently; place
                    502:      them in the current directory and name them based on the source
1.1.1.3 ! root      503:      file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
        !           504:      files `foo.i' and `foo.s', as well as `foo.o'.
1.1       root      505: 
                    506: 
                    507: File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
                    508: 
                    509: Options That Control Optimization
                    510: =================================
                    511: 
                    512:    These options control various sorts of optimizations:
                    513: 
                    514: `-O'
                    515:      Optimize.  Optimizing compilation takes somewhat more time, and a
                    516:      lot more memory for a large function.
                    517: 
                    518:      Without `-O', the compiler's goal is to reduce the cost of
1.1.1.3 ! root      519:      compilation and to make debugging produce the expected results.
1.1       root      520:      Statements are independent: if you stop the program with a
                    521:      breakpoint between statements, you can then assign a new value to
                    522:      any variable or change the program counter to any other statement
                    523:      in the function and get exactly the results you would expect from
                    524:      the source code.
                    525: 
                    526:      Without `-O', only variables declared `register' are allocated in
                    527:      registers.  The resulting compiled code is a little worse than
                    528:      produced by PCC without `-O'.
                    529: 
                    530:      With `-O', the compiler tries to reduce code size and execution
                    531:      time.
                    532: 
                    533:      When `-O' is specified, `-fthread-jumps' and `-fdelayed-branch'
1.1.1.3 ! root      534:      are turned on.  On some machines other flags may also be turned on.
1.1       root      535: 
                    536: `-O2'
1.1.1.3 ! root      537:      Optimize even more.  Nearly all supported optimizations that do not
        !           538:      involve a space-speed tradeoff are performed.  As compared to `-O',
        !           539:      this option increases both compilation time and the performance of
        !           540:      the generated code.
        !           541: 
        !           542:      `-O2' turns on all `-fFLAG' options that enable more optimization,
        !           543:      except for `-funroll-loops', `-funroll-all-loops' and
        !           544:      `-fomit-frame-pointer'.
1.1       root      545: 
                    546:    Options of the form `-fFLAG' specify machine-independent flags. 
                    547: Most flags have both positive and negative forms; the negative form of
1.1.1.3 ! root      548: `-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
        !           549: is listed--the one which is not the default. You can figure out the
        !           550: other form by either removing `no-' or adding it.
1.1       root      551: 
                    552: `-ffloat-store'
1.1.1.3 ! root      553:      Do not store floating point variables in registers.  This prevents
        !           554:      undesirable excess precision on machines such as the 68000 where
        !           555:      the floating registers (of the 68881) keep more precision than a
        !           556:      `double' is supposed to have.
1.1       root      557: 
                    558:      For most programs, the excess precision does only good, but a few
1.1.1.3 ! root      559:      programs rely on the precise definition of IEEE floating point.
1.1       root      560:      Use `-ffloat-store' for such programs.
                    561: 
                    562: `-fno-defer-pop'
                    563:      Always pop the arguments to each function call as soon as that
                    564:      function returns.  For machines which must pop arguments after a
                    565:      function call, the compiler normally lets arguments accumulate on
                    566:      the stack for several function calls and pops them all at once.
                    567: 
                    568: `-fforce-mem'
                    569:      Force memory operands to be copied into registers before doing
                    570:      arithmetic on them.  This may produce better code by making all
                    571:      memory references potential common subexpressions.  When they are
                    572:      not common subexpressions, instruction combination should
                    573:      eliminate the separate register-load.  I am interested in hearing
                    574:      about the difference this makes.
                    575: 
                    576: `-fforce-addr'
                    577:      Force memory address constants to be copied into registers before
                    578:      doing arithmetic on them.  This may produce better code just as
                    579:      `-fforce-mem' may.  I am interested in hearing about the
                    580:      difference this makes.
                    581: 
                    582: `-fomit-frame-pointer'
                    583:      Don't keep the frame pointer in a register for functions that
                    584:      don't need one.  This avoids the instructions to save, set up and
                    585:      restore frame pointers; it also makes an extra register available
                    586:      in many functions.  *It also makes debugging impossible on some
                    587:      machines.*
                    588: 
1.1.1.3 ! root      589:      On some machines, such as the Vax, this flag has no effect, because
        !           590:      the standard calling sequence automatically handles the frame
        !           591:      pointer and nothing is saved by pretending it doesn't exist.  The
        !           592:      machine-description macro `FRAME_POINTER_REQUIRED' controls
        !           593:      whether a target machine supports this flag.  *Note Registers::.
        !           594: 
        !           595: `-fno-inline'
        !           596:      Don't pay attention to the `inline' keyword.  Normally this option
        !           597:      is used to keep the compiler from expanding any functions inline.
1.1       root      598: 
                    599: `-finline-functions'
                    600:      Integrate all simple functions into their callers.  The compiler
1.1.1.3 ! root      601:      heuristically decides which functions are simple enough to be worth
        !           602:      integrating in this way.
1.1       root      603: 
                    604:      If all calls to a given function are integrated, and the function
                    605:      is declared `static', then the function is normally not output as
                    606:      assembler code in its own right.
                    607: 
                    608: `-fkeep-inline-functions'
                    609:      Even if all calls to a given function are integrated, and the
                    610:      function is declared `static', nevertheless output a separate
                    611:      run-time callable version of the function.
                    612: 
                    613: `-fno-function-cse'
                    614:      Do not put function addresses in registers; make each instruction
                    615:      that calls a constant function contain the function's address
                    616:      explicitly.
                    617: 
                    618:      This option results in less efficient code, but some strange hacks
                    619:      that alter the assembler output may be confused by the
                    620:      optimizations performed when this option is not used.
                    621: 
1.1.1.3 ! root      622: `-ffast-math'
        !           623:      This option allows GCC to violate some ANSI or IEEE
        !           624:      rules/specifications in the interest of optimizing code for speed.
        !           625:       For example, it allows the compiler to assume arguments to the
        !           626:      `sqrt' function are non-negative numbers.
        !           627: 
        !           628:      This option should never be turned on by any `-O' option since it
        !           629:      can result in incorrect output for programs which depend on an
        !           630:      exact implementation of IEEE or ANSI rules/specifications for math
        !           631:      functions.
        !           632: 
1.1       root      633:    The following options control specific optimizations.  The `-O2'
                    634: option turns on all of these optimizations except `-funroll-loops' and
                    635: `-funroll-all-loops'.  The `-O' option usually turns on the
                    636: `-fthread-jumps' and `-fdelayed-branch' options, but specific machines
                    637: may change the default optimizations.
                    638: 
                    639:    You can use the following flags in the rare cases when "fine-tuning"
                    640: of optimizations to be performed is desired.
                    641: 
                    642: `-fstrength-reduce'
                    643:      Perform the optimizations of loop strength reduction and
                    644:      elimination of iteration variables.
                    645: 
                    646: `-fthread-jumps'
1.1.1.3 ! root      647:      Perform optimizations where we check to see if a jump branches to a
        !           648:      location where another comparison subsumed by the first is found. 
        !           649:      If so, the first branch is redirected to either the destination of
        !           650:      the second branch or a point immediately following it, depending
        !           651:      on whether the condition is known to be true or false.
1.1       root      652: 
                    653: `-fcse-follow-jumps'
1.1.1.3 ! root      654:      In common subexpression elimination, scan through jump instructions
        !           655:      when the target of the jump is not reached by any other path.  For
        !           656:      example, when CSE encounters an `if' statement with an `else'
        !           657:      clause, CSE will follow the jump when the condition tested is
        !           658:      false.
        !           659: 
        !           660: `-fcse-skip-blocks'
        !           661:      This is similar to `-fcse-follow-jumps', but causes CSE to follow
        !           662:      jumps which conditionally skip over blocks.  When CSE encounters a
        !           663:      simple `if' statement with no else clause, `-fcse-skip-blocks'
        !           664:      causes CSE to follow the jump around the body of the `if'.
1.1       root      665: 
                    666: `-frerun-cse-after-loop'
                    667:      Re-run common subexpression elimination after loop optimizations
                    668:      has been performed.
                    669: 
                    670: `-fexpensive-optimizations'
                    671:      Perform a number of minor optimizations that are relatively
                    672:      expensive.
                    673: 
                    674: `-fdelayed-branch'
                    675:      If supported for the target machine, attempt to reorder
                    676:      instructions to exploit instruction slots available after delayed
                    677:      branch instructions.
                    678: 
                    679: `-fschedule-insns'
                    680:      If supported for the target machine, attempt to reorder
                    681:      instructions to eliminate execution stalls due to required data
                    682:      being unavailable.  This helps machines that have slow floating
                    683:      point or memory load instructions by allowing other instructions
                    684:      to be issued until the result of the load or floating point
                    685:      instruction is required.
                    686: 
                    687: `-fschedule-insns2'
                    688:      Similar to `-fschedule-insns', but requests an additional pass of
                    689:      instruction scheduling after register allocation has been done. 
                    690:      This is especially useful on machines with a relatively small
                    691:      number of registers and where memory load instructions take more
                    692:      than one cycle.
                    693: 
1.1.1.3 ! root      694: `-fcaller-saves'
        !           695:      Enable values to be allocated in registers that will be clobbered
        !           696:      by function calls, by emitting extra instructions to save and
        !           697:      restore the registers around such calls.  Such allocation is done
        !           698:      only when it seems to result in better code than would otherwise
        !           699:      be produced.
        !           700: 
        !           701:      This option is enabled by default on certain machines, usually
        !           702:      those which have no call-preserved registers to use instead.
        !           703: 
1.1       root      704: `-funroll-loops'
1.1.1.3 ! root      705:      Perform the optimization of loop unrolling.  This is only done for
        !           706:      loops whose number of iterations can be determined at compile time
        !           707:      or run time. `-funroll-loop' implies `-fstrength-reduce' and
1.1       root      708:      `-frerun-cse-after-loop'.
                    709: 
                    710: `-funroll-all-loops'
                    711:      Perform the optimization of loop unrolling.  This is done for all
                    712:      loops and usually makes programs run more slowly. 
                    713:      `-funroll-all-loops' implies `-fstrength-reduce' and
                    714:      `-frerun-cse-after-loop'.
                    715: 
                    716: `-fno-peephole'
                    717:      Disable any machine-specific peephole optimizations.
                    718: 
                    719: 
                    720: File: gcc.info,  Node: Preprocessor Options,  Next: Link Options,  Prev: Optimize Options,  Up: Invoking GCC
                    721: 
                    722: Options Controlling the Preprocessor
                    723: ====================================
                    724: 
                    725:    These options control the C preprocessor, which is run on each C
                    726: source file before actual compilation.
                    727: 
1.1.1.3 ! root      728:    If you use the `-E' option, nothing is done except preprocessing.
1.1       root      729: Some of these options make sense only together with `-E' because they
                    730: cause the preprocessor output to be unsuitable for actual compilation.
                    731: 
                    732: `-include FILE'
1.1.1.3 ! root      733:      Process FILE as input before processing the regular input file. In
        !           734:      effect, the contents of FILE are compiled first.  Any `-D' and
1.1       root      735:      `-U' options on the command line are always processed before
                    736:      `-include FILE', regardless of the order in which they are
                    737:      written.  All the `-include' and `-imacros' options are processed
                    738:      in the order in which they are written.
                    739: 
                    740: `-imacros FILE'
                    741:      Process FILE as input, discarding the resulting output, before
                    742:      processing the regular input file.  Because the output generated
                    743:      from FILE is discarded, the only effect of `-imacros FILE' is to
                    744:      make the macros defined in FILE available for use in the main
                    745:      input.
                    746: 
1.1.1.3 ! root      747:      Any `-D' and `-U' options on the command line are always processed
        !           748:      before `-imacros FILE', regardless of the order in which they are
        !           749:      written.  All the `-include' and `-imacros' options are processed
        !           750:      in the order in which they are written.
1.1       root      751: 
                    752: `-nostdinc'
                    753:      Do not search the standard system directories for header files. 
                    754:      Only the directories you have specified with `-I' options (and the
                    755:      current directory, if appropriate) are searched.  *Note Directory
                    756:      Options::, for information on `-I'.
                    757: 
1.1.1.3 ! root      758:      By using both `-nostdinc' and `-I-', you can limit the include-file
        !           759:      search path to only those directories you specify explicitly.
        !           760: 
        !           761: `-nostdinc++'
        !           762:      Do not search for header files in the C++-specific standard
        !           763:      directories, but do still search the other standard directories.
        !           764:      (This option is used when building `libg++'.)
1.1       root      765: 
                    766: `-undef'
                    767:      Do not predefine any nonstandard macros.  (Including architecture
                    768:      flags).
                    769: 
                    770: `-E'
                    771:      Run only the C preprocessor.  Preprocess all the C source files
                    772:      specified and output the results to standard output or to the
                    773:      specified output file.
                    774: 
                    775: `-C'
1.1.1.3 ! root      776:      Tell the preprocessor not to discard comments.  Used with the `-E'
        !           777:      option.
1.1       root      778: 
                    779: `-P'
1.1.1.3 ! root      780:      Tell the preprocessor not to generate `#line' commands. Used with
        !           781:      the `-E' option.
1.1       root      782: 
                    783: `-M'
                    784:      Tell the preprocessor to output a rule suitable for `make'
                    785:      describing the dependencies of each object file.  For each source
1.1.1.3 ! root      786:      file, the preprocessor outputs one `make'-rule whose target is the
        !           787:      object file name for that source file and whose dependencies are
        !           788:      all the files `#include'd in it.  This rule may be a single line
        !           789:      or may be continued with `\'-newline if it is long.  The list of
        !           790:      rules is printed on standard output instead of the preprocessed C
        !           791:      program.
1.1       root      792: 
                    793:      `-M' implies `-E'.
                    794: 
                    795:      Another way to specify output of a `make' rule is by setting the
                    796:      environment variable `DEPENDENCIES_OUTPUT' (*note Environment
                    797:      Variables::.).
                    798: 
                    799: `-MM'
                    800:      Like `-M' but the output mentions only the user header files
                    801:      included with `#include "FILE"'.  System header files included
                    802:      with `#include <FILE>' are omitted.
                    803: 
                    804: `-MD'
                    805:      Like `-M' but the dependency information is written to files with
                    806:      names made by replacing `.c' with `.d' at the end of the input
                    807:      file names.  This is in addition to compiling the file as
                    808:      specified--`-MD' does not inhibit ordinary compilation the way
                    809:      `-M' does.
                    810: 
                    811:      The Mach utility `md' can be used to merge the `.d' files into a
                    812:      single dependency file suitable for using with the `make' command.
                    813: 
                    814: `-MMD'
                    815:      Like `-MD' except mention only user header files, not system
                    816:      header files.
                    817: 
                    818: `-H'
                    819:      Print the name of each header file used, in addition to other
                    820:      normal activities.
                    821: 
                    822: `-DMACRO'
                    823:      Define macro MACRO with the string `1' as its definition.
                    824: 
                    825: `-DMACRO=DEFN'
                    826:      Define macro MACRO as DEFN.  All instances of `-D' on the command
                    827:      line are processed before any `-U' options.
                    828: 
                    829: `-UMACRO'
                    830:      Undefine macro MACRO.  `-U' options are evaluated after all `-D'
                    831:      options, but before any `-include' and `-imacros' options.
                    832: 
                    833: `-dM'
                    834:      Tell the preprocessor to output only a list of the macro
                    835:      definitions that are in effect at the end of preprocessing.  Used
                    836:      with the `-E' option.
                    837: 
                    838: `-dD'
                    839:      Tell the preprocessing to pass all macro definitions into the
                    840:      output, in their proper sequence in the rest of the output.
                    841: 
                    842: `-dN'
                    843:      Like `-dD' except that the macro arguments and contents are
1.1.1.3 ! root      844:      omitted. Only `#define NAME' is included in the output.
1.1       root      845: 
                    846: `-trigraphs'
                    847:      Support ANSI C trigraphs.  You don't want to know about this
                    848:      brain-damage.  The `-ansi' option also has this effect.
                    849: 
                    850: 
                    851: File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Preprocessor Options,  Up: Invoking GCC
                    852: 
                    853: Options for Linking
                    854: ===================
                    855: 
                    856:    These options come into play when the compiler links object files
1.1.1.3 ! root      857: into an executable output file.  They are meaningless if the compiler is
        !           858: not doing a link step.
1.1       root      859: 
                    860: `OBJECT-FILE-NAME'
                    861:      A file name that does not end in a special recognized suffix is
                    862:      considered to name an object file or library.  (Object files are
                    863:      distinguished from libraries by the linker according to the file
                    864:      contents.)  If linking is done, these object files are used as
                    865:      input to the linker.
                    866: 
                    867: `-c'
                    868: `-S'
                    869: `-E'
                    870:      If any of these options is used, then the linker is not run, and
                    871:      object file names should not be used as arguments.  *Note Overall
                    872:      Options::.
                    873: 
                    874: `-lLIBRARY'
                    875:      Search the library named LIBRARY when linking.
                    876: 
                    877:      It makes a difference where in the command you write this option;
                    878:      the linker searches processes libraries and object files in the
1.1.1.2   root      879:      order they are specified.  Thus, `foo.o -lz bar.o' searches
1.1       root      880:      library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
                    881:      refers to functions in `z', those functions may not be loaded.
                    882: 
1.1.1.3 ! root      883:      The linker searches a standard list of directories for the library,
        !           884:      which is actually a file named `libLIBRARY.a'.  The linker then
        !           885:      uses this file as if it had been specified precisely by name.
1.1       root      886: 
                    887:      The directories searched include several standard system
                    888:      directories plus any that you specify with `-L'.
                    889: 
                    890:      Normally the files found this way are library files--archive files
                    891:      whose members are object files.  The linker handles an archive
                    892:      file by scanning through it for members which define symbols that
1.1.1.3 ! root      893:      have so far been referenced but not defined.  But if the file that
        !           894:      is found is an ordinary object file, it is linked in the usual
        !           895:      fashion.  The only difference between using an `-l' option and
        !           896:      specifying a file name is that `-l' surrounds LIBRARY with `lib'
        !           897:      and `.a' and searches several directories.
1.1       root      898: 
                    899: `-nostdlib'
                    900:      Don't use the standard system libraries and startup files when
1.1.1.3 ! root      901:      linking. Only the files you specify will be passed to the linker.
1.1       root      902: 
                    903: `-static'
                    904:      On systems that support dynamic linking, this prevents linking
                    905:      with the shared libraries.  On other systems, this option has no
                    906:      effect.
                    907: 
                    908: `-shared'
                    909:      Produce a shared object which can then be linked with other
                    910:      objects to form an executable.  Only a few systems support this
                    911:      option.
                    912: 
                    913: `-symbolic'
                    914:      Bind references to global symbols when building a shared object. 
                    915:      Warn about any unresolved references (unless overridden by the
                    916:      link editor option `-Xlinker -z -Xlinker defs').  Only a few
                    917:      systems support this option.
                    918: 
                    919: `-Xlinker OPTION'
                    920:      Pass OPTION as an option to the linker.  You can use this to
                    921:      supply system-specific linker options which GNU CC does not know
                    922:      how to recognize.
                    923: 
                    924:      If you want to pass an option that takes an argument, you must use
1.1.1.3 ! root      925:      `-Xlinker' twice, once for the option and once for the argument.
1.1       root      926:      For example, to pass `-assert definitions', you must write
1.1.1.3 ! root      927:      `-Xlinker -assert -Xlinker definitions'.  It does not work to write
        !           928:      `-Xlinker "-assert definitions"', because this passes the entire
        !           929:      string as a single argument, which is not what the linker expects.
1.1       root      930: 
                    931: 
                    932: File: gcc.info,  Node: Directory Options,  Next: Target Options,  Prev: Link Options,  Up: Invoking GCC
                    933: 
                    934: Options for Directory Search
                    935: ============================
                    936: 
                    937:    These options specify directories to search for header files, for
                    938: libraries and for parts of the compiler:
                    939: 
                    940: `-IDIR'
                    941:      Append directory DIR to the list of directories searched for
                    942:      include files.
                    943: 
                    944: `-I-'
                    945:      Any directories you specify with `-I' options before the `-I-'
                    946:      option are searched only for the case of `#include "FILE"'; they
                    947:      are not searched for `#include <FILE>'.
                    948: 
                    949:      If additional directories are specified with `-I' options after
                    950:      the `-I-', these directories are searched for all `#include'
1.1.1.3 ! root      951:      directives.  (Ordinarily *all* `-I' directories are used this way.)
1.1       root      952: 
                    953:      In addition, the `-I-' option inhibits the use of the current
                    954:      directory (where the current input file came from) as the first
                    955:      search directory for `#include "FILE"'.  There is no way to
                    956:      override this effect of `-I-'.  With `-I.' you can specify
                    957:      searching the directory which was current when the compiler was
                    958:      invoked.  That is not exactly the same as what the preprocessor
                    959:      does by default, but it is often satisfactory.
                    960: 
                    961:      `-I-' does not inhibit the use of the standard system directories
                    962:      for header files.  Thus, `-I-' and `-nostdinc' are independent.
                    963: 
                    964: `-LDIR'
                    965:      Add directory DIR to the list of directories to be searched for
                    966:      `-l'.
                    967: 
                    968: `-BPREFIX'
                    969:      This option specifies where to find the executables, libraries and
                    970:      data files of the compiler itself.
                    971: 
                    972:      The compiler driver program runs one or more of the subprograms
1.1.1.3 ! root      973:      `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
        !           974:      program it tries to run, both with and without `MACHINE/VERSION/'
        !           975:      (*note Target Options::.).
1.1       root      976: 
                    977:      For each subprogram to be run, the compiler driver first tries the
                    978:      `-B' prefix, if any.  If that name is not found, or if `-B' was
                    979:      not specified, the driver tries two standard prefixes, which are
1.1.1.2   root      980:      `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'.  If neither of
                    981:      those results in a file name that is found, the unmodified program
                    982:      name is searched for using the directories specified in your
                    983:      `PATH' environment variable.
1.1       root      984: 
                    985:      `-B' prefixes that effectively specify directory names also apply
                    986:      to libraries in the linker, because the compiler translates these
                    987:      options into `-L' options for the linker.
                    988: 
1.1.1.3 ! root      989:      The run-time support file `libgcc.a' can also be searched for using
        !           990:      the `-B' prefix, if needed.  If it is not found there, the two
        !           991:      standard prefixes above are tried, and that is all.  The file is
        !           992:      left out of the link if it is not found by those means.
        !           993: 
        !           994:      Another way to specify a prefix much like the `-B' prefix is to use
        !           995:      the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
        !           996:      Variables::.
1.1       root      997: 
                    998: 
                    999: File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Directory Options,  Up: Invoking GCC
                   1000: 
                   1001: Specifying Target Machine and Compiler Version
                   1002: ==============================================
                   1003: 
                   1004:    By default, GNU CC compiles code for the same type of machine that
                   1005: you are using.  However, it can also be installed as a cross-compiler,
                   1006: to compile for some other type of machine.  In fact, several different
                   1007: configurations of GNU CC, for different target machines, can be
                   1008: installed side by side.  Then you specify which one to use with the
                   1009: `-b' option.
                   1010: 
1.1.1.3 ! root     1011:    In addition, older and newer versions of GNU CC can be installed side
        !          1012: by side.  One of them (probably the newest) will be the default, but
        !          1013: you may sometimes wish to use another.
1.1       root     1014: 
                   1015: `-b MACHINE'
1.1.1.3 ! root     1016:      The argument MACHINE specifies the target machine for compilation.
1.1       root     1017:      This is useful when you have installed GNU CC as a cross-compiler.
                   1018: 
                   1019:      The value to use for MACHINE is the same as was specified as the
                   1020:      machine type when configuring GNU CC as a cross-compiler.  For
                   1021:      example, if a cross-compiler was configured with `configure
                   1022:      i386v', meaning to compile for an 80386 running System V, then you
                   1023:      would specify `-b i386v' to run that cross compiler.
                   1024: 
1.1.1.3 ! root     1025:      When you do not specify `-b', it normally means to compile for the
        !          1026:      same type of machine that you are using.
1.1       root     1027: 
                   1028: `-V VERSION'
1.1.1.3 ! root     1029:      The argument VERSION specifies which version of GNU CC to run.
1.1       root     1030:      This is useful when multiple versions are installed.  For example,
                   1031:      VERSION might be `2.0', meaning to run GNU CC version 2.0.
                   1032: 
                   1033:      The default version, when you do not specify `-V', is controlled
                   1034:      by the way GNU CC is installed.  Normally, it will be a version
                   1035:      that is recommended for general use.
                   1036: 
                   1037:    The `-b' and `-V' options actually work by controlling part of the
                   1038: file name used for the executable files and libraries used for
                   1039: compilation.  A given version of GNU CC, for a given target machine, is
1.1.1.3 ! root     1040: normally kept in the directory `/usr/local/lib/gcc-lib/MACHINE/VERSION'.
1.1       root     1041: 
                   1042:    It follows that sites can customize the effect of `-b' or `-V'
                   1043: either by changing the names of these directories or adding alternate
1.1.1.2   root     1044: names (or symbolic links).  Thus, if `/usr/local/lib/gcc-lib/80386' is
                   1045: a link to `/usr/local/lib/gcc-lib/i386v', then `-b 80386' will be an
                   1046: alias for `-b i386v'.
1.1       root     1047: 
                   1048:    In one respect, the `-b' or `-V' do not completely change to a
                   1049: different compiler: the top-level driver program `gcc' that you
                   1050: originally invoked continues to run and invoke the other executables
                   1051: (preprocessor, compiler per se, assembler and linker) that do the real
                   1052: work.  However, since no real work is done in the driver program, it
                   1053: usually does not matter that the driver program in use is not the one
                   1054: for the specified target and version.
                   1055: 
1.1.1.3 ! root     1056:    The only way that the driver program depends on the target machine is
        !          1057: in the parsing and handling of special machine-specific options.
1.1       root     1058: However, this is controlled by a file which is found, along with the
                   1059: other executables, in the directory for the specified version and
                   1060: target machine.  As a result, a single installed driver program adapts
                   1061: to any specified target machine and compiler version.
                   1062: 
                   1063:    The driver program executable does control one significant thing,
                   1064: however: the default version and target machine.  Therefore, you can
                   1065: install different instances of the driver program, compiled for
                   1066: different targets or versions, under different names.
                   1067: 
                   1068:    For example, if the driver for version 2.0 is installed as `ogcc'
                   1069: and that for version 2.1 is installed as `gcc', then the command `gcc'
1.1.1.3 ! root     1070: will use version 2.1 by default, while `ogcc' will use 2.0 by default. 
        !          1071: However, you can choose either version with either command with the
1.1       root     1072: `-V' option.
                   1073: 
                   1074: 
                   1075: File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
                   1076: 
                   1077: Specifying Hardware Models and Configurations
                   1078: =============================================
                   1079: 
                   1080:    Earlier we discussed the standard option `-b' which chooses among
1.1.1.3 ! root     1081: different installed compilers for completely different target machines,
        !          1082: such as Vax vs. 68000 vs. 80386.
1.1       root     1083: 
                   1084:    In addition, each of these target machine types can have its own
                   1085: special options, starting with `-m', to choose among various hardware
                   1086: models or configurations--for example, 68010 vs 68020, floating
                   1087: coprocessor or none.  A single installed version of the compiler can
                   1088: compile for any model or configuration, according to the options
                   1089: specified.
                   1090: 
                   1091:    These options are defined by the macro `TARGET_SWITCHES' in the
                   1092: machine description.  The default for the options is also defined by
                   1093: that macro, which enables you to change the defaults.
                   1094: 
                   1095: * Menu:
                   1096: 
                   1097: * M680x0 Options::
                   1098: * VAX Options::
                   1099: * SPARC Options::
                   1100: * Convex Options::
                   1101: * AMD29K Options::
                   1102: * M88K Options::
                   1103: * RS/6000 Options::
                   1104: * RT Options::
                   1105: * MIPS Options::
1.1.1.2   root     1106: * i386 Options::
1.1       root     1107: 
                   1108: 
                   1109: File: gcc.info,  Node: M680x0 Options,  Next: Vax Options,  Prev: Submodel Options,  Up: Submodel Options
                   1110: 
                   1111: M680x0 Options
                   1112: --------------
                   1113: 
1.1.1.3 ! root     1114:    These are the `-m' options defined for the 68000 series.  The default
        !          1115: values for these options depends on which style of 68000 was selected
        !          1116: when the compiler was configured; the defaults for the most common
        !          1117: choices are given below.
1.1       root     1118: 
                   1119: `-m68020'
                   1120: `-mc68020'
                   1121:      Generate output for a 68020 (rather than a 68000).  This is the
                   1122:      default when the compiler is configured for 68020-based systems.
                   1123: 
                   1124: `-m68000'
                   1125: `-mc68000'
                   1126:      Generate output for a 68000 (rather than a 68020).  This is the
                   1127:      default when the compiler is configured for a 68000-based systems.
                   1128: 
                   1129: `-m68881'
1.1.1.3 ! root     1130:      Generate output containing 68881 instructions for floating point.
1.1       root     1131:      This is the default for most 68020 systems unless `-nfp' was
                   1132:      specified when the compiler was configured.
                   1133: 
                   1134: `-mfpa'
1.1.1.3 ! root     1135:      Generate output containing Sun FPA instructions for floating point.
1.1       root     1136: 
                   1137: `-msoft-float'
1.1.1.3 ! root     1138:      Generate output containing library calls for floating point.
        !          1139:      *Warning:* the requisite libraries are not part of GNU CC.
1.1       root     1140:      Normally the facilities of the machine's usual C compiler are
                   1141:      used, but this can't be done directly in cross-compilation.  You
                   1142:      must make your own arrangements to provide suitable library
                   1143:      functions for cross-compilation.
                   1144: 
                   1145: `-mshort'
                   1146:      Consider type `int' to be 16 bits wide, like `short int'.
                   1147: 
                   1148: `-mnobitfield'
                   1149:      Do not use the bit-field instructions.  `-m68000' implies
                   1150:      `-mnobitfield'.
                   1151: 
                   1152: `-mbitfield'
                   1153:      Do use the bit-field instructions.  `-m68020' implies
                   1154:      `-mbitfield'.  This is the default if you use the unmodified
                   1155:      sources configured for a 68020.
                   1156: 
                   1157: `-mrtd'
                   1158:      Use a different function-calling convention, in which functions
                   1159:      that take a fixed number of arguments return with the `rtd'
                   1160:      instruction, which pops their arguments while returning.  This
                   1161:      saves one instruction in the caller since there is no need to pop
                   1162:      the arguments there.
                   1163: 
1.1.1.3 ! root     1164:      This calling convention is incompatible with the one normally used
        !          1165:      on Unix, so you cannot use it if you need to call libraries
1.1       root     1166:      compiled with the Unix compiler.
                   1167: 
                   1168:      Also, you must provide function prototypes for all functions that
1.1.1.3 ! root     1169:      take variable numbers of arguments (including `printf'); otherwise
        !          1170:      incorrect code will be generated for calls to those functions.
1.1       root     1171: 
                   1172:      In addition, seriously incorrect code will result if you call a
                   1173:      function with too many arguments.  (Normally, extra arguments are
                   1174:      harmlessly ignored.)
                   1175: 
                   1176:      The `rtd' instruction is supported by the 68010 and 68020
                   1177:      processors, but not by the 68000.
                   1178: 
                   1179: 
                   1180: File: gcc.info,  Node: VAX Options,  Next: Sparc Options,  Prev: M680x0 Options,  Up: Submodel Options
                   1181: 
                   1182: VAX Options
                   1183: -----------
                   1184: 
                   1185:    These `-m' options are defined for the Vax:
                   1186: 
                   1187: `-munix'
                   1188:      Do not output certain jump instructions (`aobleq' and so on) that
                   1189:      the Unix assembler for the Vax cannot handle across long ranges.
                   1190: 
                   1191: `-mgnu'
1.1.1.3 ! root     1192:      Do output those jump instructions, on the assumption that you will
        !          1193:      assemble with the GNU assembler.
1.1       root     1194: 
                   1195: `-mg'
                   1196:      Output code for g-format floating point numbers instead of
                   1197:      d-format.
                   1198: 
                   1199: 
                   1200: File: gcc.info,  Node: Sparc Options,  Next: Convex Options,  Prev: Vax Options,  Up: Submodel Options
                   1201: 
                   1202: SPARC Options
                   1203: -------------
                   1204: 
                   1205:    These `-m' switches are supported on the Sparc:
                   1206: 
1.1.1.2   root     1207: `-mforce-align'
1.1.1.3 ! root     1208:      Make sure all objects of type `double' are 8-byte aligned in memory
        !          1209:      and use double-word instructions to reference them.
1.1.1.2   root     1210: 
1.1       root     1211: `-mno-epilogue'
1.1.1.3 ! root     1212:      Generate separate return instructions for `return' statements.
1.1       root     1213:      This has both advantages and disadvantages; I don't recall what
                   1214:      they are.
                   1215: 
                   1216: 
                   1217: File: gcc.info,  Node: Convex Options,  Next: AMD29K Options,  Prev: SPARC Options,  Up: Submodel Options
                   1218: 
                   1219: Convex Options
                   1220: --------------
                   1221: 
                   1222:    These `-m' options are defined for the Convex:
                   1223: 
                   1224: `-mc1'
1.1.1.3 ! root     1225:      Generate output for a C1.  This is the default when the compiler is
        !          1226:      configured for a C1.
1.1       root     1227: 
                   1228: `-mc2'
1.1.1.3 ! root     1229:      Generate output for a C2.  This is the default when the compiler is
        !          1230:      configured for a C2.
1.1       root     1231: 
                   1232: `-margcount'
                   1233:      Generate code which puts an argument count in the word preceding
1.1.1.3 ! root     1234:      each argument list.  Some nonportable Convex and Vax programs need
        !          1235:      this word. (Debuggers don't, except for functions with
1.1       root     1236:      variable-length argument lists; this info is in the symbol table.)
                   1237: 
                   1238: `-mnoargcount'
                   1239:      Omit the argument count word.  This is the default if you use the
                   1240:      unmodified sources.
                   1241: 
                   1242: 
                   1243: File: gcc.info,  Node: AMD29K Options,  Next: M88K Options,  Prev: Convex Options,  Up: Submodel Options
                   1244: 
                   1245: AMD29K Options
                   1246: --------------
                   1247: 
                   1248:    These `-m' options are defined for the AMD Am29000:
                   1249: 
                   1250: `-mdw'
1.1.1.3 ! root     1251:      Generate code that assumes the `DW' bit is set, i.e., that byte and
        !          1252:      halfword operations are directly supported by the hardware.  This
        !          1253:      is the default.
1.1       root     1254: 
                   1255: `-mnodw'
                   1256:      Generate code that assumes the `DW' bit is not set.
                   1257: 
                   1258: `-mbw'
                   1259:      Generate code that assumes the system supports byte and halfword
                   1260:      write operations.  This is the default.
                   1261: 
                   1262: `-mnbw'
                   1263:      Generate code that assumes the systems does not support byte and
                   1264:      halfword write operations.  `-mnbw' implies `-mnodw'.
                   1265: 
                   1266: `-msmall'
                   1267:      Use a small memory model that assumes that all function addresses
                   1268:      are either within a single 256 KB segment or at an absolute
                   1269:      address of less than 256K.  This allows the `call' instruction to
                   1270:      be used instead of a `const', `consth', `calli' sequence.
                   1271: 
                   1272: `-mlarge'
                   1273:      Do not assume that the `call' instruction can be used; this is the
                   1274:      default.
                   1275: 
                   1276: `-m29050'
                   1277:      Generate code for the Am29050.
                   1278: 
                   1279: `-m29000'
                   1280:      Generate code for the Am29000.  This is the default.
                   1281: 
                   1282: `-mkernel-registers'
                   1283:      Generate references to registers `gr64-gr95' instead of
                   1284:      `gr96-gr127'.  This option can be used when compiling kernel code
                   1285:      that wants a set of global registers disjoint from that used by
                   1286:      user-mode code.
                   1287: 
                   1288:      Note that when this option is used, register names in `-f' flags
                   1289:      must use the normal, user-mode, names.
                   1290: 
                   1291: `-muser-registers'
                   1292:      Use the normal set of global registers, `gr96-gr127'.  This is the
                   1293:      default.
                   1294: 
                   1295: `-mstack-check'
                   1296:      Insert a call to `__msp_check' after each stack adjustment.  This
                   1297:      is often used for kernel code.
                   1298: 
                   1299: 

unix.superglobalmegacorp.com

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