Annotation of gcc/gcc.info-5, revision 1.1.1.9

1.1.1.9 ! root        1: This is Info file gcc.info, produced by Makeinfo version 1.67 from the
        !             2: input file gcc.texi.
1.1       root        3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
1.1.1.8   root        6:    Published by the Free Software Foundation 59 Temple Place - Suite 330
                      7: Boston, MA 02111-1307 USA
1.1.1.5   root        8: 
1.1.1.8   root        9:    Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software
                     10: Foundation, 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: 
1.1.1.8   root       33: File: gcc.info,  Node: MIPS Options,  Next: i386 Options,  Prev: RT Options,  Up: Submodel Options
                     34: 
                     35: MIPS Options
                     36: ------------
                     37: 
                     38:    These `-m' options are defined for the MIPS family of computers:
                     39: 
                     40: `-mcpu=CPU TYPE'
                     41:      Assume the defaults for the machine type CPU TYPE when scheduling
                     42:      instructions.  The choices for CPU TYPE are `r2000', `r3000',
                     43:      `r4000', `r4400', `r4600', and `r6000'.  While picking a specific
                     44:      CPU TYPE will schedule things appropriately for that particular
                     45:      chip, the compiler will not generate any code that does not meet
                     46:      level 1 of the MIPS ISA (instruction set architecture) without the
                     47:      `-mips2' or `-mips3' switches being used.
                     48: 
                     49: `-mips1'
                     50:      Issue instructions from level 1 of the MIPS ISA.  This is the
                     51:      default.  `r3000' is the default CPU TYPE at this ISA level.
                     52: 
                     53: `-mips2'
                     54:      Issue instructions from level 2 of the MIPS ISA (branch likely,
                     55:      square root instructions).  `r6000' is the default CPU TYPE at this
                     56:      ISA level.
                     57: 
                     58: `-mips3'
                     59:      Issue instructions from level 3 of the MIPS ISA (64 bit
                     60:      instructions).  `r4000' is the default CPU TYPE at this ISA level.
                     61:      This option does not change the sizes of any of the C data types.
                     62: 
                     63: `-mfp32'
                     64:      Assume that 32 32-bit floating point registers are available.
                     65:      This is the default.
                     66: 
                     67: `-mfp64'
                     68:      Assume that 32 64-bit floating point registers are available.
                     69:      This is the default when the `-mips3' option is used.
                     70: 
                     71: `-mgp32'
                     72:      Assume that 32 32-bit general purpose registers are available.
                     73:      This is the default.
                     74: 
                     75: `-mgp64'
                     76:      Assume that 32 64-bit general purpose registers are available.
                     77:      This is the default when the `-mips3' option is used.
                     78: 
                     79: `-mint64'
                     80:      Types long, int, and pointer are 64 bits.  This works only if
                     81:      `-mips3' is also specified.
                     82: 
                     83: `-mlong64'
                     84:      Types long and pointer are 64 bits, and type int is 32 bits.  This
                     85:      works only if `-mips3' is also specified.
                     86: 
                     87: `-mmips-as'
                     88:      Generate code for the MIPS assembler, and invoke `mips-tfile' to
                     89:      add normal debug information.  This is the default for all
                     90:      platforms except for the OSF/1 reference platform, using the
                     91:      OSF/rose object format.  If the either of the `-gstabs' or
                     92:      `-gstabs+' switches are used, the `mips-tfile' program will
                     93:      encapsulate the stabs within MIPS ECOFF.
                     94: 
                     95: `-mgas'
                     96:      Generate code for the GNU assembler.  This is the default on the
                     97:      OSF/1 reference platform, using the OSF/rose object format.
                     98: 
                     99: `-mrnames'
                    100: `-mno-rnames'
                    101:      The `-mrnames' switch says to output code using the MIPS software
                    102:      names for the registers, instead of the hardware names (ie, A0
                    103:      instead of $4).  The only known assembler that supports this option
                    104:      is the Algorithmics assembler.
                    105: 
                    106: `-mgpopt'
                    107: `-mno-gpopt'
                    108:      The `-mgpopt' switch says to write all of the data declarations
                    109:      before the instructions in the text section, this allows the MIPS
                    110:      assembler to generate one word memory references instead of using
                    111:      two words for short global or static data items.  This is on by
                    112:      default if optimization is selected.
                    113: 
                    114: `-mstats'
                    115: `-mno-stats'
                    116:      For each non-inline function processed, the `-mstats' switch
                    117:      causes the compiler to emit one line to the standard error file to
                    118:      print statistics about the program (number of registers saved,
                    119:      stack size, etc.).
                    120: 
                    121: `-mmemcpy'
                    122: `-mno-memcpy'
                    123:      The `-mmemcpy' switch makes all block moves call the appropriate
                    124:      string function (`memcpy' or `bcopy') instead of possibly
                    125:      generating inline code.
                    126: 
                    127: `-mmips-tfile'
                    128: `-mno-mips-tfile'
                    129:      The `-mno-mips-tfile' switch causes the compiler not postprocess
                    130:      the object file with the `mips-tfile' program, after the MIPS
                    131:      assembler has generated it to add debug support.  If `mips-tfile'
                    132:      is not run, then no local variables will be available to the
                    133:      debugger.  In addition, `stage2' and `stage3' objects will have
                    134:      the temporary file names passed to the assembler embedded in the
                    135:      object file, which means the objects will not compare the same.
                    136:      The `-mno-mips-tfile' switch should only be used when there are
                    137:      bugs in the `mips-tfile' program that prevents compilation.
                    138: 
                    139: `-msoft-float'
                    140:      Generate output containing library calls for floating point.
                    141:      *Warning:* the requisite libraries are not part of GNU CC.
                    142:      Normally the facilities of the machine's usual C compiler are
                    143:      used, but this can't be done directly in cross-compilation.  You
                    144:      must make your own arrangements to provide suitable library
                    145:      functions for cross-compilation.
                    146: 
                    147: `-mhard-float'
                    148:      Generate output containing floating point instructions.  This is
                    149:      the default if you use the unmodified sources.
                    150: 
                    151: `-mabicalls'
                    152: `-mno-abicalls'
                    153:      Emit (or do not emit) the pseudo operations `.abicalls',
                    154:      `.cpload', and `.cprestore' that some System V.4 ports use for
                    155:      position independent code.
                    156: 
                    157: `-mlong-calls'
                    158: `-mno-long-calls'
                    159:      Do all calls with the `JALR' instruction, which requires loading
                    160:      up a function's address into a register before the call.  You need
                    161:      to use this switch, if you call outside of the current 512
                    162:      megabyte segment to functions that are not through pointers.
                    163: 
                    164: `-mhalf-pic'
                    165: `-mno-half-pic'
                    166:      Put pointers to extern references into the data section and load
                    167:      them up, rather than put the references in the text section.
                    168: 
                    169: `-membedded-pic'
                    170: `-mno-embedded-pic'
                    171:      Generate PIC code suitable for some embedded systems.  All calls
                    172:      are made using PC relative address, and all data is addressed
                    173:      using the $gp register.  This requires GNU as and GNU ld which do
                    174:      most of the work.
                    175: 
                    176: `-membedded-data'
                    177: `-mno-embedded-data'
                    178:      Allocate variables to the read-only data section first if
                    179:      possible, then next in the small data section if possible,
                    180:      otherwise in data.  This gives slightly slower code than the
                    181:      default, but reduces the amount of RAM required when executing,
                    182:      and thus may be preferred for some embedded systems.
                    183: 
                    184: `-msingle-float'
                    185: `-mdouble-float'
                    186:      The `-msingle-float' switch tells gcc to assume that the floating
                    187:      point coprocessor only supports single precision operations, as on
                    188:      the `r4650' chip.  The `-mdouble-float' switch permits gcc to use
                    189:      double precision operations.  This is the default.
                    190: 
                    191: `-mmad'
                    192: `-mno-mad'
                    193:      Permit use of the `mad', `madu' and `mul' instructions, as on the
                    194:      `r4650' chip.
                    195: 
                    196: `-m4650'
                    197:      Turns on `-msingle-float', `-mmad', and, at least for now,
                    198:      `-mcpu=r4650'.
                    199: 
                    200: `-EL'
                    201:      Compile code for the processor in little endian mode.  The
                    202:      requisite libraries are assumed to exist.
                    203: 
                    204: `-EB'
                    205:      Compile code for the processor in big endian mode.  The requisite
                    206:      libraries are assumed to exist.
                    207: 
                    208: `-G NUM'
                    209:      Put global and static items less than or equal to NUM bytes into
                    210:      the small data or bss sections instead of the normal data or bss
                    211:      section.  This allows the assembler to emit one word memory
                    212:      reference instructions based on the global pointer (GP or $28),
                    213:      instead of the normal two words used.  By default, NUM is 8 when
                    214:      the MIPS assembler is used, and 0 when the GNU assembler is used.
                    215:      The `-G NUM' switch is also passed to the assembler and linker.
                    216:      All modules should be compiled with the same `-G NUM' value.
                    217: 
                    218: `-nocpp'
                    219:      Tell the MIPS assembler to not run it's preprocessor over user
                    220:      assembler files (with a `.s' suffix) when assembling them.
                    221: 
                    222:    These options are defined by the macro `TARGET_SWITCHES' in the
                    223: machine description.  The default for the options is also defined by
                    224: that macro, which enables you to change the defaults.
                    225: 
                    226: 
                    227: File: gcc.info,  Node: i386 Options,  Next: HPPA Options,  Prev: MIPS Options,  Up: Submodel Options
                    228: 
                    229: Intel 386 Options
                    230: -----------------
                    231: 
                    232:    These `-m' options are defined for the i386 family of computers:
                    233: 
                    234: `-m486'
                    235: `-m386'
                    236:      Control whether or not code is optimized for a 486 instead of an
                    237:      386.  Code generated for an 486 will run on a 386 and vice versa.
                    238: 
                    239: `-mieee-fp'
                    240: `-mno-ieee-fp'
                    241:      Control whether or not the compiler uses IEEE floating point
                    242:      comparisons.  These handle correctly the case where the result of a
                    243:      comparison is unordered.
                    244: 
                    245: `-msoft-float'
                    246:      Generate output containing library calls for floating point.
                    247:      *Warning:* the requisite libraries are not part of GNU CC.
                    248:      Normally the facilities of the machine's usual C compiler are
                    249:      used, but this can't be done directly in cross-compilation.  You
                    250:      must make your own arrangements to provide suitable library
                    251:      functions for cross-compilation.
                    252: 
                    253:      On machines where a function returns floating point results in the
                    254:      80387 register stack, some floating point opcodes may be emitted
                    255:      even if `-msoft-float' is used.
                    256: 
                    257: `-mno-fp-ret-in-387'
                    258:      Do not use the FPU registers for return values of functions.
                    259: 
                    260:      The usual calling convention has functions return values of types
                    261:      `float' and `double' in an FPU register, even if there is no FPU.
                    262:      The idea is that the operating system should emulate an FPU.
                    263: 
                    264:      The option `-mno-fp-ret-in-387' causes such values to be returned
                    265:      in ordinary CPU registers instead.
                    266: 
                    267: `-mno-fancy-math-387'
                    268:      Some 387 emulators do not support the `sin', `cos' and `sqrt'
                    269:      instructions for the 387.  Specify this option to avoid generating
                    270:      those instructions. This option is the default on FreeBSD.  As of
                    271:      revision 2.6.1, these instructions are not generated unless you
                    272:      also use the `-ffast-math' switch.
                    273: 
                    274: `-malign-double'
                    275: `-mno-align-double'
                    276:      Control whether GNU CC aligns `double', `long double', and `long
                    277:      long' variables on a two word boundary or a one word boundary.
                    278:      Aligning `double' variables on a two word boundary will produce
                    279:      code that runs somewhat faster on a `Pentium' at the expense of
                    280:      more memory.
                    281: 
                    282:      *Warning:* if you use the `-malign-double' switch, structures
                    283:      containing the above types will be aligned differently than the
                    284:      published application binary interface specifications for the 386.
                    285: 
                    286: `-msvr3-shlib'
                    287: `-mno-svr3-shlib'
                    288:      Control whether GNU CC places uninitialized locals into `bss' or
                    289:      `data'.  `-msvr3-shlib' places these locals into `bss'.  These
                    290:      options are meaningful only on System V Release 3.
                    291: 
                    292: `-mno-wide-multiply'
                    293: `-mwide-multiply'
                    294:      Control whether GNU CC uses the `mul' and `imul' that produce 64
                    295:      bit results in `eax:edx' from 32 bit operands to do `long long'
                    296:      multiplies and 32-bit division by constants.
                    297: 
                    298: `-mrtd'
                    299:      Use a different function-calling convention, in which functions
                    300:      that take a fixed number of arguments return with the `ret' NUM
                    301:      instruction, which pops their arguments while returning.  This
                    302:      saves one instruction in the caller since there is no need to pop
                    303:      the arguments there.
                    304: 
                    305:      You can specify that an individual function is called with this
                    306:      calling sequence with the function attribute `stdcall'.  You can
                    307:      also override the `-mrtd' option by using the function attribute
                    308:      `cdecl'. *Note Function Attributes::
                    309: 
                    310:      *Warning:* this calling convention is incompatible with the one
                    311:      normally used on Unix, so you cannot use it if you need to call
                    312:      libraries compiled with the Unix compiler.
                    313: 
                    314:      Also, you must provide function prototypes for all functions that
                    315:      take variable numbers of arguments (including `printf'); otherwise
                    316:      incorrect code will be generated for calls to those functions.
                    317: 
                    318:      In addition, seriously incorrect code will result if you call a
                    319:      function with too many arguments.  (Normally, extra arguments are
                    320:      harmlessly ignored.)
                    321: 
                    322: `-mreg-alloc=REGS'
                    323:      Control the default allocation order of integer registers.  The
                    324:      string REGS is a series of letters specifying a register.  The
                    325:      supported letters are: `a' allocate EAX; `b' allocate EBX; `c'
                    326:      allocate ECX; `d' allocate EDX; `S' allocate ESI; `D' allocate
                    327:      EDI; `B' allocate EBP.
                    328: 
                    329: `-mregparm=NUM'
                    330:      Control how many registers are used to pass integer arguments.  By
                    331:      default, no registers are used to pass arguments, and at most 3
                    332:      registers can be used.  You can control this behavior for a
                    333:      specific function by using the function attribute `regparm'.
                    334:      *Note Function Attributes::
                    335: 
                    336:      *Warning:* if you use this switch, and NUM is nonzero, then you
                    337:      must build all modules with the same value, including any
                    338:      libraries.  This includes the system libraries and startup modules.
                    339: 
                    340: `-malign-loops=NUM'
                    341:      Align loops to a 2 raised to a NUM byte boundary.  If
                    342:      `-malign-loops' is not specified, the default is 2.
                    343: 
                    344: `-malign-jumps=NUM'
                    345:      Align instructions that are only jumped to to a 2 raised to a NUM
                    346:      byte boundary.  If `-malign-jumps' is not specified, the default is
                    347:      2 if optimizing for a 386, and 4 if optimizing for a 486.
                    348: 
                    349: `-malign-functions=NUM'
                    350:      Align the start of functions to a 2 raised to NUM byte boundary.
                    351:      If `-malign-jumps' is not specified, the default is 2 if optimizing
                    352:      for a 386, and 4 if optimizing for a 486.
                    353: 
                    354: 
                    355: File: gcc.info,  Node: HPPA Options,  Next: Intel 960 Options,  Prev: i386 Options,  Up: Submodel Options
                    356: 
                    357: HPPA Options
                    358: ------------
                    359: 
                    360:    These `-m' options are defined for the HPPA family of computers:
                    361: 
                    362: `-mpa-risc-1-0'
                    363:      Generate code for a PA 1.0 processor.
                    364: 
                    365: `-mpa-risc-1-1'
                    366:      Generate code for a PA 1.1 processor.
                    367: 
                    368: `-mjump-in-delay'
                    369:      Fill delay slots of function calls with unconditional jump
                    370:      instructions by modifying the return pointer for the function call
                    371:      to be the target of the conditional jump.
                    372: 
                    373: `-mmillicode-long-calls'
                    374:      Generate code which assumes millicode routines can not be reached
                    375:      by the standard millicode call sequence, linker-generated
                    376:      long-calls, or linker-modified millicode calls.  In practice this
                    377:      should only be needed for dynamicly linked executables with
                    378:      extremely large SHLIB_INFO sections.
                    379: 
                    380: `-mdisable-fpregs'
                    381:      Prevent floating point registers from being used in any manner.
                    382:      This is necessary for compiling kernels which perform lazy context
                    383:      switching of floating point registers.  If you use this option and
                    384:      attempt to perform floating point operations, the compiler will
                    385:      abort.
                    386: 
                    387: `-mdisable-indexing'
                    388:      Prevent the compiler from using indexing address modes.  This
                    389:      avoids some rather obscure problems when compiling MIG generated
                    390:      code under MACH.
                    391: 
                    392: `-mfast-indirect-calls'
                    393:      Generate code which performs faster indirect calls.  Such code is
                    394:      suitable for kernels and for static linking.  The fast indirect
                    395:      call code will fail miserably if it's part of a dynamically linked
                    396:      executable and in the presense of nested functions.
                    397: 
                    398: `-mportable-runtime'
                    399:      Use the portable calling conventions proposed by HP for ELF
                    400:      systems.
                    401: 
                    402: `-mgas'
                    403:      Enable the use of assembler directives only GAS understands.
                    404: 
                    405: `-mschedule=CPU TYPE'
                    406:      Schedule code according to the constraints for the machine type
                    407:      CPU TYPE.  The choices for CPU TYPE are `700' for 7N0 machines,
                    408:      `7100' for 7N5 machines, and `7100' for 7N2 machines.  `700' is
                    409:      the default for CPU TYPE.
                    410: 
                    411:      Note the `7100LC' scheduling information is incomplete and using
                    412:      `7100LC' often leads to bad schedules.  For now it's probably best
                    413:      to use `7100' instead of `7100LC' for the 7N2 machines.
                    414: 
                    415: `-msoft-float'
                    416:      Generate output containing library calls for floating point.
                    417:      *Warning:* the requisite libraries are not available for all HPPA
                    418:      targets.  Normally the facilities of the machine's usual C
                    419:      compiler are used, but this cannot be done directly in
                    420:      cross-compilation.  You must make your own arrangements to provide
                    421:      suitable library functions for cross-compilation.  The embedded
                    422:      target `hppa1.1-*-pro' does provide software floating point
                    423:      support.
                    424: 
                    425:      `-msoft-float' changes the calling convention in the output file;
                    426:      therefore, it is only useful if you compile *all* of a program with
                    427:      this option.  In particular, you need to compile `libgcc.a', the
                    428:      library that comes with GNU CC, with `-msoft-float' in order for
                    429:      this to work.
                    430: 
                    431: 
                    432: File: gcc.info,  Node: Intel 960 Options,  Next: DEC Alpha Options,  Prev: HPPA Options,  Up: Submodel Options
                    433: 
                    434: Intel 960 Options
                    435: -----------------
                    436: 
                    437:    These `-m' options are defined for the Intel 960 implementations:
                    438: 
                    439: `-mCPU TYPE'
                    440:      Assume the defaults for the machine type CPU TYPE for some of the
                    441:      other options, including instruction scheduling, floating point
                    442:      support, and addressing modes.  The choices for CPU TYPE are `ka',
                    443:      `kb', `mc', `ca', `cf', `sa', and `sb'.  The default is `kb'.
                    444: 
                    445: `-mnumerics'
                    446: `-msoft-float'
                    447:      The `-mnumerics' option indicates that the processor does support
                    448:      floating-point instructions.  The `-msoft-float' option indicates
                    449:      that floating-point support should not be assumed.
                    450: 
                    451: `-mleaf-procedures'
                    452: `-mno-leaf-procedures'
                    453:      Do (or do not) attempt to alter leaf procedures to be callable
                    454:      with the `bal' instruction as well as `call'.  This will result in
                    455:      more efficient code for explicit calls when the `bal' instruction
                    456:      can be substituted by the assembler or linker, but less efficient
                    457:      code in other cases, such as calls via function pointers, or using
                    458:      a linker that doesn't support this optimization.
                    459: 
                    460: `-mtail-call'
                    461: `-mno-tail-call'
                    462:      Do (or do not) make additional attempts (beyond those of the
                    463:      machine-independent portions of the compiler) to optimize
                    464:      tail-recursive calls into branches.  You may not want to do this
                    465:      because the detection of cases where this is not valid is not
                    466:      totally complete.  The default is `-mno-tail-call'.
                    467: 
                    468: `-mcomplex-addr'
                    469: `-mno-complex-addr'
                    470:      Assume (or do not assume) that the use of a complex addressing
                    471:      mode is a win on this implementation of the i960.  Complex
                    472:      addressing modes may not be worthwhile on the K-series, but they
                    473:      definitely are on the C-series.  The default is currently
                    474:      `-mcomplex-addr' for all processors except the CB and CC.
                    475: 
                    476: `-mcode-align'
                    477: `-mno-code-align'
                    478:      Align code to 8-byte boundaries for faster fetching (or don't
                    479:      bother).  Currently turned on by default for C-series
                    480:      implementations only.
                    481: 
                    482: `-mic-compat'
                    483: `-mic2.0-compat'
                    484: `-mic3.0-compat'
                    485:      Enable compatibility with iC960 v2.0 or v3.0.
                    486: 
                    487: `-masm-compat'
                    488: `-mintel-asm'
                    489:      Enable compatibility with the iC960 assembler.
                    490: 
                    491: `-mstrict-align'
                    492: `-mno-strict-align'
                    493:      Do not permit (do permit) unaligned accesses.
                    494: 
                    495: `-mold-align'
                    496:      Enable structure-alignment compatibility with Intel's gcc release
                    497:      version 1.3 (based on gcc 1.37).  Currently this is buggy in that
                    498:      `#pragma align 1' is always assumed as well, and cannot be turned
                    499:      off.
                    500: 
                    501: 
                    502: File: gcc.info,  Node: DEC Alpha Options,  Next: Clipper Options,  Prev: Intel 960 Options,  Up: Submodel Options
                    503: 
                    504: DEC Alpha Options
                    505: -----------------
                    506: 
                    507:    These `-m' options are defined for the DEC Alpha implementations:
                    508: 
                    509: `-mno-soft-float'
                    510: `-msoft-float'
                    511:      Use (do not use) the hardware floating-point instructions for
                    512:      floating-point operations.  When `-msoft-float' is specified,
                    513:      functions in `libgcc1.c' will be used to perform floating-point
                    514:      operations.  Unless they are replaced by routines that emulate the
                    515:      floating-point operations, or compiled in such a way as to call
                    516:      such emulations routines, these routines will issue floating-point
                    517:      operations.   If you are compiling for an Alpha without
                    518:      floating-point operations, you must ensure that the library is
                    519:      built so as not to call them.
                    520: 
                    521:      Note that Alpha implementations without floating-point operations
                    522:      are required to have floating-point registers.
                    523: 
                    524: `-mfp-reg'
                    525: `-mno-fp-regs'
                    526:      Generate code that uses (does not use) the floating-point register
                    527:      set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
                    528:      register set is not used, floating point operands are passed in
                    529:      integer registers as if they were integers and floating-point
                    530:      results are passed in $0 instead of $f0.  This is a non-standard
                    531:      calling sequence, so any function with a floating-point argument
                    532:      or return value called by code compiled with `-mno-fp-regs' must
                    533:      also be compiled with that option.
                    534: 
                    535:      A typical use of this option is building a kernel that does not
                    536:      use, and hence need not save and restore, any floating-point
                    537:      registers.
                    538: 
                    539: 
                    540: File: gcc.info,  Node: Clipper Options,  Next: H8/300 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
                    541: 
                    542: Clipper Options
                    543: ---------------
                    544: 
                    545:    These `-m' options are defined for the Clipper implementations:
                    546: 
                    547: `-mc300'
                    548:      Produce code for a C300 Clipper processor. This is the default.
                    549: 
                    550: `-mc400'
                    551:      Produce code for a C400 Clipper processor i.e. use floating point
                    552:      registers f8..f15.
                    553: 
                    554: 
                    555: File: gcc.info,  Node: H8/300 Options,  Next: System V Options,  Prev: Clipper Options,  Up: Submodel Options
                    556: 
                    557: H8/300 Options
                    558: --------------
                    559: 
                    560:    These `-m' options are defined for the H8/300 implementations:
                    561: 
                    562: `-mrelax'
                    563:      Shorten some address references at link time, when possible; uses
                    564:      the linker option `-relax'.  *Note `ld' and the H8/300:
                    565:      (ld.info)H8/300, for a fuller description.
                    566: 
                    567: `-mh'
                    568:      Generate code for the H8/300H.
                    569: 
                    570: 
                    571: File: gcc.info,  Node: System V Options,  Prev: H8/300 Options,  Up: Submodel Options
                    572: 
                    573: Options for System V
                    574: --------------------
                    575: 
                    576:    These additional options are available on System V Release 4 for
                    577: compatibility with other compilers on those systems:
                    578: 
                    579: `-Qy'
                    580:      Identify the versions of each tool used by the compiler, in a
                    581:      `.ident' assembler directive in the output.
                    582: 
                    583: `-Qn'
                    584:      Refrain from adding `.ident' directives to the output file (this is
                    585:      the default).
                    586: 
                    587: `-YP,DIRS'
                    588:      Search the directories DIRS, and no others, for libraries
                    589:      specified with `-l'.
                    590: 
                    591: `-Ym,DIR'
                    592:      Look in the directory DIR to find the M4 preprocessor.  The
                    593:      assembler uses this option.
                    594: 
                    595: 
                    596: File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
                    597: 
                    598: Options for Code Generation Conventions
                    599: =======================================
                    600: 
                    601:    These machine-independent options control the interface conventions
                    602: used in code generation.
                    603: 
                    604:    Most of them have both positive and negative forms; the negative form
                    605: of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
                    606: forms is listed--the one which is not the default.  You can figure out
                    607: the other form by either removing `no-' or adding it.
                    608: 
                    609: `-fpcc-struct-return'
                    610:      Return "short" `struct' and `union' values in memory like longer
                    611:      ones, rather than in registers.  This convention is less
                    612:      efficient, but it has the advantage of allowing intercallability
                    613:      between GNU CC-compiled files and files compiled with other
                    614:      compilers.
                    615: 
                    616:      The precise convention for returning structures in memory depends
                    617:      on the target configuration macros.
                    618: 
                    619:      Short structures and unions are those whose size and alignment
                    620:      match that of some integer type.
                    621: 
                    622: `-freg-struct-return'
                    623:      Use the convention that `struct' and `union' values are returned
                    624:      in registers when possible.  This is more efficient for small
                    625:      structures than `-fpcc-struct-return'.
                    626: 
                    627:      If you specify neither `-fpcc-struct-return' nor its contrary
                    628:      `-freg-struct-return', GNU CC defaults to whichever convention is
                    629:      standard for the target.  If there is no standard convention, GNU
                    630:      CC defaults to `-fpcc-struct-return', except on targets where GNU
                    631:      CC is the principal compiler.  In those cases, we can choose the
                    632:      standard, and we chose the more efficient register return
                    633:      alternative.
                    634: 
                    635: `-fshort-enums'
                    636:      Allocate to an `enum' type only as many bytes as it needs for the
                    637:      declared range of possible values.  Specifically, the `enum' type
                    638:      will be equivalent to the smallest integer type which has enough
                    639:      room.
                    640: 
                    641: `-fshort-double'
                    642:      Use the same size for `double' as for `float'.
                    643: 
                    644: `-fshared-data'
                    645:      Requests that the data and non-`const' variables of this
                    646:      compilation be shared data rather than private data.  The
                    647:      distinction makes sense only on certain operating systems, where
                    648:      shared data is shared between processes running the same program,
                    649:      while private data exists in one copy per process.
                    650: 
                    651: `-fno-common'
                    652:      Allocate even uninitialized global variables in the bss section of
                    653:      the object file, rather than generating them as common blocks.
                    654:      This has the effect that if the same variable is declared (without
                    655:      `extern') in two different compilations, you will get an error
                    656:      when you link them.  The only reason this might be useful is if
                    657:      you wish to verify that the program will work on other systems
                    658:      which always work this way.
                    659: 
                    660: `-fno-ident'
                    661:      Ignore the `#ident' directive.
                    662: 
                    663: `-fno-gnu-linker'
                    664:      Do not output global initializations (such as C++ constructors and
                    665:      destructors) in the form used by the GNU linker (on systems where
                    666:      the GNU linker is the standard method of handling them).  Use this
                    667:      option when you want to use a non-GNU linker, which also requires
                    668:      using the `collect2' program to make sure the system linker
                    669:      includes constructors and destructors.  (`collect2' is included in
                    670:      the GNU CC distribution.)  For systems which *must* use
                    671:      `collect2', the compiler driver `gcc' is configured to do this
                    672:      automatically.
                    673: 
                    674: `-finhibit-size-directive'
                    675:      Don't output a `.size' assembler directive, or anything else that
                    676:      would cause trouble if the function is split in the middle, and the
                    677:      two halves are placed at locations far apart in memory.  This
                    678:      option is used when compiling `crtstuff.c'; you should not need to
                    679:      use it for anything else.
                    680: 
                    681: `-fverbose-asm'
                    682:      Put extra commentary information in the generated assembly code to
                    683:      make it more readable.  This option is generally only of use to
                    684:      those who actually need to read the generated assembly code
                    685:      (perhaps while debugging the compiler itself).
                    686: 
                    687: `-fvolatile'
                    688:      Consider all memory references through pointers to be volatile.
                    689: 
                    690: `-fvolatile-global'
                    691:      Consider all memory references to extern and global data items to
                    692:      be volatile.
                    693: 
                    694: `-fpic'
                    695:      Generate position-independent code (PIC) suitable for use in a
                    696:      shared library, if supported for the target machine.  Such code
                    697:      accesses all constant addresses through a global offset table
                    698:      (GOT).  If the GOT size for the linked executable exceeds a
                    699:      machine-specific maximum size, you get an error message from the
                    700:      linker indicating that `-fpic' does not work; in that case,
                    701:      recompile with `-fPIC' instead.  (These maximums are 16k on the
                    702:      m88k, 8k on the Sparc, and 32k on the m68k and RS/6000.  The 386
                    703:      has no such limit.)
                    704: 
                    705:      Position-independent code requires special support, and therefore
                    706:      works only on certain machines.  For the 386, GNU CC supports PIC
                    707:      for System V but not for the Sun 386i.  Code generated for the IBM
                    708:      RS/6000 is always position-independent.
                    709: 
                    710:      The GNU assembler does not fully support PIC.  Currently, you must
                    711:      use some other assembler in order for PIC to work.  We would
                    712:      welcome volunteers to upgrade GAS to handle this; the first part
                    713:      of the job is to figure out what the assembler must do differently.
                    714: 
                    715: `-fPIC'
                    716:      If supported for the target machine, emit position-independent
                    717:      code, suitable for dynamic linking and avoiding any limit on the
                    718:      size of the global offset table.  This option makes a difference
                    719:      on the m68k, m88k and the Sparc.
                    720: 
                    721:      Position-independent code requires special support, and therefore
                    722:      works only on certain machines.
                    723: 
                    724: `-ffixed-REG'
                    725:      Treat the register named REG as a fixed register; generated code
                    726:      should never refer to it (except perhaps as a stack pointer, frame
                    727:      pointer or in some other fixed role).
                    728: 
                    729:      REG must be the name of a register.  The register names accepted
                    730:      are machine-specific and are defined in the `REGISTER_NAMES' macro
                    731:      in the machine description macro file.
                    732: 
                    733:      This flag does not have a negative form, because it specifies a
                    734:      three-way choice.
                    735: 
                    736: `-fcall-used-REG'
                    737:      Treat the register named REG as an allocatable register that is
                    738:      clobbered by function calls.  It may be allocated for temporaries
                    739:      or variables that do not live across a call.  Functions compiled
                    740:      this way will not save and restore the register REG.
                    741: 
                    742:      Use of this flag for a register that has a fixed pervasive role in
                    743:      the machine's execution model, such as the stack pointer or frame
                    744:      pointer, will produce disastrous results.
                    745: 
                    746:      This flag does not have a negative form, because it specifies a
                    747:      three-way choice.
                    748: 
                    749: `-fcall-saved-REG'
                    750:      Treat the register named REG as an allocatable register saved by
                    751:      functions.  It may be allocated even for temporaries or variables
                    752:      that live across a call.  Functions compiled this way will save
                    753:      and restore the register REG if they use it.
                    754: 
                    755:      Use of this flag for a register that has a fixed pervasive role in
                    756:      the machine's execution model, such as the stack pointer or frame
                    757:      pointer, will produce disastrous results.
                    758: 
                    759:      A different sort of disaster will result from the use of this flag
                    760:      for a register in which function values may be returned.
                    761: 
                    762:      This flag does not have a negative form, because it specifies a
                    763:      three-way choice.
                    764: 
                    765: `-fpack-struct'
                    766:      Pack all structure members together without holes.  Usually you
                    767:      would not want to use this option, since it makes the code
                    768:      suboptimal, and the offsets of structure members won't agree with
                    769:      system libraries.
                    770: 
                    771: `+e0'
                    772: `+e1'
                    773:      Control whether virtual function definitions in classes are used to
                    774:      generate code, or only to define interfaces for their callers.
                    775:      (C++ only).
                    776: 
                    777:      These options are provided for compatibility with `cfront' 1.x
                    778:      usage; the recommended alternative GNU C++ usage is in flux.
                    779:      *Note Declarations and Definitions in One Header: C++ Interface.
                    780: 
                    781:      With `+e0', virtual function definitions in classes are declared
                    782:      `extern'; the declaration is used only as an interface
                    783:      specification, not to generate code for the virtual functions (in
                    784:      this compilation).
                    785: 
                    786:      With `+e1', G++ actually generates the code implementing virtual
                    787:      functions defined in the code, and makes them publicly visible.
                    788: 
                    789: 
1.1.1.7   root      790: File: gcc.info,  Node: Environment Variables,  Next: Running Protoize,  Prev: Code Gen Options,  Up: Invoking GCC
                    791: 
                    792: Environment Variables Affecting GNU CC
                    793: ======================================
                    794: 
                    795:    This section describes several environment variables that affect how
                    796: GNU CC operates.  They work by specifying directories or prefixes to use
                    797: when searching for various kinds of files.
                    798: 
                    799:    Note that you can also specify places to search using options such as
                    800: `-B', `-I' and `-L' (*note Directory Options::.).  These take
                    801: precedence over places specified using environment variables, which in
                    802: turn take precedence over those specified by the configuration of GNU
                    803: CC.  *Note Driver::.
                    804: 
                    805: `TMPDIR'
                    806:      If `TMPDIR' is set, it specifies the directory to use for temporary
                    807:      files.  GNU CC uses temporary files to hold the output of one
                    808:      stage of compilation which is to be used as input to the next
                    809:      stage: for example, the output of the preprocessor, which is the
                    810:      input to the compiler proper.
                    811: 
                    812: `GCC_EXEC_PREFIX'
                    813:      If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
                    814:      names of the subprograms executed by the compiler.  No slash is
                    815:      added when this prefix is combined with the name of a subprogram,
                    816:      but you can specify a prefix that ends with a slash if you wish.
                    817: 
                    818:      If GNU CC cannot find the subprogram using the specified prefix, it
                    819:      tries looking in the usual places for the subprogram.
                    820: 
1.1.1.8   root      821:      The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc-lib/'
                    822:      where PREFIX is the value of `prefix' when you ran the `configure'
                    823:      script.
1.1.1.7   root      824: 
                    825:      Other prefixes specified with `-B' take precedence over this
                    826:      prefix.
                    827: 
                    828:      This prefix is also used for finding files such as `crt0.o' that
                    829:      are used for linking.
                    830: 
                    831:      In addition, the prefix is used in an unusual way in finding the
                    832:      directories to search for header files.  For each of the standard
                    833:      directories whose name normally begins with
                    834:      `/usr/local/lib/gcc-lib' (more precisely, with the value of
                    835:      `GCC_INCLUDE_DIR'), GNU CC tries replacing that beginning with the
                    836:      specified prefix to produce an alternate directory name.  Thus,
                    837:      with `-Bfoo/', GNU CC will search `foo/bar' where it would
                    838:      normally search `/usr/local/lib/bar'.  These alternate directories
                    839:      are searched first; the standard directories come next.
                    840: 
                    841: `COMPILER_PATH'
                    842:      The value of `COMPILER_PATH' is a colon-separated list of
                    843:      directories, much like `PATH'.  GNU CC tries the directories thus
                    844:      specified when searching for subprograms, if it can't find the
                    845:      subprograms using `GCC_EXEC_PREFIX'.
                    846: 
                    847: `LIBRARY_PATH'
                    848:      The value of `LIBRARY_PATH' is a colon-separated list of
1.1.1.8   root      849:      directories, much like `PATH'.  When configured as a native
                    850:      compiler, GNU CC tries the directories thus specified when
                    851:      searching for special linker files, if it can't find them using
                    852:      `GCC_EXEC_PREFIX'.  Linking using GNU CC also uses these
                    853:      directories when searching for ordinary libraries for the `-l'
                    854:      option (but directories specified with `-L' come first).
1.1.1.7   root      855: 
                    856: `C_INCLUDE_PATH'
                    857: `CPLUS_INCLUDE_PATH'
                    858: `OBJC_INCLUDE_PATH'
                    859:      These environment variables pertain to particular languages.  Each
                    860:      variable's value is a colon-separated list of directories, much
                    861:      like `PATH'.  When GNU CC searches for header files, it tries the
                    862:      directories listed in the variable for the language you are using,
                    863:      after the directories specified with `-I' but before the standard
                    864:      header file directories.
                    865: 
                    866: `DEPENDENCIES_OUTPUT'
                    867:      If this variable is set, its value specifies how to output
                    868:      dependencies for Make based on the header files processed by the
                    869:      compiler.  This output looks much like the output from the `-M'
                    870:      option (*note Preprocessor Options::.), but it goes to a separate
                    871:      file, and is in addition to the usual results of compilation.
                    872: 
                    873:      The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
                    874:      which case the Make rules are written to that file, guessing the
                    875:      target name from the source file name.  Or the value can have the
                    876:      form `FILE TARGET', in which case the rules are written to file
                    877:      FILE using TARGET as the target name.
                    878: 
                    879: 
                    880: File: gcc.info,  Node: Running Protoize,  Prev: Environment Variables,  Up: Invoking GCC
                    881: 
                    882: Running Protoize
                    883: ================
                    884: 
                    885:    The program `protoize' is an optional part of GNU C.  You can use it
                    886: to add prototypes to a program, thus converting the program to ANSI C
                    887: in one respect.  The companion program `unprotoize' does the reverse:
                    888: it removes argument types from any prototypes that are found.
                    889: 
                    890:    When you run these programs, you must specify a set of source files
                    891: as command line arguments.  The conversion programs start out by
                    892: compiling these files to see what functions they define.  The
                    893: information gathered about a file FOO is saved in a file named `FOO.X'.
                    894: 
                    895:    After scanning comes actual conversion.  The specified files are all
                    896: eligible to be converted; any files they include (whether sources or
                    897: just headers) are eligible as well.
                    898: 
                    899:    But not all the eligible files are converted.  By default,
                    900: `protoize' and `unprotoize' convert only source and header files in the
                    901: current directory.  You can specify additional directories whose files
                    902: should be converted with the `-d DIRECTORY' option.  You can also
                    903: specify particular files to exclude with the `-x FILE' option.  A file
                    904: is converted if it is eligible, its directory name matches one of the
                    905: specified directory names, and its name within the directory has not
                    906: been excluded.
                    907: 
                    908:    Basic conversion with `protoize' consists of rewriting most function
                    909: definitions and function declarations to specify the types of the
                    910: arguments.  The only ones not rewritten are those for varargs functions.
                    911: 
                    912:    `protoize' optionally inserts prototype declarations at the
                    913: beginning of the source file, to make them available for any calls that
                    914: precede the function's definition.  Or it can insert prototype
                    915: declarations with block scope in the blocks where undeclared functions
                    916: are called.
                    917: 
                    918:    Basic conversion with `unprotoize' consists of rewriting most
                    919: function declarations to remove any argument types, and rewriting
                    920: function definitions to the old-style pre-ANSI form.
                    921: 
                    922:    Both conversion programs print a warning for any function
                    923: declaration or definition that they can't convert.  You can suppress
                    924: these warnings with `-q'.
                    925: 
                    926:    The output from `protoize' or `unprotoize' replaces the original
                    927: source file.  The original file is renamed to a name ending with
                    928: `.save'.  If the `.save' file already exists, then the source file is
                    929: simply discarded.
                    930: 
                    931:    `protoize' and `unprotoize' both depend on GNU CC itself to scan the
                    932: program and collect information about the functions it uses.  So
                    933: neither of these programs will work until GNU CC is installed.
                    934: 
                    935:    Here is a table of the options you can use with `protoize' and
                    936: `unprotoize'.  Each option works with both programs unless otherwise
                    937: stated.
                    938: 
                    939: `-B DIRECTORY'
                    940:      Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
                    941:      usual directory (normally `/usr/local/lib').  This file contains
                    942:      prototype information about standard system functions.  This option
                    943:      applies only to `protoize'.
                    944: 
                    945: `-c COMPILATION-OPTIONS'
                    946:      Use  COMPILATION-OPTIONS as the options when running `gcc' to
                    947:      produce the `.X' files.  The special option `-aux-info' is always
                    948:      passed in addition, to tell `gcc' to write a `.X' file.
                    949: 
                    950:      Note that the compilation options must be given as a single
                    951:      argument to `protoize' or `unprotoize'.  If you want to specify
                    952:      several `gcc' options, you must quote the entire set of
                    953:      compilation options to make them a single word in the shell.
                    954: 
                    955:      There are certain `gcc' arguments that you cannot use, because they
                    956:      would produce the wrong kind of output.  These include `-g', `-O',
                    957:      `-c', `-S', and `-o' If you include these in the
                    958:      COMPILATION-OPTIONS, they are ignored.
                    959: 
                    960: `-C'
                    961:      Rename files to end in `.C' instead of `.c'.  This is convenient
                    962:      if you are converting a C program to C++.  This option applies
                    963:      only to `protoize'.
                    964: 
                    965: `-g'
                    966:      Add explicit global declarations.  This means inserting explicit
                    967:      declarations at the beginning of each source file for each function
                    968:      that is called in the file and was not declared.  These
                    969:      declarations precede the first function definition that contains a
                    970:      call to an undeclared function.  This option applies only to
                    971:      `protoize'.
                    972: 
                    973: `-i STRING'
                    974:      Indent old-style parameter declarations with the string STRING.
                    975:      This option applies only to `protoize'.
                    976: 
                    977:      `unprotoize' converts prototyped function definitions to old-style
                    978:      function definitions, where the arguments are declared between the
                    979:      argument list and the initial `{'.  By default, `unprotoize' uses
                    980:      five spaces as the indentation.  If you want to indent with just
                    981:      one space instead, use `-i " "'.
                    982: 
                    983: `-k'
                    984:      Keep the `.X' files.  Normally, they are deleted after conversion
                    985:      is finished.
                    986: 
                    987: `-l'
                    988:      Add explicit local declarations.  `protoize' with `-l' inserts a
                    989:      prototype declaration for each function in each block which calls
                    990:      the function without any declaration.  This option applies only to
                    991:      `protoize'.
                    992: 
                    993: `-n'
                    994:      Make no real changes.  This mode just prints information about the
                    995:      conversions that would have been done without `-n'.
                    996: 
                    997: `-N'
                    998:      Make no `.save' files.  The original files are simply deleted.
                    999:      Use this option with caution.
                   1000: 
                   1001: `-p PROGRAM'
                   1002:      Use the program PROGRAM as the compiler.  Normally, the name `gcc'
                   1003:      is used.
                   1004: 
                   1005: `-q'
                   1006:      Work quietly.  Most warnings are suppressed.
                   1007: 
                   1008: `-v'
                   1009:      Print the version number, just like `-v' for `gcc'.
                   1010: 
                   1011:    If you need special compiler options to compile one of your program's
                   1012: source files, then you should generate that file's `.X' file specially,
                   1013: by running `gcc' on that source file with the appropriate options and
                   1014: the option `-aux-info'.  Then run `protoize' on the entire set of
                   1015: files.  `protoize' will use the existing `.X' file because it is newer
                   1016: than the source file.  For example:
                   1017: 
                   1018:      gcc -Dfoo=bar file1.c -aux-info
                   1019:      protoize *.c
                   1020: 
                   1021: You need to include the special files along with the rest in the
                   1022: `protoize' command, even though their `.X' files already exist, because
                   1023: otherwise they won't get converted.
                   1024: 
                   1025:    *Note Protoize Caveats::, for more information on how to use
                   1026: `protoize' successfully.
1.1       root     1027: 

unix.superglobalmegacorp.com

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