Annotation of gcc/gcc.info-3, revision 1.1.1.7

1.1.1.7 ! root        1: This is Info file gcc.info, produced by Makeinfo-1.55 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: 
1.1.1.5   root        6:    Published by the Free Software Foundation 675 Massachusetts Avenue
                      7: Cambridge, MA 02139 USA
                      8: 
1.1.1.7 ! root        9:    Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation,
        !            10: Inc.
1.1       root       11: 
1.1.1.3   root       12:    Permission is granted to make and distribute verbatim copies of this
                     13: manual provided the copyright notice and this permission notice are
                     14: preserved on all copies.
1.1       root       15: 
                     16:    Permission is granted to copy and distribute modified versions of
                     17: this manual under the conditions for verbatim copying, provided also
1.1.1.7 ! root       18: that the sections entitled "GNU General Public License," "Funding for
        !            19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
        !            20: included exactly as in the original, and provided that the entire
        !            21: resulting derived work is distributed under the terms of a permission
        !            22: notice identical to this one.
1.1       root       23: 
                     24:    Permission is granted to copy and distribute translations of this
                     25: manual into another language, under the above conditions for modified
1.1.1.3   root       26: versions, except that the sections entitled "GNU General Public
1.1.1.7 ! root       27: License," "Funding for Free Software," and "Protect Your Freedom--Fight
        !            28: `Look And Feel'", and this permission notice, may be included in
        !            29: translations approved by the Free Software Foundation instead of in the
        !            30: original English.
        !            31: 
        !            32: 
        !            33: File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
        !            34: 
        !            35: Options for Debugging Your Program or GNU CC
        !            36: ============================================
        !            37: 
        !            38:    GNU CC has various special options that are used for debugging
        !            39: either your program or GCC:
        !            40: 
        !            41: `-g'
        !            42:      Produce debugging information in the operating system's native
        !            43:      format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
        !            44:      debugging information.
        !            45: 
        !            46:      On most systems that use stabs format, `-g' enables use of extra
        !            47:      debugging information that only GDB can use; this extra information
        !            48:      makes debugging work better in GDB but will probably make other
        !            49:      debuggers crash or refuse to read the program.  If you want to
        !            50:      control for certain whether to generate the extra information, use
        !            51:      `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', `-gdwarf+', or
        !            52:      `-gdwarf' (see below).
        !            53: 
        !            54:      Unlike most other C compilers, GNU CC allows you to use `-g' with
        !            55:      `-O'.  The shortcuts taken by optimized code may occasionally
        !            56:      produce surprising results: some variables you declared may not
        !            57:      exist at all; flow of control may briefly move where you did not
        !            58:      expect it; some statements may not be executed because they
        !            59:      compute constant results or their values were already at hand;
        !            60:      some statements may execute in different places because they were
        !            61:      moved out of loops.
        !            62: 
        !            63:      Nevertheless it proves possible to debug optimized output.  This
        !            64:      makes it reasonable to use the optimizer for programs that might
        !            65:      have bugs.
        !            66: 
        !            67:      The following options are useful when GNU CC is generated with the
        !            68:      capability for more than one debugging format.
        !            69: 
        !            70: `-ggdb'
        !            71:      Produce debugging information in the native format (if that is
        !            72:      supported), including GDB extensions if at all possible.
        !            73: 
        !            74: `-gstabs'
        !            75:      Produce debugging information in stabs format (if that is
        !            76:      supported), without GDB extensions.  This is the format used by
        !            77:      DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
        !            78:      systems this option produces stabs debugging output which is not
        !            79:      understood by DBX or SDB.  On System V Release 4 systems this
        !            80:      option requires the GNU assembler.
        !            81: 
        !            82: `-gstabs+'
        !            83:      Produce debugging information in stabs format (if that is
        !            84:      supported), using GNU extensions understood only by the GNU
        !            85:      debugger (GDB).  The use of these extensions is likely to make
        !            86:      other debuggers crash or refuse to read the program.
        !            87: 
        !            88: `-gcoff'
        !            89:      Produce debugging information in COFF format (if that is
        !            90:      supported).  This is the format used by SDB on most System V
        !            91:      systems prior to System V Release 4.
        !            92: 
        !            93: `-gxcoff'
        !            94:      Produce debugging information in XCOFF format (if that is
        !            95:      supported).  This is the format used by the DBX debugger on IBM
        !            96:      RS/6000 systems.
        !            97: 
        !            98: `-gxcoff+'
        !            99:      Produce debugging information in XCOFF format (if that is
        !           100:      supported), using GNU extensions understood only by the GNU
        !           101:      debugger (GDB).  The use of these extensions is likely to make
        !           102:      other debuggers crash or refuse to read the program.
        !           103: 
        !           104: `-gdwarf'
        !           105:      Produce debugging information in DWARF format (if that is
        !           106:      supported).  This is the format used by SDB on most System V
        !           107:      Release 4 systems.
        !           108: 
        !           109: `-gdwarf+'
        !           110:      Produce debugging information in DWARF format (if that is
        !           111:      supported), using GNU extensions understood only by the GNU
        !           112:      debugger (GDB).  The use of these extensions is likely to make
        !           113:      other debuggers crash or refuse to read the program.
        !           114: 
        !           115: `-gLEVEL'
        !           116: `-ggdbLEVEL'
        !           117: `-gstabsLEVEL'
        !           118: `-gcoffLEVEL'
        !           119: `-gxcoffLEVEL'
        !           120: `-gdwarfLEVEL'
        !           121:      Request debugging information and also use LEVEL to specify how
        !           122:      much information.  The default level is 2.
        !           123: 
        !           124:      Level 1 produces minimal information, enough for making backtraces
        !           125:      in parts of the program that you don't plan to debug.  This
        !           126:      includes descriptions of functions and external variables, but no
        !           127:      information about local variables and no line numbers.
        !           128: 
        !           129:      Level 3 includes extra information, such as all the macro
        !           130:      definitions present in the program.  Some debuggers support macro
        !           131:      expansion when you use `-g3'.
        !           132: 
        !           133: `-p'
        !           134:      Generate extra code to write profile information suitable for the
        !           135:      analysis program `prof'.  You must use this option when compiling
        !           136:      the source files you want data about, and you must also use it when
        !           137:      linking.
        !           138: 
        !           139: `-pg'
        !           140:      Generate extra code to write profile information suitable for the
        !           141:      analysis program `gprof'.  You must use this option when compiling
        !           142:      the source files you want data about, and you must also use it when
        !           143:      linking.
        !           144: 
        !           145: `-a'
        !           146:      Generate extra code to write profile information for basic blocks,
        !           147:      which will record the number of times each basic block is
        !           148:      executed, the basic block start address, and the function name
        !           149:      containing the basic block.  If `-g' is used, the line number and
        !           150:      filename of the start of the basic block will also be recorded.
        !           151:      If not overridden by the machine description, the default action is
        !           152:      to append to the text file `bb.out'.
        !           153: 
        !           154:      This data could be analyzed by a program like `tcov'.  Note,
        !           155:      however, that the format of the data is not what `tcov' expects.
        !           156:      Eventually GNU `gprof' should be extended to process this data.
        !           157: 
        !           158: `-dLETTERS'
        !           159:      Says to make debugging dumps during compilation at times specified
        !           160:      by LETTERS.  This is used for debugging the compiler.  The file
        !           161:      names for most of the dumps are made by appending a word to the
        !           162:      source file name (e.g.  `foo.c.rtl' or `foo.c.jump').  Here are the
        !           163:      possible letters for use in LETTERS, and their meanings:
        !           164: 
        !           165:     `M'
        !           166:           Dump all macro definitions, at the end of preprocessing, and
        !           167:           write no output.
        !           168: 
        !           169:     `N'
        !           170:           Dump all macro names, at the end of preprocessing.
        !           171: 
        !           172:     `D'
        !           173:           Dump all macro definitions, at the end of preprocessing, in
        !           174:           addition to normal output.
        !           175: 
        !           176:     `y'
        !           177:           Dump debugging information during parsing, to standard error.
        !           178: 
        !           179:     `r'
        !           180:           Dump after RTL generation, to `FILE.rtl'.
        !           181: 
        !           182:     `x'
        !           183:           Just generate RTL for a function instead of compiling it.
        !           184:           Usually used with `r'.
        !           185: 
        !           186:     `j'
        !           187:           Dump after first jump optimization, to `FILE.jump'.
        !           188: 
        !           189:     `s'
        !           190:           Dump after CSE (including the jump optimization that sometimes
        !           191:           follows CSE), to `FILE.cse'.
        !           192: 
        !           193:     `L'
        !           194:           Dump after loop optimization, to `FILE.loop'.
        !           195: 
        !           196:     `t'
        !           197:           Dump after the second CSE pass (including the jump
        !           198:           optimization that sometimes follows CSE), to `FILE.cse2'.
        !           199: 
        !           200:     `f'
        !           201:           Dump after flow analysis, to `FILE.flow'.
        !           202: 
        !           203:     `c'
        !           204:           Dump after instruction combination, to the file
        !           205:           `FILE.combine'.
        !           206: 
        !           207:     `S'
        !           208:           Dump after the first instruction scheduling pass, to
        !           209:           `FILE.sched'.
        !           210: 
        !           211:     `l'
        !           212:           Dump after local register allocation, to `FILE.lreg'.
        !           213: 
        !           214:     `g'
        !           215:           Dump after global register allocation, to `FILE.greg'.
        !           216: 
        !           217:     `R'
        !           218:           Dump after the second instruction scheduling pass, to
        !           219:           `FILE.sched2'.
        !           220: 
        !           221:     `J'
        !           222:           Dump after last jump optimization, to `FILE.jump2'.
        !           223: 
        !           224:     `d'
        !           225:           Dump after delayed branch scheduling, to `FILE.dbr'.
        !           226: 
        !           227:     `k'
        !           228:           Dump after conversion from registers to stack, to
        !           229:           `FILE.stack'.
        !           230: 
        !           231:     `a'
        !           232:           Produce all the dumps listed above.
        !           233: 
        !           234:     `m'
        !           235:           Print statistics on memory usage, at the end of the run, to
        !           236:           standard error.
        !           237: 
        !           238:     `p'
        !           239:           Annotate the assembler output with a comment indicating which
        !           240:           pattern and alternative was used.
        !           241: 
        !           242: `-fpretend-float'
        !           243:      When running a cross-compiler, pretend that the target machine
        !           244:      uses the same floating point format as the host machine.  This
        !           245:      causes incorrect output of the actual floating constants, but the
        !           246:      actual instruction sequence will probably be the same as GNU CC
        !           247:      would make when running on the target machine.
        !           248: 
        !           249: `-save-temps'
        !           250:      Store the usual "temporary" intermediate files permanently; place
        !           251:      them in the current directory and name them based on the source
        !           252:      file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
        !           253:      files `foo.i' and `foo.s', as well as `foo.o'.
        !           254: 
        !           255: `-print-file-name=LIBRARY'
        !           256:      Print the full absolute name of the library file LIBRARY that
        !           257:      would be used when linking--and don't do anything else.  With this
        !           258:      option, GNU CC does not compile or link anything; it just prints
        !           259:      the file name.
        !           260: 
        !           261: `-print-prog-name=PROGRAM'
        !           262:      Like `-print-file-name', but searches for a program such as `cpp'.
        !           263: 
        !           264: `-print-libgcc-file-name'
        !           265:      Same as `-print-file-name=libgcc.a'.
        !           266: 
        !           267:      This is useful when you use `-nostdlib' but you do want to link
        !           268:      with `libgcc.a'.  You can do
        !           269: 
        !           270:           gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
