|
|
1.1.1.7 root 1: This is Info file gcc.info, produced by Makeinfo-1.55 from the input
1.1 root 2: file gcc.texi.
3:
4: This file documents the use and the internals of the GNU compiler.
5:
1.1.1.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.