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