1.1.1.4   root      271: 
                    272: 
1.1.1.6   root      273: File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
                    274: 
                    275: Options That Control Optimization
                    276: =================================
                    277: 
                    278:    These options control various sorts of optimizations:
                    279: 
                    280: `-O'
                    281: `-O1'
                    282:      Optimize.  Optimizing compilation takes somewhat more time, and a
                    283:      lot more memory for a large function.
                    284: 
                    285:      Without `-O', the compiler's goal is to reduce the cost of
                    286:      compilation and to make debugging produce the expected results.
                    287:      Statements are independent: if you stop the program with a
                    288:      breakpoint between statements, you can then assign a new value to
                    289:      any variable or change the program counter to any other statement
                    290:      in the function and get exactly the results you would expect from
                    291:      the source code.
                    292: 
1.1.1.7 ! root      293:      Without `-O', the compiler only allocates variables declared
        !           294:      `register' in registers.  The resulting compiled code is a little
        !           295:      worse than produced by PCC without `-O'.
1.1.1.6   root      296: 
                    297:      With `-O', the compiler tries to reduce code size and execution
                    298:      time.
                    299: 
1.1.1.7 ! root      300:      When you specify `-O', the compiler turns on `-fthread-jumps' and
        !           301:      `-fdefer-pop' on all machines.  The compiler turns on
        !           302:      `-fdelayed-branch' on machines that have delay slots, and
        !           303:      `-fomit-frame-pointer' on machines that can support debugging even
        !           304:      without a frame pointer.  On some machines the compiler also turns
        !           305:      on other flags.
1.1.1.6   root      306: 
                    307: `-O2'
1.1.1.7 ! root      308:      Optimize even more.  GNU CC performs nearly all supported
        !           309:      optimizations that do not involve a space-speed tradeoff.  The
        !           310:      compiler does not perform loop unrolling or function inlining when
        !           311:      you specify `-O2'.  As compared to `-O', this option increases
        !           312:      both compilation time and the performance of the generated code.
1.1.1.6   root      313: 
                    314:      `-O2' turns on all optional optimizations except for loop unrolling
1.1.1.7 ! root      315:      and function inlining.  It also turns on frame pointer elimination
        !           316:      on machines where doing so does not interfer with debugging.
        !           317: 
        !           318: `-O3'
        !           319:      Optimize yet more.  `-O3' turns on all optimizations specified by
        !           320:      `-O2' and also turns on the `inline-functions' option.
