|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.