|
|
1.1 root 1: This is Info file gcc.info, produced by Makeinfo-1.54 from the input
2: file gcc.texi.
3:
4: This file documents the use and the internals of the GNU compiler.
5:
6: Published by the Free Software Foundation 675 Massachusetts Avenue
7: Cambridge, MA 02139 USA
8:
9: Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc.
10:
11: Permission is granted to make and distribute verbatim copies of this
12: manual provided the copyright notice and this permission notice are
13: preserved on all copies.
14:
15: Permission is granted to copy and distribute modified versions of
16: this manual under the conditions for verbatim copying, provided also
17: that the sections entitled "GNU General Public License" and "Protect
18: Your Freedom--Fight `Look And Feel'" are included exactly as in the
19: original, and provided that the entire resulting derived work is
20: distributed under the terms of a permission notice identical to this
21: one.
22:
23: Permission is granted to copy and distribute translations of this
24: manual into another language, under the above conditions for modified
25: versions, except that the sections entitled "GNU General Public
26: License" and "Protect Your Freedom--Fight `Look And Feel'", and this
27: permission notice, may be included in translations approved by the Free
28: Software Foundation instead of in the original English.
29:
30:
31: File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC
32:
33: Options That Control Optimization
34: =================================
35:
36: These options control various sorts of optimizations:
37:
38: `-O'
39: `-O1'
40: Optimize. Optimizing compilation takes somewhat more time, and a
41: lot more memory for a large function.
42:
43: Without `-O', the compiler's goal is to reduce the cost of
44: compilation and to make debugging produce the expected results.
45: Statements are independent: if you stop the program with a
46: breakpoint between statements, you can then assign a new value to
47: any variable or change the program counter to any other statement
48: in the function and get exactly the results you would expect from
49: the source code.
50:
51: Without `-O', only variables declared `register' are allocated in
52: registers. The resulting compiled code is a little worse than
53: produced by PCC without `-O'.
54:
55: With `-O', the compiler tries to reduce code size and execution
56: time.
57:
58: When `-O' is specified, the two options `-fthread-jumps' and
59: `-fdelayed-branch' are turned on. On some machines other flags may
60: also be turned on.
61:
62: `-O2'
63: Optimize even more. Nearly all supported optimizations that do not
64: involve a space-speed tradeoff are performed. As compared to `-O',
65: this option increases both compilation time and the performance of
66: the generated code.
67:
68: `-O2' turns on all optional optimizations except for loop unrolling
69: and frame pointer elimination.
70:
71: `-O0'
72: Do not optimize.
73:
74: If you use multiple `-O' options, with or without level numbers,
75: the last such option is the one that is effective.
76:
77: Options of the form `-fFLAG' specify machine-independent flags.
78: Most flags have both positive and negative forms; the negative form of
79: `-ffoo' would be `-fno-foo'. In the table below, only one of the forms
80: is listed--the one which is not the default. You can figure out the
81: other form by either removing `no-' or adding it.
82:
83: `-ffloat-store'
84: Do not store floating point variables in registers, and inhibit
85: other options that might change whether a floating point value is
86: taken from a register or memory.
87:
88: This option prevents undesirable excess precision on machines such
89: as the 68000 where the floating registers (of the 68881) keep more
90: precision than a `double' is supposed to have. For most programs,
91: the excess precision does only good, but a few programs rely on the
92: precise definition of IEEE floating point. Use `-ffloat-store' for
93: such programs.
94:
95: `-fno-default-inline'
96: Do not make member functions inline by default merely because they
97: are defined inside the class scope (C++ only). Otherwise, when
98: you specify `-O', member functions defined inside class scope are
99: compiled inline by default; i.e., you don't need to add `inline'
100: in front of the member function name.
101:
102: `-fno-defer-pop'
103: Always pop the arguments to each function call as soon as that
104: function returns. For machines which must pop arguments after a
105: function call, the compiler normally lets arguments accumulate on
106: the stack for several function calls and pops them all at once.
107:
108: `-fforce-mem'
109: Force memory operands to be copied into registers before doing
110: arithmetic on them. This may produce better code by making all
111: memory references potential common subexpressions. When they are
112: not common subexpressions, instruction combination should
113: eliminate the separate register-load. I am interested in hearing
114: about the difference this makes.
115:
116: `-fforce-addr'
117: Force memory address constants to be copied into registers before
118: doing arithmetic on them. This may produce better code just as
119: `-fforce-mem' may. I am interested in hearing about the
120: difference this makes.
121:
122: `-fomit-frame-pointer'
123: Don't keep the frame pointer in a register for functions that
124: don't need one. This avoids the instructions to save, set up and
125: restore frame pointers; it also makes an extra register available
126: in many functions. *It also makes debugging impossible on some
127: machines.*
128:
129: On some machines, such as the Vax, this flag has no effect, because
130: the standard calling sequence automatically handles the frame
131: pointer and nothing is saved by pretending it doesn't exist. The
132: machine-description macro `FRAME_POINTER_REQUIRED' controls
133: whether a target machine supports this flag. *Note Registers::.
134:
135: `-fno-inline'
136: Don't pay attention to the `inline' keyword. Normally this option
137: is used to keep the compiler from expanding any functions inline.
138: Note that if you are not optimizing, no functions can be expanded
139: inline.
140:
141: `-finline-functions'
142: Integrate all simple functions into their callers. The compiler
143: heuristically decides which functions are simple enough to be worth
144: integrating in this way.
145:
146: If all calls to a given function are integrated, and the function
147: is declared `static', then the function is normally not output as
148: assembler code in its own right.
149:
150: `-fkeep-inline-functions'
151: Even if all calls to a given function are integrated, and the
152: function is declared `static', nevertheless output a separate
153: run-time callable version of the function.
154:
155: `-fno-function-cse'
156: Do not put function addresses in registers; make each instruction
157: that calls a constant function contain the function's address
158: explicitly.
159:
160: This option results in less efficient code, but some strange hacks
161: that alter the assembler output may be confused by the
162: optimizations performed when this option is not used.
163:
164: `-ffast-math'
165: This option allows GCC to violate some ANSI or IEEE rules and/or
166: specifications in the interest of optimizing code for speed. For
167: example, it allows the compiler to assume arguments to the `sqrt'
168: function are non-negative numbers.
169:
170: This option should never be turned on by any `-O' option since it
171: can result in incorrect output for programs which depend on an
172: exact implementation of IEEE or ANSI rules/specifications for math
173: functions.
174:
175: The following options control specific optimizations. The `-O2'
176: option turns on all of these optimizations except `-funroll-loops' and
177: `-funroll-all-loops'. On most machines, the `-O' option turns on the
178: `-fthread-jumps' and `-fdelayed-branch' options, but specific machines
179: may handle it differently.
180:
181: You can use the following flags in the rare cases when "fine-tuning"
182: of optimizations to be performed is desired.
183:
184: `-fstrength-reduce'
185: Perform the optimizations of loop strength reduction and
186: elimination of iteration variables.
187:
188: `-fthread-jumps'
189: Perform optimizations where we check to see if a jump branches to a
190: location where another comparison subsumed by the first is found.
191: If so, the first branch is redirected to either the destination of
192: the second branch or a point immediately following it, depending
193: on whether the condition is known to be true or false.
194:
195: `-fcse-follow-jumps'
196: In common subexpression elimination, scan through jump instructions
197: when the target of the jump is not reached by any other path. For
198: example, when CSE encounters an `if' statement with an `else'
199: clause, CSE will follow the jump when the condition tested is
200: false.
201:
202: `-fcse-skip-blocks'
203: This is similar to `-fcse-follow-jumps', but causes CSE to follow
204: jumps which conditionally skip over blocks. When CSE encounters a
205: simple `if' statement with no else clause, `-fcse-skip-blocks'
206: causes CSE to follow the jump around the body of the `if'.
207:
208: `-frerun-cse-after-loop'
209: Re-run common subexpression elimination after loop optimizations
210: has been performed.
211:
212: `-fexpensive-optimizations'
213: Perform a number of minor optimizations that are relatively
214: expensive.
215:
216: `-fdelayed-branch'
217: If supported for the target machine, attempt to reorder
218: instructions to exploit instruction slots available after delayed
219: branch instructions.
220:
221: `-fschedule-insns'
222: If supported for the target machine, attempt to reorder
223: instructions to eliminate execution stalls due to required data
224: being unavailable. This helps machines that have slow floating
225: point or memory load instructions by allowing other instructions
226: to be issued until the result of the load or floating point
227: instruction is required.
228:
229: `-fschedule-insns2'
230: Similar to `-fschedule-insns', but requests an additional pass of
231: instruction scheduling after register allocation has been done.
232: This is especially useful on machines with a relatively small
233: number of registers and where memory load instructions take more
234: than one cycle.
235:
236: `-fcaller-saves'
237: Enable values to be allocated in registers that will be clobbered
238: by function calls, by emitting extra instructions to save and
239: restore the registers around such calls. Such allocation is done
240: only when it seems to result in better code than would otherwise
241: be produced.
242:
243: This option is enabled by default on certain machines, usually
244: those which have no call-preserved registers to use instead.
245:
246: `-funroll-loops'
247: Perform the optimization of loop unrolling. This is only done for
248: loops whose number of iterations can be determined at compile time
249: or run time. `-funroll-loop' implies both `-fstrength-reduce' and
250: `-frerun-cse-after-loop'.
251:
252: `-funroll-all-loops'
253: Perform the optimization of loop unrolling. This is done for all
254: loops and usually makes programs run more slowly.
255: `-funroll-all-loops' implies `-fstrength-reduce' as well as
256: `-frerun-cse-after-loop'.
257:
258: `-fno-peephole'
259: Disable any machine-specific peephole optimizations.
260:
261:
262: File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC
263:
264: Options Controlling the Preprocessor
265: ====================================
266:
267: These options control the C preprocessor, which is run on each C
268: source file before actual compilation.
269:
270: If you use the `-E' option, nothing is done except preprocessing.
271: Some of these options make sense only together with `-E' because they
272: cause the preprocessor output to be unsuitable for actual compilation.
273:
274: `-include FILE'
275: Process FILE as input before processing the regular input file.
276: In effect, the contents of FILE are compiled first. Any `-D' and
277: `-U' options on the command line are always processed before
278: `-include FILE', regardless of the order in which they are
279: written. All the `-include' and `-imacros' options are processed
280: in the order in which they are written.
281:
282: `-imacros FILE'
283: Process FILE as input, discarding the resulting output, before
284: processing the regular input file. Because the output generated
285: from FILE is discarded, the only effect of `-imacros FILE' is to
286: make the macros defined in FILE available for use in the main
287: input.
288:
289: Any `-D' and `-U' options on the command line are always processed
290: before `-imacros FILE', regardless of the order in which they are
291: written. All the `-include' and `-imacros' options are processed
292: in the order in which they are written.
293:
294: `-idirafter DIR'
295: Add the directory DIR to the second include path. The directories
296: on the second include path are searched when a header file is not
297: found in any of the directories in the main include path (the one
298: that `-I' adds to).
299:
300: `-iprefix PREFIX'
301: Specify PREFIX as the prefix for subsequent `-iwithprefix' options.
302:
303: `-iwithprefix DIR'
304: Add a directory to the second include path. The directory's name
305: is made by concatenating PREFIX and DIR, where PREFIX was
306: specified previously with `-iprefix'. If you have not specified a
307: prefix yet, the directory containing the installed passes of the
308: compiler is used as the default.
309:
310: `-iwithprefixbefore DIR'
311: Add a directory to the main include path. The directory's name is
312: made by concatenating PREFIX and DIR, as in the case of
313: `-iwithprefix'.
314:
315: `-nostdinc'
316: Do not search the standard system directories for header files.
317: Only the directories you have specified with `-I' options (and the
318: current directory, if appropriate) are searched. *Note Directory
319: Options::, for information on `-I'.
320:
321: By using both `-nostdinc' and `-I-', you can limit the include-file
322: search path to only those directories you specify explicitly.
323:
324: `-undef'
325: Do not predefine any nonstandard macros. (Including architecture
326: flags).
327:
328: `-E'
329: Run only the C preprocessor. Preprocess all the C source files
330: specified and output the results to standard output or to the
331: specified output file.
332:
333: `-C'
334: Tell the preprocessor not to discard comments. Used with the `-E'
335: option.
336:
337: `-P'
338: Tell the preprocessor not to generate `#line' commands. Used with
339: the `-E' option.
340:
341: `-M'
342: Tell the preprocessor to output a rule suitable for `make'
343: describing the dependencies of each object file. For each source
344: file, the preprocessor outputs one `make'-rule whose target is the
345: object file name for that source file and whose dependencies are
346: all the `#include' header files it uses. This rule may be a
347: single line or may be continued with `\'-newline if it is long.
348: The list of rules is printed on standard output instead of the
349: preprocessed C program.
350:
351: `-M' implies `-E'.
352:
353: Another way to specify output of a `make' rule is by setting the
354: environment variable `DEPENDENCIES_OUTPUT' (*note Environment
355: Variables::.).
356:
357: `-MM'
358: Like `-M' but the output mentions only the user header files
359: included with `#include "FILE"'. System header files included
360: with `#include <FILE>' are omitted.
361:
362: `-MD'
363: Like `-M' but the dependency information is written to files with
364: names made by replacing `.o' with `.d' at the end of the output
365: file names. This is in addition to compiling the input files as
366: specified--`-MD' does not inhibit ordinary compilation the way
367: `-M' does.
368:
369: The Mach utility `md' can be used to merge the `.d' files into a
370: single dependency file suitable for using with the `make' command.
371:
372: `-MMD'
373: Like `-MD' except mention only user header files, not system
374: header files.
375:
376: `-H'
377: Print the name of each header file used, in addition to other
378: normal activities.
379:
380: `-AQUESTION(ANSWER)'
381: Assert the answer ANSWER for QUESTION, in case it is tested with a
382: preprocessor conditional such as `#if #QUESTION(ANSWER)'. `-A-'
383: disables the standard assertions that normally describe the target
384: machine.
385:
386: `-DMACRO'
387: Define macro MACRO with the string `1' as its definition.
388:
389: `-DMACRO=DEFN'
390: Define macro MACRO as DEFN. All instances of `-D' on the command
391: line are processed before any `-U' options.
392:
393: `-UMACRO'
394: Undefine macro MACRO. `-U' options are evaluated after all `-D'
395: options, but before any `-include' and `-imacros' options.
396:
397: `-dM'
398: Tell the preprocessor to output only a list of the macro
399: definitions that are in effect at the end of preprocessing. Used
400: with the `-E' option.
401:
402: `-dD'
403: Tell the preprocessing to pass all macro definitions into the
404: output, in their proper sequence in the rest of the output.
405:
406: `-dN'
407: Like `-dD' except that the macro arguments and contents are
408: omitted. Only `#define NAME' is included in the output.
409:
410: `-trigraphs'
411: Support ANSI C trigraphs. You don't want to know about this
412: brain-damage. The `-ansi' option also has this effect.
413:
414:
415: File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC
416:
417: Passing Options to the Assembler
418: ================================
419:
420: `-Wa,OPTION'
421: Pass OPTION as an option to the assembler. If OPTION contains
422: commas, it is split into multiple options at the commas.
423:
424:
425: File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC
426:
427: Options for Linking
428: ===================
429:
430: These options come into play when the compiler links object files
431: into an executable output file. They are meaningless if the compiler is
432: not doing a link step.
433:
434: `OBJECT-FILE-NAME'
435: A file name that does not end in a special recognized suffix is
436: considered to name an object file or library. (Object files are
437: distinguished from libraries by the linker according to the file
438: contents.) If linking is done, these object files are used as
439: input to the linker.
440:
441: `-c'
442: `-S'
443: `-E'
444: If any of these options is used, then the linker is not run, and
445: object file names should not be used as arguments. *Note Overall
446: Options::.
447:
448: `-lLIBRARY'
449: Search the library named LIBRARY when linking.
450:
451: It makes a difference where in the command you write this option;
452: the linker searches processes libraries and object files in the
453: order they are specified. Thus, `foo.o -lz bar.o' searches
454: library `z' after file `foo.o' but before `bar.o'. If `bar.o'
455: refers to functions in `z', those functions may not be loaded.
456:
457: The linker searches a standard list of directories for the library,
458: which is actually a file named `libLIBRARY.a'. The linker then
459: uses this file as if it had been specified precisely by name.
460:
461: The directories searched include several standard system
462: directories plus any that you specify with `-L'.
463:
464: Normally the files found this way are library files--archive files
465: whose members are object files. The linker handles an archive
466: file by scanning through it for members which define symbols that
467: have so far been referenced but not defined. But if the file that
468: is found is an ordinary object file, it is linked in the usual
469: fashion. The only difference between using an `-l' option and
470: specifying a file name is that `-l' surrounds LIBRARY with `lib'
471: and `.a' and searches several directories.
472:
473: `-lobjc'
474: You need this special case of the `-l' option in order to link an
475: Objective C program.
476:
477: `-nostartfiles'
478: Do not use the standard system startup files when linking. The
479: standard libraries are used normally.
480:
481: `-nostdlib'
482: Don't use the standard system libraries and startup files when
483: linking. Only the files you specify will be passed to the linker.
484:
485: `-static'
486: On systems that support dynamic linking, this prevents linking
487: with the shared libraries. On other systems, this option has no
488: effect.
489:
490: `-shared'
491: Produce a shared object which can then be linked with other
492: objects to form an executable. Only a few systems support this
493: option.
494:
495: `-symbolic'
496: Bind references to global symbols when building a shared object.
497: Warn about any unresolved references (unless overridden by the
498: link editor option `-Xlinker -z -Xlinker defs'). Only a few
499: systems support this option.
500:
501: `-Xlinker OPTION'
502: Pass OPTION as an option to the linker. You can use this to
503: supply system-specific linker options which GNU CC does not know
504: how to recognize.
505:
506: If you want to pass an option that takes an argument, you must use
507: `-Xlinker' twice, once for the option and once for the argument.
508: For example, to pass `-assert definitions', you must write
509: `-Xlinker -assert -Xlinker definitions'. It does not work to write
510: `-Xlinker "-assert definitions"', because this passes the entire
511: string as a single argument, which is not what the linker expects.
512:
513: `-Wl,OPTION'
514: Pass OPTION as an option to the linker. If OPTION contains
515: commas, it is split into multiple options at the commas.
516:
517: `-u SYMBOL'
518: Pretend the symbol SYMBOL is undefined, to force linking of
519: library modules to define it. You can use `-u' multiple times with
520: different symbols to force loading of additional library modules.
521:
522:
523: File: gcc.info, Node: Directory Options, Next: Target Options, Prev: Link Options, Up: Invoking GCC
524:
525: Options for Directory Search
526: ============================
527:
528: These options specify directories to search for header files, for
529: libraries and for parts of the compiler:
530:
531: `-IDIR'
532: Append directory DIR to the list of directories searched for
533: include files.
534:
535: `-I-'
536: Any directories you specify with `-I' options before the `-I-'
537: option are searched only for the case of `#include "FILE"'; they
538: are not searched for `#include <FILE>'.
539:
540: If additional directories are specified with `-I' options after
541: the `-I-', these directories are searched for all `#include'
542: directives. (Ordinarily *all* `-I' directories are used this way.)
543:
544: In addition, the `-I-' option inhibits the use of the current
545: directory (where the current input file came from) as the first
546: search directory for `#include "FILE"'. There is no way to
547: override this effect of `-I-'. With `-I.' you can specify
548: searching the directory which was current when the compiler was
549: invoked. That is not exactly the same as what the preprocessor
550: does by default, but it is often satisfactory.
551:
552: `-I-' does not inhibit the use of the standard system directories
553: for header files. Thus, `-I-' and `-nostdinc' are independent.
554:
555: `-LDIR'
556: Add directory DIR to the list of directories to be searched for
557: `-l'.
558:
559: `-BPREFIX'
560: This option specifies where to find the executables, libraries and
561: data files of the compiler itself.
562:
563: The compiler driver program runs one or more of the subprograms
564: `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each
565: program it tries to run, both with and without `MACHINE/VERSION/'
566: (*note Target Options::.).
567:
568: For each subprogram to be run, the compiler driver first tries the
569: `-B' prefix, if any. If that name is not found, or if `-B' was
570: not specified, the driver tries two standard prefixes, which are
571: `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'. If neither of
572: those results in a file name that is found, the unmodified program
573: name is searched for using the directories specified in your
574: `PATH' environment variable.
575:
576: `-B' prefixes that effectively specify directory names also apply
577: to libraries in the linker, because the compiler translates these
578: options into `-L' options for the linker.
579:
580: The run-time support file `libgcc.a' can also be searched for using
581: the `-B' prefix, if needed. If it is not found there, the two
582: standard prefixes above are tried, and that is all. The file is
583: left out of the link if it is not found by those means.
584:
585: Another way to specify a prefix much like the `-B' prefix is to use
586: the environment variable `GCC_EXEC_PREFIX'. *Note Environment
587: Variables::.
588:
589:
590: File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Directory Options, Up: Invoking GCC
591:
592: Specifying Target Machine and Compiler Version
593: ==============================================
594:
595: By default, GNU CC compiles code for the same type of machine that
596: you are using. However, it can also be installed as a cross-compiler,
597: to compile for some other type of machine. In fact, several different
598: configurations of GNU CC, for different target machines, can be
599: installed side by side. Then you specify which one to use with the
600: `-b' option.
601:
602: In addition, older and newer versions of GNU CC can be installed side
603: by side. One of them (probably the newest) will be the default, but
604: you may sometimes wish to use another.
605:
606: `-b MACHINE'
607: The argument MACHINE specifies the target machine for compilation.
608: This is useful when you have installed GNU CC as a cross-compiler.
609:
610: The value to use for MACHINE is the same as was specified as the
611: machine type when configuring GNU CC as a cross-compiler. For
612: example, if a cross-compiler was configured with `configure
613: i386v', meaning to compile for an 80386 running System V, then you
614: would specify `-b i386v' to run that cross compiler.
615:
616: When you do not specify `-b', it normally means to compile for the
617: same type of machine that you are using.
618:
619: `-V VERSION'
620: The argument VERSION specifies which version of GNU CC to run.
621: This is useful when multiple versions are installed. For example,
622: VERSION might be `2.0', meaning to run GNU CC version 2.0.
623:
624: The default version, when you do not specify `-V', is controlled
625: by the way GNU CC is installed. Normally, it will be a version
626: that is recommended for general use.
627:
628: The `-b' and `-V' options actually work by controlling part of the
629: file name used for the executable files and libraries used for
630: compilation. A given version of GNU CC, for a given target machine, is
631: normally kept in the directory `/usr/local/lib/gcc-lib/MACHINE/VERSION'.
632:
633: Thus, sites can customize the effect of `-b' or `-V' either by
634: changing the names of these directories or adding alternate names (or
635: symbolic links). If in directory `/usr/local/lib/gcc-lib/' the file
636: `80386' is a link to the file `i386v', then `-b 80386' becomes an alias
637: for `-b i386v'.
638:
639: In one respect, the `-b' or `-V' do not completely change to a
640: different compiler: the top-level driver program `gcc' that you
641: originally invoked continues to run and invoke the other executables
642: (preprocessor, compiler per se, assembler and linker) that do the real
643: work. However, since no real work is done in the driver program, it
644: usually does not matter that the driver program in use is not the one
645: for the specified target and version.
646:
647: The only way that the driver program depends on the target machine is
648: in the parsing and handling of special machine-specific options.
649: However, this is controlled by a file which is found, along with the
650: other executables, in the directory for the specified version and
651: target machine. As a result, a single installed driver program adapts
652: to any specified target machine and compiler version.
653:
654: The driver program executable does control one significant thing,
655: however: the default version and target machine. Therefore, you can
656: install different instances of the driver program, compiled for
657: different targets or versions, under different names.
658:
659: For example, if the driver for version 2.0 is installed as `ogcc'
660: and that for version 2.1 is installed as `gcc', then the command `gcc'
661: will use version 2.1 by default, while `ogcc' will use 2.0 by default.
662: However, you can choose either version with either command with the
663: `-V' option.
664:
665:
666: File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC
667:
668: Hardware Models and Configurations
669: ==================================
670:
671: Earlier we discussed the standard option `-b' which chooses among
672: different installed compilers for completely different target machines,
673: such as Vax vs. 68000 vs. 80386.
674:
675: In addition, each of these target machine types can have its own
676: special options, starting with `-m', to choose among various hardware
677: models or configurations--for example, 68010 vs 68020, floating
678: coprocessor or none. A single installed version of the compiler can
679: compile for any model or configuration, according to the options
680: specified.
681:
682: Some configurations of the compiler also support additional special
683: options, usually for compatibility with other compilers on the same
684: platform.
685:
686: These options are defined by the macro `TARGET_SWITCHES' in the
687: machine description. The default for the options is also defined by
688: that macro, which enables you to change the defaults.
689:
690: * Menu:
691:
692: * M680x0 Options::
693: * VAX Options::
694: * SPARC Options::
695: * Convex Options::
696: * AMD29K Options::
697: * M88K Options::
698: * RS/6000 and PowerPC Options::
699: * RT Options::
700: * MIPS Options::
701: * i386 Options::
702: * HPPA Options::
703: * Intel 960 Options::
704: * DEC Alpha Options::
705: * Clipper Options::
706: * System V Options::
707:
708:
709: File: gcc.info, Node: M680x0 Options, Next: VAX Options, Up: Submodel Options
710:
711: M680x0 Options
712: --------------
713:
714: These are the `-m' options defined for the 68000 series. The default
715: values for these options depends on which style of 68000 was selected
716: when the compiler was configured; the defaults for the most common
717: choices are given below.
718:
719: `-m68000'
720: `-mc68000'
721: Generate output for a 68000. This is the default when the
722: compiler is configured for 68000-based systems.
723:
724: `-m68020'
725: `-mc68020'
726: Generate output for a 68020. This is the default when the
727: compiler is configured for 68020-based systems.
728:
729: `-m68881'
730: Generate output containing 68881 instructions for floating point.
731: This is the default for most 68020 systems unless `-nfp' was
732: specified when the compiler was configured.
733:
734: `-m68030'
735: Generate output for a 68030. This is the default when the
736: compiler is configured for 68030-based systems.
737:
738: `-m68040'
739: Generate output for a 68040. This is the default when the
740: compiler is configured for 68040-based systems.
741:
742: This option inhibits the use of 68881/68882 instructions that have
743: to be emulated by software on the 68040. If your 68040 does not
744: have code to emulate those instructions, use `-m68040'.
745:
746: `-m68020-40'
747: Generate output for a 68040, without using any of the new
748: instructions. This results in code which can run relatively
749: efficiently on either a 68020/68881 or a 68030 or a 68040. The
750: generated code does use the 68881 instructions that are emulated
751: on the 68040.
752:
753: `-mfpa'
754: Generate output containing Sun FPA instructions for floating point.
755:
756: `-msoft-float'
757: Generate output containing library calls for floating point.
758: *Warning:* the requisite libraries are not part of GNU CC.
759: Normally the facilities of the machine's usual C compiler are
760: used, but this can't be done directly in cross-compilation. You
761: must make your own arrangements to provide suitable library
762: functions for cross-compilation.
763:
764: `-mshort'
765: Consider type `int' to be 16 bits wide, like `short int'.
766:
767: `-mnobitfield'
768: Do not use the bit-field instructions. The `-m68000' option
769: implies `-mnobitfield'.
770:
771: `-mbitfield'
772: Do use the bit-field instructions. The `-m68020' option implies
773: `-mbitfield'. This is the default if you use a configuration
774: designed for a 68020.
775:
776: `-mrtd'
777: Use a different function-calling convention, in which functions
778: that take a fixed number of arguments return with the `rtd'
779: instruction, which pops their arguments while returning. This
780: saves one instruction in the caller since there is no need to pop
781: the arguments there.
782:
783: This calling convention is incompatible with the one normally used
784: on Unix, so you cannot use it if you need to call libraries
785: compiled with the Unix compiler.
786:
787: Also, you must provide function prototypes for all functions that
788: take variable numbers of arguments (including `printf'); otherwise
789: incorrect code will be generated for calls to those functions.
790:
791: In addition, seriously incorrect code will result if you call a
792: function with too many arguments. (Normally, extra arguments are
793: harmlessly ignored.)
794:
795: The `rtd' instruction is supported by the 68010 and 68020
796: processors, but not by the 68000.
797:
798:
799: File: gcc.info, Node: VAX Options, Next: SPARC Options, Prev: M680x0 Options, Up: Submodel Options
800:
801: VAX Options
802: -----------
803:
804: These `-m' options are defined for the Vax:
805:
806: `-munix'
807: Do not output certain jump instructions (`aobleq' and so on) that
808: the Unix assembler for the Vax cannot handle across long ranges.
809:
810: `-mgnu'
811: Do output those jump instructions, on the assumption that you will
812: assemble with the GNU assembler.
813:
814: `-mg'
815: Output code for g-format floating point numbers instead of
816: d-format.
817:
818:
819: File: gcc.info, Node: SPARC Options, Next: Convex Options, Prev: VAX Options, Up: Submodel Options
820:
821: SPARC Options
822: -------------
823:
824: These `-m' switches are supported on the SPARC:
825:
826: `-mfpu'
827: `-mhard-float'
828: Generate output containing floating point instructions. This is
829: the default.
830:
831: `-mno-fpu'
832: `-msoft-float'
833: Generate output containing library calls for floating point.
834: *Warning:* there is no GNU floating-point library for SPARC.
835: Normally the facilities of the machine's usual C compiler are
836: used, but this cannot be done directly in cross-compilation. You
837: must make your own arrangements to provide suitable library
838: functions for cross-compilation.
839:
840: `-msoft-float' changes the calling convention in the output file;
841: therefore, it is only useful if you compile *all* of a program with
842: this option. In particular, you need to compile `libgcc.a', the
843: library that comes with GNU CC, with `-msoft-float' in order for
844: this to work.
845:
846: `-mno-epilogue'
847: `-mepilogue'
848: With `-mepilogue' (the default), the compiler always emits code for
849: function exit at the end of each function. Any function exit in
850: the middle of the function (such as a return statement in C) will
851: generate a jump to the exit code at the end of the function.
852:
853: With `-mno-epilogue', the compiler tries to emit exit code inline
854: at every function exit.
855:
856: `-mv8'
857: `-msparclite'
858: These two options select variations on the SPARC architecture.
859:
860: By default (unless specifically configured for the Fujitsu
861: SPARClite), GCC generates code for the v7 variant of the SPARC
862: architecture.
863:
864: `-mv8' will give you SPARC v8 code. The only difference from v7
865: code is that the compiler emits the integer multiply and integer
866: divide instructions which exist in SPARC v8 but not in SPARC v7.
867:
868: `-msparclite' will give you SPARClite code. This adds the integer
869: multiply, integer divide step and scan (`ffs') instructions which
870: exist in SPARClite but not in SPARC v7.
871:
872:
873: File: gcc.info, Node: Convex Options, Next: AMD29K Options, Prev: SPARC Options, Up: Submodel Options
874:
875: Convex Options
876: --------------
877:
878: These `-m' options are defined for Convex:
879:
880: `-mc1'
881: Generate output for C1. The code will run on any Convex machine.
882: The preprocessor symbol `__convex__c1__' is defined.
883:
884: `-mc2'
885: Generate output for C2. Uses instructions not available on C1.
886: Scheduling and other optimizations are chosen for max performance
887: on C2. The preprocessor symbol `__convex_c2__' is defined.
888:
889: `-mc32'
890: Generate output for C32xx. Uses instructions not available on C1.
891: Scheduling and other optimizations are chosen for max performance
892: on C32. The preprocessor symbol `__convex_c32__' is defined.
893:
894: `-mc34'
895: Generate output for C34xx. Uses instructions not available on C1.
896: Scheduling and other optimizations are chosen for max performance
897: on C34. The preprocessor symbol `__convex_c34__' is defined.
898:
899: `-mc38'
900: Generate output for C38xx. Uses instructions not available on C1.
901: Scheduling and other optimizations are chosen for max performance
902: on C38. The preprocessor symbol `__convex_c38__' is defined.
903:
904: `-margcount'
905: Generate code which puts an argument count in the word preceding
906: each argument list. This is compatible with regular CC, and a few
907: programs may need the argument count word. GDB and other
908: source-level debuggers do not need it; this info is in the symbol
909: table.
910:
911: `-mnoargcount'
912: Omit the argument count word. This is the default.
913:
914: `-mvolatile-cache'
915: Allow volatile references to be cached. This is the default.
916:
917: `-mvolatile-nocache'
918: Volatile references bypass the data cache, going all the way to
919: memory. This is only needed for multi-processor code that does
920: not use standard synchronization instructions. Making
921: non-volatile references to volatile locations will not necessarily
922: work.
923:
924: `-mlong32'
925: Type long is 32 bits, the same as type int. This is the default.
926:
927: `-mlong64'
928: Type long is 64 bits, the same as type long long. This option is
929: useless, because no library support exists for it.
930:
931:
932: File: gcc.info, Node: AMD29K Options, Next: M88K Options, Prev: Convex Options, Up: Submodel Options
933:
934: AMD29K Options
935: --------------
936:
937: These `-m' options are defined for the AMD Am29000:
938:
939: `-mdw'
940: Generate code that assumes the `DW' bit is set, i.e., that byte and
941: halfword operations are directly supported by the hardware. This
942: is the default.
943:
944: `-mnodw'
945: Generate code that assumes the `DW' bit is not set.
946:
947: `-mbw'
948: Generate code that assumes the system supports byte and halfword
949: write operations. This is the default.
950:
951: `-mnbw'
952: Generate code that assumes the systems does not support byte and
953: halfword write operations. `-mnbw' implies `-mnodw'.
954:
955: `-msmall'
956: Use a small memory model that assumes that all function addresses
957: are either within a single 256 KB segment or at an absolute
958: address of less than 256k. This allows the `call' instruction to
959: be used instead of a `const', `consth', `calli' sequence.
960:
961: `-mnormal'
962: Use the normal memory model: Generate `call' instructions only when
963: calling functions in the same file and `calli' instructions
964: otherwise. This works if each file occupies less than 256 KB but
965: allows the entire executable to be larger than 256 KB. This is
966: the default.
967:
968: `-mlarge'
969: Always use `calli' instructions. Specify this option if you expect
970: a single file to compile into more than 256 KB of code.
971:
972: `-m29050'
973: Generate code for the Am29050.
974:
975: `-m29000'
976: Generate code for the Am29000. This is the default.
977:
978: `-mkernel-registers'
979: Generate references to registers `gr64-gr95' instead of to
980: registers `gr96-gr127'. This option can be used when compiling
981: kernel code that wants a set of global registers disjoint from
982: that used by user-mode code.
983:
984: Note that when this option is used, register names in `-f' flags
985: must use the normal, user-mode, names.
986:
987: `-muser-registers'
988: Use the normal set of global registers, `gr96-gr127'. This is the
989: default.
990:
991: `-mstack-check'
992: Insert a call to `__msp_check' after each stack adjustment. This
993: is often used for kernel code.
994:
995:
996: File: gcc.info, Node: M88K Options, Next: RS/6000 and PowerPC Options, Prev: AMD29K Options, Up: Submodel Options
997:
998: M88K Options
999: ------------
1000:
1001: These `-m' options are defined for Motorola 88k architectures:
1002:
1003: `-m88000'
1004: Generate code that works well on both the m88100 and the m88110.
1005:
1006: `-m88100'
1007: Generate code that works best for the m88100, but that also runs
1008: on the m88110.
1009:
1010: `-m88110'
1011: Generate code that works best for the m88110, and may not run on
1012: the m88100.
1013:
1014: `-mbig-pic'
1015: Obsolete option to be removed from the next revision. Use `-fPIC'.
1016:
1017: `-midentify-revision'
1018: Include an `ident' directive in the assembler output recording the
1019: source file name, compiler name and version, timestamp, and
1020: compilation flags used.
1021:
1022: `-mno-underscores'
1023: In assembler output, emit symbol names without adding an underscore
1024: character at the beginning of each name. The default is to use an
1025: underscore as prefix on each name.
1026:
1027: `-mocs-debug-info'
1028: `-mno-ocs-debug-info'
1029: Include (or omit) additional debugging information (about
1030: registers used in each stack frame) as specified in the 88open
1031: Object Compatibility Standard, "OCS". This extra information
1032: allows debugging of code that has had the frame pointer
1033: eliminated. The default for DG/UX, SVr4, and Delta 88 SVr3.2 is
1034: to include this information; other 88k configurations omit this
1035: information by default.
1036:
1037: `-mocs-frame-position'
1038: When emitting COFF debugging information for automatic variables
1039: and parameters stored on the stack, use the offset from the
1040: canonical frame address, which is the stack pointer (register 31)
1041: on entry to the function. The DG/UX, SVr4, Delta88 SVr3.2, and
1042: BCS configurations use `-mocs-frame-position'; other 88k
1043: configurations have the default `-mno-ocs-frame-position'.
1044:
1045: `-mno-ocs-frame-position'
1046: When emitting COFF debugging information for automatic variables
1047: and parameters stored on the stack, use the offset from the frame
1048: pointer register (register 30). When this option is in effect,
1049: the frame pointer is not eliminated when debugging information is
1050: selected by the -g switch.
1051:
1052: `-moptimize-arg-area'
1053: `-mno-optimize-arg-area'
1054: Control how function arguments are stored in stack frames.
1055: `-moptimize-arg-area' saves space by optimizing them, but this
1056: conflicts with the 88open specifications. The opposite
1057: alternative, `-mno-optimize-arg-area', agrees with 88open
1058: standards. By default GNU CC does not optimize the argument area.
1059:
1060: `-mshort-data-NUM'
1061: Generate smaller data references by making them relative to `r0',
1062: which allows loading a value using a single instruction (rather
1063: than the usual two). You control which data references are
1064: affected by specifying NUM with this option. For example, if you
1065: specify `-mshort-data-512', then the data references affected are
1066: those involving displacements of less than 512 bytes.
1067: `-mshort-data-NUM' is not effective for NUM greater than 64k.
1068:
1069: `-mserialize-volatile'
1070: `-mno-serialize-volatile'
1071: Do, or do not, generate code to guarantee sequential consistency of
1072: volatile memory references.
1073:
1074: GNU CC always guarantees consistency by default.
1075:
1076: The order of memory references made by the m88110 processor does
1077: not always match the order of the instructions requesting those
1078: references. In particular, a load instruction may execute before
1079: a preceding store instruction. Such reordering violates
1080: sequential consistency of volatile memory references, when there
1081: are multiple processors.
1082:
1083: The extra code generated to guarantee consistency may affect the
1084: performance of your application. If you know that you can safely
1085: forgo this guarantee, you may use the option
1086: `-mno-serialize-volatile'.
1087:
1088: `-msvr4'
1089: `-msvr3'
1090: Turn on (`-msvr4') or off (`-msvr3') compiler extensions related
1091: to System V release 4 (SVr4). This controls the following:
1092:
1093: 1. Which variant of the assembler syntax to emit (which you can
1094: select independently using `-mversion-03.00').
1095:
1096: 2. `-msvr4' makes the C preprocessor recognize `#pragma weak'
1097: that is used on System V release 4.
1098:
1099: 3. `-msvr4' makes GNU CC issue additional declaration directives
1100: used in SVr4.
1101:
1102: `-msvr3' is the default for all m88k configurations except the
1103: SVr4 configuration.
1104:
1105: `-mversion-03.00'
1106: In the DG/UX configuration, there are two flavors of SVr4. This
1107: option modifies `-msvr4' to select whether the hybrid-COFF or
1108: real-ELF flavor is used. All other configurations ignore this
1109: option.
1110:
1111: `-mno-check-zero-division'
1112: `-mcheck-zero-division'
1113: Early models of the 88k architecture had problems with division by
1114: zero; in particular, many of them didn't trap. Use these options
1115: to avoid including (or to include explicitly) additional code to
1116: detect division by zero and signal an exception. All GNU CC
1117: configurations for the 88k use `-mcheck-zero-division' by default.
1118:
1119: `-muse-div-instruction'
1120: Do not emit code to check both the divisor and dividend when doing
1121: signed integer division to see if either is negative, and adjust
1122: the signs so the divide is done using non-negative numbers.
1123: Instead, rely on the operating system to calculate the correct
1124: value when the `div' instruction traps. This results in different
1125: behavior when the most negative number is divided by -1, but is
1126: useful when most or all signed integer divisions are done with
1127: positive numbers.
1128:
1129: `-mtrap-large-shift'
1130: `-mhandle-large-shift'
1131: Include code to detect bit-shifts of more than 31 bits;
1132: respectively, trap such shifts or emit code to handle them
1133: properly. By default GNU CC makes no special provision for large
1134: bit shifts.
1135:
1136: `-mwarn-passed-structs'
1137: Warn when a function passes a struct as an argument or result.
1138: Structure-passing conventions have changed during the evolution of
1139: the C language, and are often the source of portability problems.
1140: By default, GNU CC issues no such warning.
1141:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.