1.1.1.6   root      321: 
                    322: `-O0'
                    323:      Do not optimize.
                    324: 
                    325:      If you use multiple `-O' options, with or without level numbers,
                    326:      the last such option is the one that is effective.
                    327: 
                    328:    Options of the form `-fFLAG' specify machine-independent flags.
                    329: Most flags have both positive and negative forms; the negative form of
                    330: `-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
                    331: is listed--the one which is not the default.  You can figure out the
                    332: other form by either removing `no-' or adding it.
                    333: 
                    334: `-ffloat-store'
                    335:      Do not store floating point variables in registers, and inhibit
                    336:      other options that might change whether a floating point value is
                    337:      taken from a register or memory.
                    338: 
                    339:      This option prevents undesirable excess precision on machines such
                    340:      as the 68000 where the floating registers (of the 68881) keep more
                    341:      precision than a `double' is supposed to have.  For most programs,
                    342:      the excess precision does only good, but a few programs rely on the
                    343:      precise definition of IEEE floating point.  Use `-ffloat-store' for
                    344:      such programs.
                    345: 
                    346: `-fno-default-inline'
                    347:      Do not make member functions inline by default merely because they
                    348:      are defined inside the class scope (C++ only).  Otherwise, when
                    349:      you specify `-O', member functions defined inside class scope are
                    350:      compiled inline by default; i.e., you don't need to add `inline'
                    351:      in front of the member function name.
                    352: 
                    353: `-fno-defer-pop'
                    354:      Always pop the arguments to each function call as soon as that
                    355:      function returns.  For machines which must pop arguments after a
                    356:      function call, the compiler normally lets arguments accumulate on
                    357:      the stack for several function calls and pops them all at once.
                    358: 
                    359: `-fforce-mem'
                    360:      Force memory operands to be copied into registers before doing
                    361:      arithmetic on them.  This may produce better code by making all
                    362:      memory references potential common subexpressions.  When they are
                    363:      not common subexpressions, instruction combination should
                    364:      eliminate the separate register-load.  I am interested in hearing
                    365:      about the difference this makes.
                    366: 
                    367: `-fforce-addr'
                    368:      Force memory address constants to be copied into registers before
                    369:      doing arithmetic on them.  This may produce better code just as
                    370:      `-fforce-mem' may.  I am interested in hearing about the
                    371:      difference this makes.
                    372: 
                    373: `-fomit-frame-pointer'
                    374:      Don't keep the frame pointer in a register for functions that
                    375:      don't need one.  This avoids the instructions to save, set up and
                    376:      restore frame pointers; it also makes an extra register available
                    377:      in many functions.  *It also makes debugging impossible on some
                    378:      machines.*
                    379: 
                    380:      On some machines, such as the Vax, this flag has no effect, because
                    381:      the standard calling sequence automatically handles the frame
                    382:      pointer and nothing is saved by pretending it doesn't exist.  The
                    383:      machine-description macro `FRAME_POINTER_REQUIRED' controls
                    384:      whether a target machine supports this flag.  *Note Registers::.
                    385: 
                    386: `-fno-inline'
                    387:      Don't pay attention to the `inline' keyword.  Normally this option
                    388:      is used to keep the compiler from expanding any functions inline.
                    389:      Note that if you are not optimizing, no functions can be expanded
                    390:      inline.
                    391: 
                    392: `-finline-functions'
                    393:      Integrate all simple functions into their callers.  The compiler
                    394:      heuristically decides which functions are simple enough to be worth
                    395:      integrating in this way.
                    396: 
                    397:      If all calls to a given function are integrated, and the function
                    398:      is declared `static', then the function is normally not output as
                    399:      assembler code in its own right.
                    400: 
                    401: `-fkeep-inline-functions'
                    402:      Even if all calls to a given function are integrated, and the
                    403:      function is declared `static', nevertheless output a separate
                    404:      run-time callable version of the function.
                    405: 
                    406: `-fno-function-cse'
                    407:      Do not put function addresses in registers; make each instruction
                    408:      that calls a constant function contain the function's address
                    409:      explicitly.
                    410: 
                    411:      This option results in less efficient code, but some strange hacks
                    412:      that alter the assembler output may be confused by the
                    413:      optimizations performed when this option is not used.
                    414: 
                    415: `-ffast-math'
                    416:      This option allows GCC to violate some ANSI or IEEE rules and/or
                    417:      specifications in the interest of optimizing code for speed.  For
                    418:      example, it allows the compiler to assume arguments to the `sqrt'
1.1.1.7 ! root      419:      function are non-negative numbers and that no floating-point values
        !           420:      are NaNs.
1.1.1.6   root      421: 
                    422:      This option should never be turned on by any `-O' option since it
                    423:      can result in incorrect output for programs which depend on an
                    424:      exact implementation of IEEE or ANSI rules/specifications for math
                    425:      functions.
                    426: 
                    427:    The following options control specific optimizations.  The `-O2'
                    428: option turns on all of these optimizations except `-funroll-loops' and
                    429: `-funroll-all-loops'.  On most machines, the `-O' option turns on the
                    430: `-fthread-jumps' and `-fdelayed-branch' options, but specific machines
                    431: may handle it differently.
                    432: 
                    433:    You can use the following flags in the rare cases when "fine-tuning"
                    434: of optimizations to be performed is desired.
                    435: 
                    436: `-fstrength-reduce'
                    437:      Perform the optimizations of loop strength reduction and
                    438:      elimination of iteration variables.
                    439: 
                    440: `-fthread-jumps'
                    441:      Perform optimizations where we check to see if a jump branches to a
                    442:      location where another comparison subsumed by the first is found.
                    443:      If so, the first branch is redirected to either the destination of
                    444:      the second branch or a point immediately following it, depending
                    445:      on whether the condition is known to be true or false.
                    446: 
                    447: `-fcse-follow-jumps'
                    448:      In common subexpression elimination, scan through jump instructions
                    449:      when the target of the jump is not reached by any other path.  For
                    450:      example, when CSE encounters an `if' statement with an `else'
                    451:      clause, CSE will follow the jump when the condition tested is
                    452:      false.
                    453: 
                    454: `-fcse-skip-blocks'
                    455:      This is similar to `-fcse-follow-jumps', but causes CSE to follow
                    456:      jumps which conditionally skip over blocks.  When CSE encounters a
                    457:      simple `if' statement with no else clause, `-fcse-skip-blocks'
                    458:      causes CSE to follow the jump around the body of the `if'.
                    459: 
                    460: `-frerun-cse-after-loop'
                    461:      Re-run common subexpression elimination after loop optimizations
                    462:      has been performed.
                    463: 
                    464: `-fexpensive-optimizations'
                    465:      Perform a number of minor optimizations that are relatively
                    466:      expensive.
                    467: 
                    468: `-fdelayed-branch'
                    469:      If supported for the target machine, attempt to reorder
                    470:      instructions to exploit instruction slots available after delayed
                    471:      branch instructions.
                    472: 
                    473: `-fschedule-insns'
                    474:      If supported for the target machine, attempt to reorder
                    475:      instructions to eliminate execution stalls due to required data
                    476:      being unavailable.  This helps machines that have slow floating
                    477:      point or memory load instructions by allowing other instructions
                    478:      to be issued until the result of the load or floating point
                    479:      instruction is required.
                    480: 
                    481: `-fschedule-insns2'
                    482:      Similar to `-fschedule-insns', but requests an additional pass of
                    483:      instruction scheduling after register allocation has been done.
                    484:      This is especially useful on machines with a relatively small
                    485:      number of registers and where memory load instructions take more
                    486:      than one cycle.
                    487: 
                    488: `-fcaller-saves'
                    489:      Enable values to be allocated in registers that will be clobbered
                    490:      by function calls, by emitting extra instructions to save and
                    491:      restore the registers around such calls.  Such allocation is done
                    492:      only when it seems to result in better code than would otherwise
                    493:      be produced.
                    494: 
                    495:      This option is enabled by default on certain machines, usually
                    496:      those which have no call-preserved registers to use instead.
                    497: 
                    498: `-funroll-loops'
                    499:      Perform the optimization of loop unrolling.  This is only done for
                    500:      loops whose number of iterations can be determined at compile time
                    501:      or run time.  `-funroll-loop' implies both `-fstrength-reduce' and
                    502:      `-frerun-cse-after-loop'.
                    503: 
                    504: `-funroll-all-loops'
                    505:      Perform the optimization of loop unrolling.  This is done for all
                    506:      loops and usually makes programs run more slowly.
                    507:      `-funroll-all-loops' implies `-fstrength-reduce' as well as
                    508:      `-frerun-cse-after-loop'.
                    509: 
                    510: `-fno-peephole'
                    511:      Disable any machine-specific peephole optimizations.
                    512: 
                    513: 
