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