|
|
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: Directory Options, Next: Target Options, Prev: Link Options, Up: Invoking GCC 34: 35: Options for Directory Search 36: ============================ 37: 38: These options specify directories to search for header files, for 39: libraries and for parts of the compiler: 40: 41: `-IDIR' 42: Add the directory DIRECTORY to the head of the list of directories 43: to be searched for header files. This can be used to override a 44: system header file, substituting your own version, since these 45: directories are searched before the system header file 46: directories. If you use more than one `-I' option, the 47: directories are scanned in left-to-right order; the standard 48: system directories come after. 49: 50: `-I-' 51: Any directories you specify with `-I' options before the `-I-' 52: option are searched only for the case of `#include "FILE"'; they 53: are not searched for `#include <FILE>'. 54: 55: If additional directories are specified with `-I' options after 56: the `-I-', these directories are searched for all `#include' 57: directives. (Ordinarily *all* `-I' directories are used this way.) 58: 59: In addition, the `-I-' option inhibits the use of the current 60: directory (where the current input file came from) as the first 61: search directory for `#include "FILE"'. There is no way to 62: override this effect of `-I-'. With `-I.' you can specify 63: searching the directory which was current when the compiler was 64: invoked. That is not exactly the same as what the preprocessor 65: does by default, but it is often satisfactory. 66: 67: `-I-' does not inhibit the use of the standard system directories 68: for header files. Thus, `-I-' and `-nostdinc' are independent. 69: 70: `-LDIR' 71: Add directory DIR to the list of directories to be searched for 72: `-l'. 73: 74: `-BPREFIX' 75: This option specifies where to find the executables, libraries, 76: include files, and data files of the compiler itself. 77: 78: The compiler driver program runs one or more of the subprograms 79: `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 80: program it tries to run, both with and without `MACHINE/VERSION/' 81: (*note Target Options::.). 82: 83: For each subprogram to be run, the compiler driver first tries the 84: `-B' prefix, if any. If that name is not found, or if `-B' was 85: not specified, the driver tries two standard prefixes, which are 86: `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'. If neither of 87: those results in a file name that is found, the unmodified program 88: name is searched for using the directories specified in your 89: `PATH' environment variable. 90: 91: `-B' prefixes that effectively specify directory names also apply 92: to libraries in the linker, because the compiler translates these 93: options into `-L' options for the linker. They also apply to 94: includes files in the preprocessor, because the compiler 95: translates these options into `-isystem' options for the 96: preprocessor. In this case, the compiler appends `include' to the 97: prefix. 98: 99: The run-time support file `libgcc.a' can also be searched for using 100: the `-B' prefix, if needed. If it is not found there, the two 101: standard prefixes above are tried, and that is all. The file is 102: left out of the link if it is not found by those means. 103: 104: Another way to specify a prefix much like the `-B' prefix is to use 105: the environment variable `GCC_EXEC_PREFIX'. *Note Environment 106: Variables::. 107: 108: 109: File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Directory Options, Up: Invoking GCC 110: 111: Specifying Target Machine and Compiler Version 112: ============================================== 113: 114: By default, GNU CC compiles code for the same type of machine that 115: you are using. However, it can also be installed as a cross-compiler, 116: to compile for some other type of machine. In fact, several different 117: configurations of GNU CC, for different target machines, can be 118: installed side by side. Then you specify which one to use with the 119: `-b' option. 120: 121: In addition, older and newer versions of GNU CC can be installed side 122: by side. One of them (probably the newest) will be the default, but 123: you may sometimes wish to use another. 124: 125: `-b MACHINE' 126: The argument MACHINE specifies the target machine for compilation. 127: This is useful when you have installed GNU CC as a cross-compiler. 128: 129: The value to use for MACHINE is the same as was specified as the 130: machine type when configuring GNU CC as a cross-compiler. For 131: example, if a cross-compiler was configured with `configure 132: i386v', meaning to compile for an 80386 running System V, then you 133: would specify `-b i386v' to run that cross compiler. 134: 135: When you do not specify `-b', it normally means to compile for the 136: same type of machine that you are using. 137: 138: `-V VERSION' 139: The argument VERSION specifies which version of GNU CC to run. 140: This is useful when multiple versions are installed. For example, 141: VERSION might be `2.0', meaning to run GNU CC version 2.0. 142: 143: The default version, when you do not specify `-V', is the last 144: version of GNU CC that you installed. 145: 146: The `-b' and `-V' options actually work by controlling part of the 147: file name used for the executable files and libraries used for 148: compilation. A given version of GNU CC, for a given target machine, is 149: normally kept in the directory `/usr/local/lib/gcc-lib/MACHINE/VERSION'. 150: 151: Thus, sites can customize the effect of `-b' or `-V' either by 152: changing the names of these directories or adding alternate names (or 153: symbolic links). If in directory `/usr/local/lib/gcc-lib/' the file 154: `80386' is a link to the file `i386v', then `-b 80386' becomes an alias 155: for `-b i386v'. 156: 157: In one respect, the `-b' or `-V' do not completely change to a 158: different compiler: the top-level driver program `gcc' that you 159: originally invoked continues to run and invoke the other executables 160: (preprocessor, compiler per se, assembler and linker) that do the real 161: work. However, since no real work is done in the driver program, it 162: usually does not matter that the driver program in use is not the one 163: for the specified target and version. 164: 165: The only way that the driver program depends on the target machine is 166: in the parsing and handling of special machine-specific options. 167: However, this is controlled by a file which is found, along with the 168: other executables, in the directory for the specified version and 169: target machine. As a result, a single installed driver program adapts 170: to any specified target machine and compiler version. 171: 172: The driver program executable does control one significant thing, 173: however: the default version and target machine. Therefore, you can 174: install different instances of the driver program, compiled for 175: different targets or versions, under different names. 176: 177: For example, if the driver for version 2.0 is installed as `ogcc' 178: and that for version 2.1 is installed as `gcc', then the command `gcc' 179: will use version 2.1 by default, while `ogcc' will use 2.0 by default. 180: However, you can choose either version with either command with the 181: `-V' option. 182: 183: 184: File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 185: 186: Hardware Models and Configurations 187: ================================== 188: 189: Earlier we discussed the standard option `-b' which chooses among 190: different installed compilers for completely different target machines, 191: such as Vax vs. 68000 vs. 80386. 192: 193: In addition, each of these target machine types can have its own 194: special options, starting with `-m', to choose among various hardware 195: models or configurations--for example, 68010 vs 68020, floating 196: coprocessor or none. A single installed version of the compiler can 197: compile for any model or configuration, according to the options 198: specified. 199: 200: Some configurations of the compiler also support additional special 201: options, usually for compatibility with other compilers on the same 202: platform. 203: 204: These options are defined by the macro `TARGET_SWITCHES' in the 205: machine description. The default for the options is also defined by 206: that macro, which enables you to change the defaults. 207: 208: * Menu: 209: 210: * M680x0 Options:: 211: * VAX Options:: 212: * SPARC Options:: 213: * Convex Options:: 214: * AMD29K Options:: 215: * ARM Options:: 216: * M88K Options:: 217: * RS/6000 and PowerPC Options:: 218: * RT Options:: 219: * MIPS Options:: 220: * i386 Options:: 221: * HPPA Options:: 222: * Intel 960 Options:: 223: * DEC Alpha Options:: 224: * Clipper Options:: 225: * H8/300 Options:: 226: * System V Options:: 227: 228: 229: File: gcc.info, Node: M680x0 Options, Next: VAX Options, Up: Submodel Options 230: 231: M680x0 Options 232: -------------- 233: 234: These are the `-m' options defined for the 68000 series. The default 235: values for these options depends on which style of 68000 was selected 236: when the compiler was configured; the defaults for the most common 237: choices are given below. 238: 239: `-m68000' 240: `-mc68000' 241: Generate output for a 68000. This is the default when the 242: compiler is configured for 68000-based systems. 243: 244: `-m68020' 245: `-mc68020' 246: Generate output for a 68020. This is the default when the 247: compiler is configured for 68020-based systems. 248: 249: `-m68881' 250: Generate output containing 68881 instructions for floating point. 251: This is the default for most 68020 systems unless `-nfp' was 252: specified when the compiler was configured. 253: 254: `-m68030' 255: Generate output for a 68030. This is the default when the 256: compiler is configured for 68030-based systems. 257: 258: `-m68040' 259: Generate output for a 68040. This is the default when the 260: compiler is configured for 68040-based systems. 261: 262: This option inhibits the use of 68881/68882 instructions that have 263: to be emulated by software on the 68040. If your 68040 does not 264: have code to emulate those instructions, use `-m68040'. 265: 266: `-m68020-40' 267: Generate output for a 68040, without using any of the new 268: instructions. This results in code which can run relatively 269: efficiently on either a 68020/68881 or a 68030 or a 68040. The 270: generated code does use the 68881 instructions that are emulated 271: on the 68040. 272: 273: `-mfpa' 274: Generate output containing Sun FPA instructions for floating point. 275: 276: `-msoft-float' 277: Generate output containing library calls for floating point. 278: *Warning:* the requisite libraries are not available for all m68k 279: targets. Normally the facilities of the machine's usual C 280: compiler are used, but this can't be done directly in 281: cross-compilation. You must make your own arrangements to provide 282: suitable library functions for cross-compilation. The embedded 283: targets `m68k-*-aout' and `m68k-*-coff' do provide software 284: floating point support. 285: 286: `-mshort' 287: Consider type `int' to be 16 bits wide, like `short int'. 288: 289: `-mnobitfield' 290: Do not use the bit-field instructions. The `-m68000' option 291: implies `-mnobitfield'. 292: 293: `-mbitfield' 294: Do use the bit-field instructions. The `-m68020' option implies 295: `-mbitfield'. This is the default if you use a configuration 296: designed for a 68020. 297: 298: `-mrtd' 299: Use a different function-calling convention, in which functions 300: that take a fixed number of arguments return with the `rtd' 301: instruction, which pops their arguments while returning. This 302: saves one instruction in the caller since there is no need to pop 303: the arguments there. 304: 305: This calling convention is incompatible with the one normally used 306: on Unix, so you cannot use it if you need to call libraries 307: compiled with the Unix compiler. 308: 309: Also, you must provide function prototypes for all functions that 310: take variable numbers of arguments (including `printf'); otherwise 311: incorrect code will be generated for calls to those functions. 312: 313: In addition, seriously incorrect code will result if you call a 314: function with too many arguments. (Normally, extra arguments are 315: harmlessly ignored.) 316: 317: The `rtd' instruction is supported by the 68010 and 68020 318: processors, but not by the 68000. 319: 320: 321: File: gcc.info, Node: VAX Options, Next: SPARC Options, Prev: M680x0 Options, Up: Submodel Options 322: 323: VAX Options 324: ----------- 325: 326: These `-m' options are defined for the Vax: 327: 328: `-munix' 329: Do not output certain jump instructions (`aobleq' and so on) that 330: the Unix assembler for the Vax cannot handle across long ranges. 331: 332: `-mgnu' 333: Do output those jump instructions, on the assumption that you will 334: assemble with the GNU assembler. 335: 336: `-mg' 337: Output code for g-format floating point numbers instead of 338: d-format. 339: 340: 341: File: gcc.info, Node: SPARC Options, Next: Convex Options, Prev: VAX Options, Up: Submodel Options 342: 343: SPARC Options 344: ------------- 345: 346: These `-m' switches are supported on the SPARC: 347: 348: `-mno-app-regs' 349: `-mapp-regs' 350: Specify `-mapp-regs' to generate output using the global registers 351: 2 through 4, which the SPARC SVR4 ABI reserves for applications. 352: This is the default. 353: 354: To be fully SVR4 ABI compliant at the cost of some performance 355: loss, specify `-mno-app-regs'. You should compile libraries and 356: system software with this option. 357: 358: `-mfpu' 359: `-mhard-float' 360: Generate output containing floating point instructions. This is 361: the default. 362: 363: `-mno-fpu' 364: `-msoft-float' 365: Generate output containing library calls for floating point. 366: *Warning:* the requisite libraries are not available for all SPARC 367: targets. Normally the facilities of the machine's usual C 368: compiler are used, but this cannot be done directly in 369: cross-compilation. You must make your own arrangements to provide 370: suitable library functions for cross-compilation. The embedded 371: targets `sparc-*-aout' and `sparclite-*-*' do provide software 372: floating point support. 373: 374: `-msoft-float' changes the calling convention in the output file; 375: therefore, it is only useful if you compile *all* of a program with 376: this option. In particular, you need to compile `libgcc.a', the 377: library that comes with GNU CC, with `-msoft-float' in order for 378: this to work. 379: 380: `-mhard-quad-float' 381: Generate output containing quad-word (long double) floating point 382: instructions. 383: 384: `-msoft-quad-float' 385: Generate output containing library calls for quad-word (long 386: double) floating point instructions. The functions called are 387: those specified in the SPARC ABI. This is the default. 388: 389: As of this writing, there are no sparc implementations that have 390: hardware support for the quad-word floating point instructions. 391: They all invoke a trap handler for one of these instructions, and 392: then the trap handler emulates the effect of the instruction. 393: Because of the trap handler overhead, this is much slower than 394: calling the ABI library routines. Thus the `-msoft-quad-float' 395: option is the default. 396: 397: `-mno-epilogue' 398: `-mepilogue' 399: With `-mepilogue' (the default), the compiler always emits code for 400: function exit at the end of each function. Any function exit in 401: the middle of the function (such as a return statement in C) will 402: generate a jump to the exit code at the end of the function. 403: 404: With `-mno-epilogue', the compiler tries to emit exit code inline 405: at every function exit. 406: 407: `-mno-flat' 408: `-mflat' 409: With `-mflat', the compiler does not generate save/restore 410: instructions and will use a "flat" or single register window 411: calling convention. This model uses %i7 as the frame pointer and 412: is compatible with the normal register window model. Code from 413: either may be intermixed although debugger support is still 414: incomplete. The local registers and the input registers (0-5) are 415: still treated as "call saved" registers and will be saved on the 416: stack as necessary. 417: 418: With `-mno-flat' (the default), the compiler emits save/restore 419: instructions (except for leaf functions) and is the normal mode of 420: operation. 421: 422: `-mno-unaligned-doubles' 423: `-munaligned-doubles' 424: Assume that doubles have 8 byte alignment. This is the default. 425: 426: With `-munaligned-doubles', GNU CC assumes that doubles have 8 byte 427: alignment only if they are contained in another type, or if they 428: have an absolute address. Otherwise, it assumes they have 4 byte 429: alignment. Specifying this option avoids some rare compatibility 430: problems with code generated by other compilers. It is not the 431: default because it results in a performance loss, especially for 432: floating point code. 433: 434: `-mv8' 435: `-msparclite' 436: These two options select variations on the SPARC architecture. 437: 438: By default (unless specifically configured for the Fujitsu 439: SPARClite), GCC generates code for the v7 variant of the SPARC 440: architecture. 441: 442: `-mv8' will give you SPARC v8 code. The only difference from v7 443: code is that the compiler emits the integer multiply and integer 444: divide instructions which exist in SPARC v8 but not in SPARC v7. 445: 446: `-msparclite' will give you SPARClite code. This adds the integer 447: multiply, integer divide step and scan (`ffs') instructions which 448: exist in SPARClite but not in SPARC v7. 449: 450: `-mcypress' 451: `-msupersparc' 452: These two options select the processor for which the code is 453: optimised. 454: 455: With `-mcypress' (the default), the compiler optimizes code for the 456: Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx 457: series. This is also appropriate for the older SparcStation 1, 2, 458: IPX etc. 459: 460: With `-msupersparc' the compiler optimizes code for the SuperSparc 461: cpu, as used in the SparcStation 10, 1000 and 2000 series. This 462: flag also enables use of the full SPARC v8 instruction set. 463: 464: In a future version of GCC, these options will very likely be 465: renamed to `-mcpu=cypress' and `-mcpu=supersparc'. 466: 467: These `-m' switches are supported in addition to the above on SPARC 468: V9 processors: 469: 470: `-mmedlow' 471: Generate code for the Medium/Low code model: assume a 32 bit 472: address space. Programs are statically linked, PIC is not 473: supported. Pointers are still 64 bits. 474: 475: It is very likely that a future version of GCC will rename this 476: option. 477: 478: `-mmedany' 479: Generate code for the Medium/Anywhere code model: assume a 32 bit 480: text segment starting at offset 0, and a 32 bit data segment 481: starting anywhere (determined at link time). Programs are 482: statically linked, PIC is not supported. Pointers are still 64 483: bits. 484: 485: It is very likely that a future version of GCC will rename this 486: option. 487: 488: `-mint64' 489: Types long and int are 64 bits. 490: 491: `-mlong32' 492: Types long and int are 32 bits. 493: 494: `-mlong64' 495: `-mint32' 496: Type long is 64 bits, and type int is 32 bits. 497: 498: `-mstack-bias' 499: `-mno-stack-bias' 500: With `-mstack-bias', GNU CC assumes that the stack pointer, and 501: frame pointer if present, are offset by -2047 which must be added 502: back when making stack frame references. Otherwise, assume no 503: such offset is present. 504: 505: 1.1.1.7 root 506: File: gcc.info, Node: Convex Options, Next: AMD29K Options, Prev: SPARC Options, Up: Submodel Options 507: 508: Convex Options 509: -------------- 510: 511: These `-m' options are defined for Convex: 512: 513: `-mc1' 514: Generate output for C1. The code will run on any Convex machine. 515: The preprocessor symbol `__convex__c1__' is defined. 516: 517: `-mc2' 518: Generate output for C2. Uses instructions not available on C1. 519: Scheduling and other optimizations are chosen for max performance 520: on C2. The preprocessor symbol `__convex_c2__' is defined. 521: 522: `-mc32' 523: Generate output for C32xx. Uses instructions not available on C1. 524: Scheduling and other optimizations are chosen for max performance 525: on C32. The preprocessor symbol `__convex_c32__' is defined. 526: 527: `-mc34' 528: Generate output for C34xx. Uses instructions not available on C1. 529: Scheduling and other optimizations are chosen for max performance 530: on C34. The preprocessor symbol `__convex_c34__' is defined. 531: 532: `-mc38' 533: Generate output for C38xx. Uses instructions not available on C1. 534: Scheduling and other optimizations are chosen for max performance 535: on C38. The preprocessor symbol `__convex_c38__' is defined. 536: 537: `-margcount' 538: Generate code which puts an argument count in the word preceding 539: each argument list. This is compatible with regular CC, and a few 540: programs may need the argument count word. GDB and other 541: source-level debuggers do not need it; this info is in the symbol 542: table. 543: 544: `-mnoargcount' 545: Omit the argument count word. This is the default. 546: 547: `-mvolatile-cache' 548: Allow volatile references to be cached. This is the default. 549: 550: `-mvolatile-nocache' 551: Volatile references bypass the data cache, going all the way to 552: memory. This is only needed for multi-processor code that does 553: not use standard synchronization instructions. Making 554: non-volatile references to volatile locations will not necessarily 555: work. 556: 557: `-mlong32' 558: Type long is 32 bits, the same as type int. This is the default. 559: 560: `-mlong64' 561: Type long is 64 bits, the same as type long long. This option is 562: useless, because no library support exists for it. 563: 564: 565: File: gcc.info, Node: AMD29K Options, Next: ARM Options, Prev: Convex Options, Up: Submodel Options 566: 567: AMD29K Options 568: -------------- 569: 570: These `-m' options are defined for the AMD Am29000: 571: 572: `-mdw' 573: Generate code that assumes the `DW' bit is set, i.e., that byte and 574: halfword operations are directly supported by the hardware. This 575: is the default. 576: 577: `-mndw' 578: Generate code that assumes the `DW' bit is not set. 579: 580: `-mbw' 581: Generate code that assumes the system supports byte and halfword 582: write operations. This is the default. 583: 584: `-mnbw' 585: Generate code that assumes the systems does not support byte and 586: halfword write operations. `-mnbw' implies `-mndw'. 587: 588: `-msmall' 589: Use a small memory model that assumes that all function addresses 590: are either within a single 256 KB segment or at an absolute 591: address of less than 256k. This allows the `call' instruction to 592: be used instead of a `const', `consth', `calli' sequence. 593: 594: `-mnormal' 595: Use the normal memory model: Generate `call' instructions only when 596: calling functions in the same file and `calli' instructions 597: otherwise. This works if each file occupies less than 256 KB but 598: allows the entire executable to be larger than 256 KB. This is 599: the default. 600: 601: `-mlarge' 602: Always use `calli' instructions. Specify this option if you expect 603: a single file to compile into more than 256 KB of code. 604: 605: `-m29050' 606: Generate code for the Am29050. 607: 608: `-m29000' 609: Generate code for the Am29000. This is the default. 610: 611: `-mkernel-registers' 612: Generate references to registers `gr64-gr95' instead of to 613: registers `gr96-gr127'. This option can be used when compiling 614: kernel code that wants a set of global registers disjoint from 615: that used by user-mode code. 616: 617: Note that when this option is used, register names in `-f' flags 618: must use the normal, user-mode, names. 619: 620: `-muser-registers' 621: Use the normal set of global registers, `gr96-gr127'. This is the 622: default. 623: 624: `-mstack-check' 625: `-mno-stack-check' 626: Insert (or do not insert) a call to `__msp_check' after each stack 627: adjustment. This is often used for kernel code. 628: 629: `-mstorem-bug' 630: `-mno-storem-bug' 631: `-mstorem-bug' handles 29k processors which cannot handle the 632: separation of a mtsrim insn and a storem instruction (most 29000 633: chips to date, but not the 29050). 634: 635: `-mno-reuse-arg-regs' 636: `-mreuse-arg-regs' 637: `-mno-reuse-arg-regs' tells the compiler to only use incoming 638: argument registers for copying out arguments. This helps detect 639: calling a function with fewer arguments than it was declared with. 640: 641: `-msoft-float' 642: Generate output containing library calls for floating point. 643: *Warning:* the requisite libraries are not part of GNU CC. 644: Normally the facilities of the machine's usual C compiler are 645: used, but this can't be done directly in cross-compilation. You 646: must make your own arrangements to provide suitable library 647: functions for cross-compilation. 648: 649: 650: File: gcc.info, Node: ARM Options, Next: M88K Options, Prev: AMD29K Options, Up: Submodel Options 651: 652: ARM Options 653: ----------- 654: 655: These `-m' options are defined for Advanced RISC Machines (ARM) 656: architectures: 657: 658: `-m2' 659: `-m3' 660: These options are identical. Generate code for the ARM2 and ARM3 661: processors. This option is the default. You should also use this 662: option to generate code for ARM6 processors that are running with a 663: 26-bit program counter. 664: 665: `-m6' 666: Generate code for the ARM6 processor when running with a 32-bit 667: program counter. 668: 669: `-mapcs' 1.1.1.8 root 670: Generate a stack frame that is compliant with the ARM Procedure 1.1.1.7 root 671: Call Standard for all functions, even if this is not strictly 672: necessary for correct execution of the code. 673: 674: `-mbsd' 675: This option only applies to RISC iX. Emulate the native BSD-mode 676: compiler. This is the default if `-ansi' is not specified. 677: 678: `-mxopen' 679: This option only applies to RISC iX. Emulate the native 680: X/Open-mode compiler. 681: 682: `-mno-symrename' 683: This option only applies to RISC iX. Do not run the assembler 684: post-processor, `symrename', after code has been assembled. 685: Normally it is necessary to modify some of the standard symbols in 686: preparation for linking with the RISC iX C library; this option 687: suppresses this pass. The post-processor is never run when the 688: compiler is built for cross-compilation. 689: 690: 691: File: gcc.info, Node: M88K Options, Next: RS/6000 and PowerPC Options, Prev: ARM Options, Up: Submodel Options 692: 693: M88K Options 694: ------------ 695: 696: These `-m' options are defined for Motorola 88k architectures: 697: 698: `-m88000' 699: Generate code that works well on both the m88100 and the m88110. 700: 701: `-m88100' 702: Generate code that works best for the m88100, but that also runs 703: on the m88110. 704: 705: `-m88110' 706: Generate code that works best for the m88110, and may not run on 707: the m88100. 708: 709: `-mbig-pic' 710: Obsolete option to be removed from the next revision. Use `-fPIC'. 711: 712: `-midentify-revision' 713: Include an `ident' directive in the assembler output recording the 714: source file name, compiler name and version, timestamp, and 715: compilation flags used. 716: 717: `-mno-underscores' 718: In assembler output, emit symbol names without adding an underscore 719: character at the beginning of each name. The default is to use an 720: underscore as prefix on each name. 721: 722: `-mocs-debug-info' 723: `-mno-ocs-debug-info' 724: Include (or omit) additional debugging information (about 725: registers used in each stack frame) as specified in the 88open 726: Object Compatibility Standard, "OCS". This extra information 727: allows debugging of code that has had the frame pointer 728: eliminated. The default for DG/UX, SVr4, and Delta 88 SVr3.2 is 729: to include this information; other 88k configurations omit this 730: information by default. 731: 732: `-mocs-frame-position' 733: When emitting COFF debugging information for automatic variables 734: and parameters stored on the stack, use the offset from the 735: canonical frame address, which is the stack pointer (register 31) 736: on entry to the function. The DG/UX, SVr4, Delta88 SVr3.2, and 737: BCS configurations use `-mocs-frame-position'; other 88k 738: configurations have the default `-mno-ocs-frame-position'. 739: 740: `-mno-ocs-frame-position' 741: When emitting COFF debugging information for automatic variables 742: and parameters stored on the stack, use the offset from the frame 743: pointer register (register 30). When this option is in effect, 744: the frame pointer is not eliminated when debugging information is 745: selected by the -g switch. 746: 747: `-moptimize-arg-area' 748: `-mno-optimize-arg-area' 749: Control how function arguments are stored in stack frames. 750: `-moptimize-arg-area' saves space by optimizing them, but this 751: conflicts with the 88open specifications. The opposite 752: alternative, `-mno-optimize-arg-area', agrees with 88open 753: standards. By default GNU CC does not optimize the argument area. 754: 755: `-mshort-data-NUM' 756: Generate smaller data references by making them relative to `r0', 757: which allows loading a value using a single instruction (rather 758: than the usual two). You control which data references are 759: affected by specifying NUM with this option. For example, if you 760: specify `-mshort-data-512', then the data references affected are 761: those involving displacements of less than 512 bytes. 762: `-mshort-data-NUM' is not effective for NUM greater than 64k. 763: 764: `-mserialize-volatile' 765: `-mno-serialize-volatile' 766: Do, or don't, generate code to guarantee sequential consistency of 767: volatile memory references. By default, consistency is guaranteed. 768: 769: The order of memory references made by the MC88110 processor does 770: not always match the order of the instructions requesting those 771: references. In particular, a load instruction may execute before 772: a preceding store instruction. Such reordering violates 773: sequential consistency of volatile memory references, when there 774: are multiple processors. When consistency must be guaranteed, 775: GNU C generates special instructions, as needed, to force 776: execution in the proper order. 777: 778: The MC88100 processor does not reorder memory references and so 779: always provides sequential consistency. However, by default, GNU 780: C generates the special instructions to guarantee consistency even 781: when you use `-m88100', so that the code may be run on an MC88110 782: processor. If you intend to run your code only on the MC88100 783: processor, you may use `-mno-serialize-volatile'. 784: 785: The extra code generated to guarantee consistency may affect the 786: performance of your application. If you know that you can safely 787: forgo this guarantee, you may use `-mno-serialize-volatile'. 788: 789: `-msvr4' 790: `-msvr3' 791: Turn on (`-msvr4') or off (`-msvr3') compiler extensions related 792: to System V release 4 (SVr4). This controls the following: 793: 794: 1. Which variant of the assembler syntax to emit. 795: 796: 2. `-msvr4' makes the C preprocessor recognize `#pragma weak' 797: that is used on System V release 4. 798: 799: 3. `-msvr4' makes GNU CC issue additional declaration directives 800: used in SVr4. 801: 802: `-msvr4' is the default for the m88k-motorola-sysv4 and 803: m88k-dg-dgux m88k configurations. `-msvr3' is the default for all 804: other m88k configurations. 805: 806: `-mversion-03.00' 807: This option is obsolete, and is ignored. 808: 809: `-mno-check-zero-division' 810: `-mcheck-zero-division' 811: Do, or don't, generate code to guarantee that integer division by 812: zero will be detected. By default, detection is guaranteed. 813: 814: Some models of the MC88100 processor fail to trap upon integer 815: division by zero under certain conditions. By default, when 816: compiling code that might be run on such a processor, GNU C 817: generates code that explicitly checks for zero-valued divisors and 818: traps with exception number 503 when one is detected. Use of 819: mno-check-zero-division suppresses such checking for code 820: generated to run on an MC88100 processor. 821: 822: GNU C assumes that the MC88110 processor correctly detects all 823: instances of integer division by zero. When `-m88110' is 824: specified, both `-mcheck-zero-division' and 825: `-mno-check-zero-division' are ignored, and no explicit checks for 826: zero-valued divisors are generated. 827: 828: `-muse-div-instruction' 829: Use the div instruction for signed integer division on the MC88100 830: processor. By default, the div instruction is not used. 831: 832: On the MC88100 processor the signed integer division instruction 833: div) traps to the operating system on a negative operand. The 834: operating system transparently completes the operation, but at a 835: large cost in execution time. By default, when compiling code 836: that might be run on an MC88100 processor, GNU C emulates signed 837: integer division using the unsigned integer division instruction 838: divu), thereby avoiding the large penalty of a trap to the 839: operating system. Such emulation has its own, smaller, execution 840: cost in both time and space. To the extent that your code's 841: important signed integer division operations are performed on two 842: nonnegative operands, it may be desirable to use the div 843: instruction directly. 844: 845: On the MC88110 processor the div instruction (also known as the 846: divs instruction) processes negative operands without trapping to 847: the operating system. When `-m88110' is specified, 848: `-muse-div-instruction' is ignored, and the div instruction is used 849: for signed integer division. 850: 851: Note that the result of dividing INT_MIN by -1 is undefined. In 852: particular, the behavior of such a division with and without 853: `-muse-div-instruction' may differ. 854: 855: `-mtrap-large-shift' 856: `-mhandle-large-shift' 857: Include code to detect bit-shifts of more than 31 bits; 858: respectively, trap such shifts or emit code to handle them 859: properly. By default GNU CC makes no special provision for large 860: bit shifts. 861: 862: `-mwarn-passed-structs' 863: Warn when a function passes a struct as an argument or result. 864: Structure-passing conventions have changed during the evolution of 865: the C language, and are often the source of portability problems. 866: By default, GNU CC issues no such warning. 1.1.1.4 root 867: 868: 1.1.1.6 root 869: File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RT Options, Prev: M88K Options, Up: Submodel Options 870: 871: IBM RS/6000 and PowerPC Options 872: ------------------------------- 873: 874: These `-m' options are defined for the IBM RS/6000 and PowerPC: 875: `-mpower' 876: `-mno-power' 877: `-mpower2' 878: `-mno-power2' 879: `-mpowerpc' 880: `-mno-powerpc' 1.1.1.7 root 881: `-mpowerpc-gpopt' 882: `-mno-powerpc-gpopt' 883: `-mpowerpc-gfxopt' 884: `-mno-powerpc-gfxopt' 1.1.1.6 root 885: GNU CC supports two related instruction set architectures for the 886: RS/6000 and PowerPC. The "POWER" instruction set are those 887: instructions supported by the `rios' chip set used in the original 888: RS/6000 systems and the "PowerPC" instruction set is the 889: architecture of the Motorola MPC6xx microprocessors. The PowerPC 890: architecture defines 64-bit instructions, but they are not 891: supported by any current processors. 892: 893: Neither architecture is a subset of the other. However there is a 894: large common subset of instructions supported by both. An MQ 895: register is included in processors supporting the POWER 896: architecture. 897: 898: You use these options to specify which instructions are available 899: on the processor you are using. The default value of these 900: options is determined when configuring GNU CC. Specifying the 901: `-mcpu=CPU_TYPE' overrides the specification of these options. We 902: recommend you use that option rather than these. 903: 904: The `-mpower' option allows GNU CC to generate instructions that 905: are found only in the POWER architecture and to use the MQ 906: register. Specifying `-mpower2' implies `-power' and also allows 907: GNU CC to generate instructions that are present in the POWER2 908: architecture but not the original POWER architecture. 909: 910: The `-mpowerpc' option allows GNU CC to generate instructions that 911: are found only in the 32-bit subset of the PowerPC architecture. 1.1.1.7 root 912: Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 913: GNU CC to use the optional PowerPC architecture instructions in the 914: General Purpose group, including floating-point square root. 915: Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 916: GNU CC to use the optional PowerPC architecture instructions in 917: the Graphics group, including floating-point select. 1.1.1.6 root 918: 919: If you specify both `-mno-power' and `-mno-powerpc', GNU CC will 920: use only the instructions in the common subset of both 1.1.1.7 root 921: architectures plus some special AIX common-mode calls, and will 922: not use the MQ register. Specifying both `-mpower' and `-mpowerpc' 923: permits GNU CC to use any instruction from either architecture and 924: to allow use of the MQ register; specify this for the Motorola 925: MPC601. 1.1.1.6 root 926: 927: `-mnew-mnemonics' 928: `-mold-mnemonics' 929: Select which mnemonics to use in the generated assembler code. 930: `-mnew-mnemonics' requests output that uses the assembler mnemonics 931: defined for the PowerPC architecture, while `-mold-mnemonics' 932: requests the assembler mnemonics defined for the POWER 933: architecture. Instructions defined in only one architecture have 934: only one mnemonic; GNU CC uses that mnemonic irrespective of which 1.1.1.8 root 935: of these options is specified. 1.1.1.6 root 936: 937: PowerPC assemblers support both the old and new mnemonics, as will 938: later POWER assemblers. Current POWER assemblers only support the 939: old mnemonics. Specify `-mnew-mnemonics' if you have an assembler 940: that supports them, otherwise specify `-mold-mnemonics'. 941: 942: The default value of these options depends on how GNU CC was 1.1.1.8 root 943: configured. Specifying `-mcpu=CPU_TYPE' sometimes overrides the 1.1.1.7 root 944: value of these option. Unless you are building a cross-compiler, 1.1.1.6 root 945: you should normally not specify either `-mnew-mnemonics' or 946: `-mold-mnemonics', but should instead accept the default. 947: 948: `-mcpu=CPU_TYPE' 949: Set architecture type, register usage, choice of mnemonics, and 950: instruction scheduling parameters for machine type CPU_TYPE. By 951: default, CPU_TYPE is the target system defined when GNU CC was 952: configured. Supported values for CPU_TYPE are `rios1', `rios2', 1.1.1.8 root 953: `rsc', `601', `603', `604', `power', `powerpc', `403', and 954: `common'. `-mcpu=power' and `-mcpu=powerpc' specify generic POWER 955: and pure PowerPC (i.e., not MPC601) architecture machine types, 956: with an appropriate, generic processor model assumed for 957: scheduling purposes. 1.1.1.7 root 958: 959: Specifying `-mcpu=rios1', `-mcpu=rios2', `-mcpu=rsc', or 960: `-mcpu=power' enables the `-mpower' option and disables the 961: `-mpowerpc' option; `-mcpu=601' enables both the `-mpower' and 1.1.1.8 root 962: `-mpowerpc' options; `-mcpu=603', `-mcpu=604', `-mcpu=403', and 963: `-mcpu=powerpc' enable the `-mpowerpc' option and disable the 964: `-mpower' option; `-mcpu=common' disables both the `-mpower' and 965: `-mpowerpc' options. 1.1.1.6 root 966: 967: To generate code that will operate on all members of the RS/6000 1.1.1.7 root 968: and PowerPC families, specify `-mcpu=common'. In that case, GNU CC 969: will use only the instructions in the common subset of both 970: architectures plus some special AIX common-mode calls, and will 971: not use the MQ register. GNU CC assumes a generic processor model 972: for scheduling purposes. 973: 974: Specifying `-mcpu=rios1', `-mcpu=rios2', `-mcpu=rsc', or 975: `-mcpu=power' also disables the `new-mnemonics' option. 1.1.1.8 root 976: Specifying `-mcpu=601', `-mcpu=603', `-mcpu=604', `403', or 1.1.1.7 root 977: `-mcpu=powerpc' also enables the `new-mnemonics' option. 1.1.1.6 root 978: 1.1.1.7 root 979: `-mfull-toc' 1.1.1.6 root 980: `-mno-fp-in-toc' 1.1.1.7 root 981: `-mno-sum-in-toc' 1.1.1.6 root 982: `-mminimal-toc' 983: Modify generation of the TOC (Table Of Contents), which is created 1.1.1.7 root 984: for every executable file. The `-mfull-toc' option is selected by 985: default. In that case, GNU CC will allocate at least one TOC 1.1.1.6 root 986: entry for each unique non-automatic variable reference in your 987: program. GNU CC will also place floating-point constants in the 1.1.1.7 root 988: TOC. However, only 16,384 entries are available in the TOC. 1.1.1.6 root 989: 1.1.1.7 root 990: If you receive a linker error message that saying you have 991: overflowed the available TOC space, you can reduce the amount of 992: TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 993: options. `-mno-fp-in-toc' prevents GNU CC from putting 994: floating-point constants in the TOC and `-mno-sum-in-toc' forces 995: GNU CC to generate code to calculate the sum of an address and a 996: constant at run-time instead of putting that sum into the TOC. 997: You may specify one or both of these options. Each causes GNU CC 998: to produce very slightly slower and larger code at the expense of 999: conserving TOC space. 1000: 1001: If you still run out of space in the TOC even when you specify 1002: both of these options, specify `-mminimal-toc' instead. This 1003: option causes GNU CC to make only one TOC entry for every file. 1004: When you specify this option, GNU CC will produce code that is 1005: slower and larger but which uses extremely little TOC space. You 1006: may wish to use this option only on files that contain less 1007: frequently executed code. 1.1.1.6 root 1008: 1.1.1.8 root 1009: `-msoft-float' 1010: `-mhard-float' 1011: Generate code that does not use (uses) the floating-point register 1012: set. Software floating point emulation is provided if you use the 1013: `-msoft-float' option, and pass the option to GNU CC when linking. 1014: 1015: `-mmultiple' 1016: `-mno-multiple' 1017: Generate code that uses (does not use) the load multiple word 1018: instructions and the store multiple word instructions. These 1019: instructions are generated by default on POWER systems, and not 1020: generated on PowerPC systems. Do not use `-mmultiple' on little 1021: endian PowerPC systems, since those instructions do not work when 1022: the processor is in little endian mode. 1023: 1024: `-mstring' 1025: `-mno-string' 1026: Generate code that uses (does not use) the load string 1027: instructions and the store string word instructions to save 1028: multiple registers and do small block moves. These instructions 1029: are generated by default on POWER systems, anod not generated on 1030: PowerPC systems. Do not use `-mstring' on little endian PowerPC 1031: systems, since those instructions do not work when the processor 1032: is in little endian mode. 1033: 1034: `-mno-bit-align' 1035: `-mbit-align' 1036: On System V.4 and embedded PowerPC systems do not (do) force 1037: structures and unions that contain bit fields to be aligned to the 1038: base type of the bit field. 1039: 1040: For example, by default a structure containing nothing but 8 1041: `unsigned' bitfields of length 1 would be aligned to a 4 byte 1042: boundary and have a size of 4 bytes. By using `-mno-bit-align', 1043: the structure would be aligned to a 1 byte boundary and be one 1044: byte in size. 1045: 1046: `-mno-strict-align' 1047: `-mstrict-align' 1048: On System V.4 and embedded PowerPC systems do not (do) assume that 1049: unaligned memory references will be handled by the system. 1050: 1051: `-mrelocatable' 1052: `-mno-relocatable' 1053: On embedded PowerPC systems generate code that allows (does not 1054: allow) the program to be relocated to a different address at 1055: runtime. 1056: 1057: `-mno-toc' 1058: `-mtoc' 1059: On System V.4 and embedded PowerPC systems do not (do) assume that 1060: register 2 contains a pointer to a global area pointing to the 1061: addresses used in the program. 1062: 1063: `-mno-traceback' 1064: `-mtraceback' 1065: On embedded PowerPC systems do not (do) generate a traceback tag 1066: before the start of the function. This tag can be used by the 1067: debugger to identify where the start of a function is. 1068: 1069: `-mlittle' 1070: `-mlittle-endian' 1071: On System V.4 and embedded PowerPC systems compile code for the 1072: processor in little endian mode. The `-mlittle-endian' option is 1073: the same as `-mlittle'. 1074: 1075: `-mbig' 1076: `-mbig-endian' 1077: On System V.4 and embedded PowerPC systems compile code for the 1078: processor in big endian mode. The `-mbig-endian' option is the 1079: same as `-mbig'. 1080: 1081: `-mcall-sysv' 1082: On System V.4 and embedded PowerPC systems compile code using 1083: calling conventions that adheres to the March 1995 draft of the 1084: System V Application Binary Interface, PowerPC processor 1085: supplement. This is the default unless you configured GCC using 1086: `powerpc-*-eabiaix'. 1087: 1088: `-mcall-aix' 1089: On System V.4 and embedded PowerPC systems compile code using 1090: calling conventions that are similar to those used on AIX. This 1091: is the default if you configured GCC using `powerpc-*-eabiaix'. 1092: 1093: `-mprototype' 1094: `-mno-prototype' 1095: On System V.4 and embedded PowerPC systems assume that all calls to 1096: variable argument functions are properly prototyped. Otherwise, 1097: the compiler must insert an instruction before every non 1098: prototyped call to set or clear bit 6 of the condition code 1099: register (CR) to indicate whether floating point values were 1100: passed in the floating point registers in case the function takes 1101: a variable arguments. With `-mprototype', only calls to 1102: prototyped variable argument functions will set or clear the bit. 1103: 1.1.1.6 root 1104: 1105: File: gcc.info, Node: RT Options, Next: MIPS Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 1106: 1107: IBM RT Options 1108: -------------- 1109: 1110: These `-m' options are defined for the IBM RT PC: 1111: 1112: `-min-line-mul' 1113: Use an in-line code sequence for integer multiplies. This is the 1114: default. 1115: 1116: `-mcall-lib-mul' 1117: Call `lmul$$' for integer multiples. 1118: 1119: `-mfull-fp-blocks' 1120: Generate full-size floating point data blocks, including the 1121: minimum amount of scratch space recommended by IBM. This is the 1122: default. 1123: 1124: `-mminimum-fp-blocks' 1125: Do not include extra scratch space in floating point data blocks. 1126: This results in smaller code, but slower execution, since scratch 1127: space must be allocated dynamically. 1128: 1129: `-mfp-arg-in-fpregs' 1130: Use a calling sequence incompatible with the IBM calling 1131: convention in which floating point arguments are passed in 1132: floating point registers. Note that `varargs.h' and `stdargs.h' 1133: will not work with floating point operands if this option is 1134: specified. 1135: 1136: `-mfp-arg-in-gregs' 1137: Use the normal calling convention for floating point arguments. 1138: This is the default. 1139: 1140: `-mhc-struct-return' 1141: Return structures of more than one word in memory, rather than in a 1142: register. This provides compatibility with the MetaWare HighC (hc) 1143: compiler. Use the option `-fpcc-struct-return' for compatibility 1144: with the Portable C Compiler (pcc). 1145: 1146: `-mnohc-struct-return' 1147: Return some structures of more than one word in registers, when 1148: convenient. This is the default. For compatibility with the 1149: IBM-supplied compilers, use the option `-fpcc-struct-return' or the 1150: option `-mhc-struct-return'. 1151:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.