1.1.1.5   root      514: File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
                    515: 
                    516: Options Controlling the Preprocessor
                    517: ====================================
                    518: 
                    519:    These options control the C preprocessor, which is run on each C
                    520: source file before actual compilation.
                    521: 
                    522:    If you use the `-E' option, nothing is done except preprocessing.
                    523: Some of these options make sense only together with `-E' because they
                    524: cause the preprocessor output to be unsuitable for actual compilation.
                    525: 
                    526: `-include FILE'
                    527:      Process FILE as input before processing the regular input file.
                    528:      In effect, the contents of FILE are compiled first.  Any `-D' and
                    529:      `-U' options on the command line are always processed before
                    530:      `-include FILE', regardless of the order in which they are
                    531:      written.  All the `-include' and `-imacros' options are processed
                    532:      in the order in which they are written.
                    533: 
                    534: `-imacros FILE'
                    535:      Process FILE as input, discarding the resulting output, before
                    536:      processing the regular input file.  Because the output generated
                    537:      from FILE is discarded, the only effect of `-imacros FILE' is to
                    538:      make the macros defined in FILE available for use in the main
                    539:      input.
                    540: 
                    541:      Any `-D' and `-U' options on the command line are always processed
                    542:      before `-imacros FILE', regardless of the order in which they are
                    543:      written.  All the `-include' and `-imacros' options are processed
                    544:      in the order in which they are written.
                    545: 
                    546: `-idirafter DIR'
                    547:      Add the directory DIR to the second include path.  The directories
                    548:      on the second include path are searched when a header file is not
                    549:      found in any of the directories in the main include path (the one
                    550:      that `-I' adds to).
                    551: 
                    552: `-iprefix PREFIX'
                    553:      Specify PREFIX as the prefix for subsequent `-iwithprefix' options.
                    554: 
                    555: `-iwithprefix DIR'
                    556:      Add a directory to the second include path.  The directory's name
                    557:      is made by concatenating PREFIX and DIR, where PREFIX was
1.1.1.6   root      558:      specified previously with `-iprefix'.  If you have not specified a
                    559:      prefix yet, the directory containing the installed passes of the
                    560:      compiler is used as the default.
                    561: 
                    562: `-iwithprefixbefore DIR'
                    563:      Add a directory to the main include path.  The directory's name is
                    564:      made by concatenating PREFIX and DIR, as in the case of
                    565:      `-iwithprefix'.
1.1.1.5   root      566: 
1.1.1.7 ! root      567: `-isystem DIR'
        !           568:      Add a directory to the beginning of the second include path,
        !           569:      marking it as a system directory, so that it gets the same special
        !           570:      treatment as is applied to the standard system directories.
        !           571: 
1.1.1.5   root      572: `-nostdinc'
                    573:      Do not search the standard system directories for header files.
                    574:      Only the directories you have specified with `-I' options (and the
                    575:      current directory, if appropriate) are searched.  *Note Directory
                    576:      Options::, for information on `-I'.
                    577: 
                    578:      By using both `-nostdinc' and `-I-', you can limit the include-file
                    579:      search path to only those directories you specify explicitly.
                    580: 
                    581: `-undef'
                    582:      Do not predefine any nonstandard macros.  (Including architecture
                    583:      flags).
                    584: 
                    585: `-E'
                    586:      Run only the C preprocessor.  Preprocess all the C source files
                    587:      specified and output the results to standard output or to the
                    588:      specified output file.
                    589: 
                    590: `-C'
                    591:      Tell the preprocessor not to discard comments.  Used with the `-E'
                    592:      option.
                    593: 
                    594: `-P'
                    595:      Tell the preprocessor not to generate `#line' commands.  Used with
                    596:      the `-E' option.
                    597: 
                    598: `-M'
                    599:      Tell the preprocessor to output a rule suitable for `make'
                    600:      describing the dependencies of each object file.  For each source
                    601:      file, the preprocessor outputs one `make'-rule whose target is the
                    602:      object file name for that source file and whose dependencies are
                    603:      all the `#include' header files it uses.  This rule may be a
                    604:      single line or may be continued with `\'-newline if it is long.
                    605:      The list of rules is printed on standard output instead of the
                    606:      preprocessed C program.
                    607: 
                    608:      `-M' implies `-E'.
                    609: 
                    610:      Another way to specify output of a `make' rule is by setting the
                    611:      environment variable `DEPENDENCIES_OUTPUT' (*note Environment
                    612:      Variables::.).
                    613: 
                    614: `-MM'
                    615:      Like `-M' but the output mentions only the user header files
                    616:      included with `#include "FILE"'.  System header files included
                    617:      with `#include <FILE>' are omitted.
                    618: 
                    619: `-MD'
1.1.1.7 ! root      620:      Like `-M' but the dependency information is written to a file made
        !           621:      by replacing ".c" with ".d" at the end of the input file names.
        !           622:      This is in addition to compiling the file as specified--`-MD' does
        !           623:      not inhibit ordinary compilation the way `-M' does.
        !           624: 
        !           625:      In Mach, you can use the utility `md' to merge multiple dependency
        !           626:      files into a single dependency file suitable for using with the
        !           627:      `make' command.
1.1.1.5   root      628: 
                    629: `-MMD'
                    630:      Like `-MD' except mention only user header files, not system
                    631:      header files.
                    632: 
1.1.1.7 ! root      633: `-MG'
        !           634:      Treat missing header files as generated files and assume they live
        !           635:      in the same directory as the source file.  If you specify `-MG',
        !           636:      you must also specify either `-M' or `-MM'.  `-MG' is not
        !           637:      supported with `-MD' or `-MMD'.
        !           638: 
1.1.1.5   root      639: `-H'
                    640:      Print the name of each header file used, in addition to other
                    641:      normal activities.
                    642: 
                    643: `-AQUESTION(ANSWER)'
                    644:      Assert the answer ANSWER for QUESTION, in case it is tested with a
                    645:      preprocessor conditional such as `#if #QUESTION(ANSWER)'.  `-A-'
                    646:      disables the standard assertions that normally describe the target
                    647:      machine.
                    648: 
                    649: `-DMACRO'
                    650:      Define macro MACRO with the string `1' as its definition.
                    651: 
                    652: `-DMACRO=DEFN'
                    653:      Define macro MACRO as DEFN.  All instances of `-D' on the command
                    654:      line are processed before any `-U' options.
                    655: 
                    656: `-UMACRO'
                    657:      Undefine macro MACRO.  `-U' options are evaluated after all `-D'
                    658:      options, but before any `-include' and `-imacros' options.
                    659: 
                    660: `-dM'
                    661:      Tell the preprocessor to output only a list of the macro
                    662:      definitions that are in effect at the end of preprocessing.  Used
                    663:      with the `-E' option.
                    664: 
                    665: `-dD'
                    666:      Tell the preprocessing to pass all macro definitions into the
                    667:      output, in their proper sequence in the rest of the output.
                    668: 
                    669: `-dN'
                    670:      Like `-dD' except that the macro arguments and contents are
                    671:      omitted.  Only `#define NAME' is included in the output.
                    672: 
                    673: `-trigraphs'
1.1.1.7 ! root      674:      Support ANSI C trigraphs.  The `-ansi' option also has this effect.
        !           675: 
        !           676: `-Wp,OPTION'
        !           677:      Pass OPTION as an option to the preprocessor.  If OPTION contains
        !           678:      commas, it is split into multiple options at the commas.
1.1.1.5   root      679: 
                    680: 
                    681: File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
                    682: 
                    683: Passing Options to the Assembler
                    684: ================================
                    685: 
1.1.1.7 ! root      686:    You can pass options to the assembler.
        !           687: 
1.1.1.5   root      688: `-Wa,OPTION'
                    689:      Pass OPTION as an option to the assembler.  If OPTION contains
                    690:      commas, it is split into multiple options at the commas.
                    691: 
                    692: 
1.1.1.4   root      693: File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
                    694: 
                    695: Options for Linking
                    696: ===================
                    697: 
                    698:    These options come into play when the compiler links object files
                    699: into an executable output file.  They are meaningless if the compiler is
                    700: not doing a link step.
                    701: 
                    702: `OBJECT-FILE-NAME'
                    703:      A file name that does not end in a special recognized suffix is
                    704:      considered to name an object file or library.  (Object files are
                    705:      distinguished from libraries by the linker according to the file
                    706:      contents.)  If linking is done, these object files are used as
                    707:      input to the linker.
                    708: 
                    709: `-c'
                    710: `-S'
                    711: `-E'
                    712:      If any of these options is used, then the linker is not run, and
                    713:      object file names should not be used as arguments.  *Note Overall
                    714:      Options::.
                    715: 
                    716: `-lLIBRARY'
                    717:      Search the library named LIBRARY when linking.
                    718: 
                    719:      It makes a difference where in the command you write this option;
                    720:      the linker searches processes libraries and object files in the
                    721:      order they are specified.  Thus, `foo.o -lz bar.o' searches
                    722:      library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
                    723:      refers to functions in `z', those functions may not be loaded.
                    724: 
                    725:      The linker searches a standard list of directories for the library,
                    726:      which is actually a file named `libLIBRARY.a'.  The linker then
                    727:      uses this file as if it had been specified precisely by name.
                    728: 
                    729:      The directories searched include several standard system
                    730:      directories plus any that you specify with `-L'.
                    731: 
                    732:      Normally the files found this way are library files--archive files
                    733:      whose members are object files.  The linker handles an archive
                    734:      file by scanning through it for members which define symbols that
                    735:      have so far been referenced but not defined.  But if the file that
                    736:      is found is an ordinary object file, it is linked in the usual
                    737:      fashion.  The only difference between using an `-l' option and
                    738:      specifying a file name is that `-l' surrounds LIBRARY with `lib'
                    739:      and `.a' and searches several directories.
                    740: 
                    741: `-lobjc'
1.1.1.5   root      742:      You need this special case of the `-l' option in order to link an
                    743:      Objective C program.
                    744: 
                    745: `-nostartfiles'
                    746:      Do not use the standard system startup files when linking.  The
                    747:      standard libraries are used normally.
1.1.1.4   root      748: 
                    749: `-nostdlib'
1.1.1.7 ! root      750:      Do not use the standard system libraries and startup files when
1.1.1.5   root      751:      linking.  Only the files you specify will be passed to the linker.
1.1.1.4   root      752: 
1.1.1.7 ! root      753:      One of the standard libraries bypassed by `-nostdlib' is
        !           754:      `libgcc.a', a library of internal subroutines that GNU CC uses to
        !           755:      overcome shortcomings of particular machines, or special needs for
        !           756:      some languages.  (*Note Interfacing to GNU CC Output: Interface,
        !           757:      for more discussion of `libgcc.a'.) In most cases, you need
        !           758:      `libgcc.a' even when you want to avoid other standard libraries.
        !           759:      In other words, when you specify `-nostdlib' you should usually
        !           760:      specify `-lgcc' as well.  This ensures that you have no unresolved
        !           761:      references to internal GNU CC library subroutines.  (For example,
        !           762:      `__main', used to ensure C++ constructors will be called; *note
        !           763:      `collect2': Collect2..)
        !           764: 
        !           765: `-s'
        !           766:      Remove all symbol table and relocation information from the
        !           767:      executable.
        !           768: 
1.1.1.4   root      769: `-static'
                    770:      On systems that support dynamic linking, this prevents linking
                    771:      with the shared libraries.  On other systems, this option has no
                    772:      effect.
                    773: 
                    774: `-shared'
                    775:      Produce a shared object which can then be linked with other
                    776:      objects to form an executable.  Only a few systems support this
                    777:      option.
                    778: 
                    779: `-symbolic'
1.1.1.5   root      780:      Bind references to global symbols when building a shared object.
1.1.1.4   root      781:      Warn about any unresolved references (unless overridden by the
                    782:      link editor option `-Xlinker -z -Xlinker defs').  Only a few
                    783:      systems support this option.
                    784: 
                    785: `-Xlinker OPTION'
                    786:      Pass OPTION as an option to the linker.  You can use this to
                    787:      supply system-specific linker options which GNU CC does not know
                    788:      how to recognize.
                    789: 
                    790:      If you want to pass an option that takes an argument, you must use
                    791:      `-Xlinker' twice, once for the option and once for the argument.
                    792:      For example, to pass `-assert definitions', you must write
                    793:      `-Xlinker -assert -Xlinker definitions'.  It does not work to write
                    794:      `-Xlinker "-assert definitions"', because this passes the entire
                    795:      string as a single argument, which is not what the linker expects.
                    796: 
                    797: `-Wl,OPTION'
                    798:      Pass OPTION as an option to the linker.  If OPTION contains
                    799:      commas, it is split into multiple options at the commas.
                    800: 
                    801: `-u SYMBOL'
                    802:      Pretend the symbol SYMBOL is undefined, to force linking of
                    803:      library modules to define it.  You can use `-u' multiple times with
                    804:      different symbols to force loading of additional library modules.
                    805: 
                    806: 
                    807: File: gcc.info,  Node: Directory Options,  Next: Target Options,  Prev: Link Options,  Up: Invoking GCC
                    808: 
                    809: Options for Directory Search
                    810: ============================
                    811: 
                    812:    These options specify directories to search for header files, for
                    813: libraries and for parts of the compiler:
                    814: 
                    815: `-IDIR'
                    816:      Append directory DIR to the list of directories searched for
                    817:      include files.
                    818: 
                    819: `-I-'
                    820:      Any directories you specify with `-I' options before the `-I-'
                    821:      option are searched only for the case of `#include "FILE"'; they
                    822:      are not searched for `#include <FILE>'.
                    823: 
                    824:      If additional directories are specified with `-I' options after
                    825:      the `-I-', these directories are searched for all `#include'
                    826:      directives.  (Ordinarily *all* `-I' directories are used this way.)
                    827: 
                    828:      In addition, the `-I-' option inhibits the use of the current
                    829:      directory (where the current input file came from) as the first
                    830:      search directory for `#include "FILE"'.  There is no way to
                    831:      override this effect of `-I-'.  With `-I.' you can specify
                    832:      searching the directory which was current when the compiler was
                    833:      invoked.  That is not exactly the same as what the preprocessor
                    834:      does by default, but it is often satisfactory.
                    835: 
                    836:      `-I-' does not inhibit the use of the standard system directories
                    837:      for header files.  Thus, `-I-' and `-nostdinc' are independent.
                    838: 
                    839: `-LDIR'
                    840:      Add directory DIR to the list of directories to be searched for
                    841:      `-l'.
                    842: 
                    843: `-BPREFIX'
1.1.1.7 ! root      844:      This option specifies where to find the executables, libraries,
        !           845:      include files, and data files of the compiler itself.
1.1.1.4   root      846: 
                    847:      The compiler driver program runs one or more of the subprograms
                    848:      `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
                    849:      program it tries to run, both with and without `MACHINE/VERSION/'
                    850:      (*note Target Options::.).
                    851: 
                    852:      For each subprogram to be run, the compiler driver first tries the
                    853:      `-B' prefix, if any.  If that name is not found, or if `-B' was
                    854:      not specified, the driver tries two standard prefixes, which are
                    855:      `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'.  If neither of
                    856:      those results in a file name that is found, the unmodified program
                    857:      name is searched for using the directories specified in your
                    858:      `PATH' environment variable.
                    859: 
                    860:      `-B' prefixes that effectively specify directory names also apply
                    861:      to libraries in the linker, because the compiler translates these
1.1.1.7 ! root      862:      options into `-L' options for the linker.  They also apply to
        !           863:      includes files in the preprocessor, because the compiler
        !           864:      translates these options into `-isystem' options for the
        !           865:      preprocessor.  In this case, the compiler appends `include' to the
        !           866:      prefix.
1.1.1.4   root      867: 
                    868:      The run-time support file `libgcc.a' can also be searched for using
                    869:      the `-B' prefix, if needed.  If it is not found there, the two
                    870:      standard prefixes above are tried, and that is all.  The file is
                    871:      left out of the link if it is not found by those means.
                    872: 
                    873:      Another way to specify a prefix much like the `-B' prefix is to use
                    874:      the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
                    875:      Variables::.
                    876: 
                    877: 
                    878: File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Directory Options,  Up: Invoking GCC
                    879: 
                    880: Specifying Target Machine and Compiler Version
                    881: ==============================================
                    882: 
                    883:    By default, GNU CC compiles code for the same type of machine that
                    884: you are using.  However, it can also be installed as a cross-compiler,
                    885: to compile for some other type of machine.  In fact, several different
                    886: configurations of GNU CC, for different target machines, can be
                    887: installed side by side.  Then you specify which one to use with the
                    888: `-b' option.
                    889: 
                    890:    In addition, older and newer versions of GNU CC can be installed side
                    891: by side.  One of them (probably the newest) will be the default, but
                    892: you may sometimes wish to use another.
                    893: 
                    894: `-b MACHINE'
                    895:      The argument MACHINE specifies the target machine for compilation.
                    896:      This is useful when you have installed GNU CC as a cross-compiler.
                    897: 
                    898:      The value to use for MACHINE is the same as was specified as the
                    899:      machine type when configuring GNU CC as a cross-compiler.  For
                    900:      example, if a cross-compiler was configured with `configure
                    901:      i386v', meaning to compile for an 80386 running System V, then you
                    902:      would specify `-b i386v' to run that cross compiler.
                    903: 
                    904:      When you do not specify `-b', it normally means to compile for the
                    905:      same type of machine that you are using.
                    906: 
                    907: `-V VERSION'
                    908:      The argument VERSION specifies which version of GNU CC to run.
                    909:      This is useful when multiple versions are installed.  For example,
                    910:      VERSION might be `2.0', meaning to run GNU CC version 2.0.
                    911: 
                    912:      The default version, when you do not specify `-V', is controlled
                    913:      by the way GNU CC is installed.  Normally, it will be a version
                    914:      that is recommended for general use.
                    915: 
                    916:    The `-b' and `-V' options actually work by controlling part of the
                    917: file name used for the executable files and libraries used for
                    918: compilation.  A given version of GNU CC, for a given target machine, is
                    919: normally kept in the directory `/usr/local/lib/gcc-lib/MACHINE/VERSION'.
                    920: 
1.1.1.5   root      921:    Thus, sites can customize the effect of `-b' or `-V' either by
                    922: changing the names of these directories or adding alternate names (or
                    923: symbolic links).  If in directory `/usr/local/lib/gcc-lib/' the file
                    924: `80386' is a link to the file `i386v', then `-b 80386' becomes an alias
                    925: for `-b i386v'.
1.1.1.4   root      926: 
                    927:    In one respect, the `-b' or `-V' do not completely change to a
                    928: different compiler: the top-level driver program `gcc' that you
                    929: originally invoked continues to run and invoke the other executables
                    930: (preprocessor, compiler per se, assembler and linker) that do the real
                    931: work.  However, since no real work is done in the driver program, it
                    932: usually does not matter that the driver program in use is not the one
                    933: for the specified target and version.
                    934: 
                    935:    The only way that the driver program depends on the target machine is
                    936: in the parsing and handling of special machine-specific options.
                    937: However, this is controlled by a file which is found, along with the
                    938: other executables, in the directory for the specified version and
                    939: target machine.  As a result, a single installed driver program adapts
                    940: to any specified target machine and compiler version.
                    941: 
                    942:    The driver program executable does control one significant thing,
                    943: however: the default version and target machine.  Therefore, you can
                    944: install different instances of the driver program, compiled for
                    945: different targets or versions, under different names.
                    946: 
                    947:    For example, if the driver for version 2.0 is installed as `ogcc'
                    948: and that for version 2.1 is installed as `gcc', then the command `gcc'
1.1.1.5   root      949: will use version 2.1 by default, while `ogcc' will use 2.0 by default.
1.1.1.4   root      950: However, you can choose either version with either command with the
                    951: `-V' option.
                    952: 
                    953: 
                    954: File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
                    955: 
1.1.1.5   root      956: Hardware Models and Configurations
                    957: ==================================
1.1.1.4   root      958: 
                    959:    Earlier we discussed the standard option `-b' which chooses among
                    960: different installed compilers for completely different target machines,
                    961: such as Vax vs. 68000 vs. 80386.
                    962: 
                    963:    In addition, each of these target machine types can have its own
                    964: special options, starting with `-m', to choose among various hardware
                    965: models or configurations--for example, 68010 vs 68020, floating
                    966: coprocessor or none.  A single installed version of the compiler can
                    967: compile for any model or configuration, according to the options
                    968: specified.
                    969: 
                    970:    Some configurations of the compiler also support additional special
                    971: options, usually for compatibility with other compilers on the same
                    972: platform.
                    973: 
                    974:    These options are defined by the macro `TARGET_SWITCHES' in the
                    975: machine description.  The default for the options is also defined by
                    976: that macro, which enables you to change the defaults.
                    977: 
                    978: * Menu:
                    979: 
                    980: * M680x0 Options::
                    981: * VAX Options::
                    982: * SPARC Options::
                    983: * Convex Options::
                    984: * AMD29K Options::
1.1.1.7 ! root      985: * ARM Options::
1.1.1.4   root      986: * M88K Options::
1.1.1.6   root      987: * RS/6000 and PowerPC Options::
1.1.1.4   root      988: * RT Options::
                    989: * MIPS Options::
                    990: * i386 Options::
                    991: * HPPA Options::
                    992: * Intel 960 Options::
                    993: * DEC Alpha Options::
1.1.1.6   root      994: * Clipper Options::
1.1.1.7 ! root      995: * H8/300 Options::
1.1.1.4   root      996: * System V Options::
                    997: 
                    998: 
                    999: File: gcc.info,  Node: M680x0 Options,  Next: VAX Options,  Up: Submodel Options
                   1000: 
                   1001: M680x0 Options
                   1002: --------------
                   1003: 
                   1004:    These are the `-m' options defined for the 68000 series.  The default
                   1005: values for these options depends on which style of 68000 was selected
                   1006: when the compiler was configured; the defaults for the most common
                   1007: choices are given below.
                   1008: 
                   1009: `-m68000'
                   1010: `-mc68000'
                   1011:      Generate output for a 68000.  This is the default when the
                   1012:      compiler is configured for 68000-based systems.
                   1013: 
                   1014: `-m68020'
                   1015: `-mc68020'
                   1016:      Generate output for a 68020.  This is the default when the
                   1017:      compiler is configured for 68020-based systems.
                   1018: 
                   1019: `-m68881'
                   1020:      Generate output containing 68881 instructions for floating point.
                   1021:      This is the default for most 68020 systems unless `-nfp' was
                   1022:      specified when the compiler was configured.
                   1023: 
                   1024: `-m68030'
                   1025:      Generate output for a 68030.  This is the default when the
                   1026:      compiler is configured for 68030-based systems.
                   1027: 
                   1028: `-m68040'
                   1029:      Generate output for a 68040.  This is the default when the
                   1030:      compiler is configured for 68040-based systems.
                   1031: 
1.1.1.6   root     1032:      This option inhibits the use of 68881/68882 instructions that have
                   1033:      to be emulated by software on the 68040.  If your 68040 does not
                   1034:      have code to emulate those instructions, use `-m68040'.
                   1035: 
1.1.1.4   root     1036: `-m68020-40'
                   1037:      Generate output for a 68040, without using any of the new
1.1.1.5   root     1038:      instructions.  This results in code which can run relatively
1.1.1.6   root     1039:      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
                   1040:      generated code does use the 68881 instructions that are emulated
                   1041:      on the 68040.
1.1.1.4   root     1042: 
                   1043: `-mfpa'
                   1044:      Generate output containing Sun FPA instructions for floating point.
                   1045: 
                   1046: `-msoft-float'
                   1047:      Generate output containing library calls for floating point.
                   1048:      *Warning:* the requisite libraries are not part of GNU CC.
                   1049:      Normally the facilities of the machine's usual C compiler are
                   1050:      used, but this can't be done directly in cross-compilation.  You
                   1051:      must make your own arrangements to provide suitable library
                   1052:      functions for cross-compilation.
                   1053: 
                   1054: `-mshort'
                   1055:      Consider type `int' to be 16 bits wide, like `short int'.
                   1056: 
                   1057: `-mnobitfield'
1.1.1.5   root     1058:      Do not use the bit-field instructions.  The `-m68000' option
                   1059:      implies `-mnobitfield'.
1.1.1.4   root     1060: 
                   1061: `-mbitfield'
1.1.1.5   root     1062:      Do use the bit-field instructions.  The `-m68020' option implies
                   1063:      `-mbitfield'.  This is the default if you use a configuration
                   1064:      designed for a 68020.
1.1.1.4   root     1065: 
                   1066: `-mrtd'
                   1067:      Use a different function-calling convention, in which functions
                   1068:      that take a fixed number of arguments return with the `rtd'
                   1069:      instruction, which pops their arguments while returning.  This
                   1070:      saves one instruction in the caller since there is no need to pop
                   1071:      the arguments there.
                   1072: 
                   1073:      This calling convention is incompatible with the one normally used
                   1074:      on Unix, so you cannot use it if you need to call libraries
                   1075:      compiled with the Unix compiler.
                   1076: 
                   1077:      Also, you must provide function prototypes for all functions that
                   1078:      take variable numbers of arguments (including `printf'); otherwise
                   1079:      incorrect code will be generated for calls to those functions.
                   1080: 
                   1081:      In addition, seriously incorrect code will result if you call a
                   1082:      function with too many arguments.  (Normally, extra arguments are
                   1083:      harmlessly ignored.)
                   1084: 
                   1085:      The `rtd' instruction is supported by the 68010 and 68020
                   1086:      processors, but not by the 68000.
                   1087: 
                   1088: 
                   1089: File: gcc.info,  Node: VAX Options,  Next: SPARC Options,  Prev: M680x0 Options,  Up: Submodel Options
                   1090: 
                   1091: VAX Options
                   1092: -----------
                   1093: 
                   1094:    These `-m' options are defined for the Vax:
                   1095: 
                   1096: `-munix'
                   1097:      Do not output certain jump instructions (`aobleq' and so on) that
                   1098:      the Unix assembler for the Vax cannot handle across long ranges.
                   1099: 
                   1100: `-mgnu'
                   1101:      Do output those jump instructions, on the assumption that you will
                   1102:      assemble with the GNU assembler.
                   1103: 
                   1104: `-mg'
                   1105:      Output code for g-format floating point numbers instead of
                   1106:      d-format.
                   1107: 
                   1108: 
1.1.1.5   root     1109: File: gcc.info,  Node: SPARC Options,  Next: Convex Options,  Prev: VAX Options,  Up: Submodel Options
1.1.1.4   root     1110: 
                   1111: SPARC Options
                   1112: -------------
                   1113: 
1.1.1.5   root     1114:    These `-m' switches are supported on the SPARC:
1.1.1.4   root     1115: 
1.1.1.7 ! root     1116: `-mno-app-regs'
        !          1117: `-mapp-regs'
        !          1118:      Specify `-mapp-regs' to generate output using the global registers
        !          1119:      2 through 4, which the SPARC SVR4 ABI reserves for applications.
        !          1120:      This is the default.
        !          1121: 
        !          1122:      To be fully SVR4 ABI compliant at the cost of some performance
        !          1123:      loss, specify `-mno-app-regs'.  You should compile libraries and
        !          1124:      system software with this option.
        !          1125: 
1.1.1.5   root     1126: `-mfpu'
                   1127: `-mhard-float'
                   1128:      Generate output containing floating point instructions.  This is
                   1129:      the default.
                   1130: 
                   1131: `-mno-fpu'
                   1132: `-msoft-float'
                   1133:      Generate output containing library calls for floating point.
                   1134:      *Warning:* there is no GNU floating-point library for SPARC.
                   1135:      Normally the facilities of the machine's usual C compiler are
                   1136:      used, but this cannot be done directly in cross-compilation.  You
                   1137:      must make your own arrangements to provide suitable library
                   1138:      functions for cross-compilation.
                   1139: 
                   1140:      `-msoft-float' changes the calling convention in the output file;
                   1141:      therefore, it is only useful if you compile *all* of a program with
                   1142:      this option.  In particular, you need to compile `libgcc.a', the
                   1143:      library that comes with GNU CC, with `-msoft-float' in order for
                   1144:      this to work.
1.1.1.4   root     1145: 
1.1.1.7 ! root     1146: `-mhard-quad-float'
        !          1147:      Generate output containing quad-word (long double) floating point
        !          1148:      instructions.
        !          1149: 
        !          1150: `-msoft-quad-float'
        !          1151:      Generate output containing library calls for quad-word (long
        !          1152:      double) floating point instructions.  The functions called are
        !          1153:      those specified in the SPARC ABI.  This is the default.
        !          1154: 
        !          1155:      As of this writing, there are no sparc implementations that have
        !          1156:      hardware support for the quad-word floating point instructions.
        !          1157:      They all invoke a trap handler for one of these instructions, and
        !          1158:      then the trap handler emulates the effect of the instruction.
        !          1159:      Because of the trap handler overhead, this is much slower than
        !          1160:      calling the ABI library routines.  Thus the `-msoft-quad-float'
        !          1161:      option is the default.
        !          1162: 
1.1.1.4   root     1163: `-mno-epilogue'
1.1.1.5   root     1164: `-mepilogue'
                   1165:      With `-mepilogue' (the default), the compiler always emits code for
                   1166:      function exit at the end of each function.  Any function exit in
                   1167:      the middle of the function (such as a return statement in C) will
                   1168:      generate a jump to the exit code at the end of the function.
                   1169: 
                   1170:      With `-mno-epilogue', the compiler tries to emit exit code inline
                   1171:      at every function exit.
                   1172: 
1.1.1.7 ! root     1173: `-mno-flat'
        !          1174: `-mflat'
        !          1175:      With `-mflat', the compiler does not generate save/restore
        !          1176:      instructions and will use a "flat" or single register window
        !          1177:      calling convention.  This model uses %i7 as the frame pointer and
        !          1178:      is compatible with the normal register window model.  Code from
        !          1179:      either may be intermixed although debugger support is still
        !          1180:      incomplete.  The local registers and the input registers (0-5) are
        !          1181:      still treated as "call saved" registers and will be saved on the
        !          1182:      stack as necessary.
        !          1183: 
        !          1184:      With `-mno-flat' (the default), the compiler emits save/restore
        !          1185:      instructions (except for leaf functions) and is the normal mode of
        !          1186:      operation.
        !          1187: 
        !          1188: `-mno-unaligned-doubles'
        !          1189: `-munaligned-doubles'
        !          1190:      Assume that doubles have 8 byte alignment.  This is the default.
        !          1191: 
        !          1192:      With `-munaligned-doubles', GNU CC assumes that doubles have 8 byte
        !          1193:      alignment only if they are contained in another type, or if they
        !          1194:      have an absolute address.  Otherwise, it assumes they have 4 byte
        !          1195:      alignment.  Specifying this option avoids some rare compatibility
        !          1196:      problems with code generated by other compilers.  It is not the
        !          1197:      default because it results in a performance loss, especially for
        !          1198:      floating point code.
        !          1199: 
1.1.1.5   root     1200: `-mv8'
                   1201: `-msparclite'
                   1202:      These two options select variations on the SPARC architecture.
                   1203: 
                   1204:      By default (unless specifically configured for the Fujitsu
                   1205:      SPARClite), GCC generates code for the v7 variant of the SPARC
                   1206:      architecture.
                   1207: 
                   1208:      `-mv8' will give you SPARC v8 code.  The only difference from v7
                   1209:      code is that the compiler emits the integer multiply and integer
                   1210:      divide instructions which exist in SPARC v8 but not in SPARC v7.
                   1211: 
                   1212:      `-msparclite' will give you SPARClite code.  This adds the integer
                   1213:      multiply, integer divide step and scan (`ffs') instructions which
                   1214:      exist in SPARClite but not in SPARC v7.
1.1.1.4   root     1215: 
1.1.1.7 ! root     1216: `-mcypress'
        !          1217: `-msupersparc'
        !          1218:      These two options select the processor for which the code is
        !          1219:      optimised.
        !          1220: 
        !          1221:      With `-mcypress' (the default), the compiler optimizes code for the
        !          1222:      Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx
        !          1223:      series.  This is also apropriate for the older SparcStation 1, 2,
        !          1224:      IPX etc.
        !          1225: 
        !          1226:      With `-msupersparc' the compiler optimizes code for the SuperSparc
        !          1227:      cpu, as used in the SparcStation 10, 1000 and 2000 series. This
        !          1228:      flag also enables use of the full SPARC v8 instruction set.
        !          1229: 
        !          1230:    In a future version of GCC, these options will very likely be
        !          1231: renamed to `-mcpu=cypress' and `-mcpu=supersparc'.
        !          1232: 
        !          1233:    These `-m' switches are supported in addition to the above on SPARC
        !          1234: V9 processors:
        !          1235: 
        !          1236: `-mmedlow'
        !          1237:      Generate code for the Medium/Low code model: assume a 32 bit
        !          1238:      address space.  Programs are statically linked, PIC is not
        !          1239:      supported.  Pointers are still 64 bits.
1.1.1.4   root     1240: 
1.1.1.7 ! root     1241:      It is very likely that a future version of GCC will rename this
        !          1242:      option.
1.1.1.4   root     1243: 
1.1.1.7 ! root     1244: `-mmedany'
        !          1245:      Generate code for the Medium/Anywhere code model: assume a 32 bit
        !          1246:      text segment starting at offset 0, and a 32 bit data segment
        !          1247:      starting anywhere (determined at link time).  Programs are
        !          1248:      statically linked, PIC is not supported.  Pointers are still 64
        !          1249:      bits.
        !          1250: 
        !          1251:      It is very likely that a future version of GCC will rename this
        !          1252:      option.
1.1.1.4   root     1253: 
1.1.1.7 ! root     1254: `-mint64'
        !          1255:      Types long and int are 64 bits.
1.1.1.5   root     1256: 
                   1257: `-mlong32'
1.1.1.7 ! root     1258:      Types long and int are 32 bits.
1.1.1.5   root     1259: 
                   1260: `-mlong64'
1.1.1.7 ! root     1261: `-mint32'
        !          1262:      Type long is 64 bits, and type int is 32 bits.
1.1       root     1263: 
1.1.1.7 ! root     1264: `-mstack-bias'
        !          1265: `-mno-stack-bias'
        !          1266:      With `-mstack-bias', GNU CC assumes that the stack pointer, and
        !          1267:      frame pointer if present, are offset by -2047 which must be added
        !          1268:      back when making stack frame references.  Otherwise, assume no
        !          1269:      such offset is present.
1.1       root     1270: 

unix.superglobalmegacorp.com

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