+++ /dev/null
-This is doc/gcc.info, produced by makeinfo version 4.5 from
-doc/gcc.texi.
-
-INFO-DIR-SECTION Programming
-START-INFO-DIR-ENTRY
-* gcc: (gcc). The GNU Compiler Collection.
-END-INFO-DIR-ENTRY
- This file documents the use of the GNU compilers.
-
- Published by the Free Software Foundation
-59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being "GNU General Public License" and "Funding Free
-Software", the Front-Cover texts being (a) (see below), and with the
-Back-Cover Texts being (b) (see below). A copy of the license is
-included in the section entitled "GNU Free Documentation License".
-
- (a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
- (b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
-software. Copies published by the Free Software Foundation raise
-funds for GNU development.
-
-\1f
-File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC
-
-Specifying subprocesses and the switches to pass to them
-========================================================
-
- `gcc' is a driver program. It performs its job by invoking a
-sequence of other programs to do the work of compiling, assembling and
-linking. GCC interprets its command-line parameters and uses these to
-deduce which programs it should invoke, and which command-line options
-it ought to place on their command lines. This behavior is controlled
-by "spec strings". In most cases there is one spec string for each
-program that GCC can invoke, but a few programs have multiple spec
-strings to control their behavior. The spec strings built into GCC can
-be overridden by using the `-specs=' command-line switch to specify a
-spec file.
-
- "Spec files" are plaintext files that are used to construct spec
-strings. They consist of a sequence of directives separated by blank
-lines. The type of directive is determined by the first non-whitespace
-character on the line and it can be one of the following:
-
-`%COMMAND'
- Issues a COMMAND to the spec file processor. The commands that can
- appear here are:
-
- `%include <FILE>'
- Search for FILE and insert its text at the current point in
- the specs file.
-
- `%include_noerr <FILE>'
- Just like `%include', but do not generate an error message if
- the include file cannot be found.
-
- `%rename OLD_NAME NEW_NAME'
- Rename the spec string OLD_NAME to NEW_NAME.
-
-
-`*[SPEC_NAME]:'
- This tells the compiler to create, override or delete the named
- spec string. All lines after this directive up to the next
- directive or blank line are considered to be the text for the spec
- string. If this results in an empty string then the spec will be
- deleted. (Or, if the spec did not exist, then nothing will
- happened.) Otherwise, if the spec does not currently exist a new
- spec will be created. If the spec does exist then its contents
- will be overridden by the text of this directive, unless the first
- character of that text is the `+' character, in which case the
- text will be appended to the spec.
-
-`[SUFFIX]:'
- Creates a new `[SUFFIX] spec' pair. All lines after this directive
- and up to the next directive or blank line are considered to make
- up the spec string for the indicated suffix. When the compiler
- encounters an input file with the named suffix, it will processes
- the spec string in order to work out how to compile that file.
- For example:
-
- .ZZ:
- z-compile -input %i
-
- This says that any input file whose name ends in `.ZZ' should be
- passed to the program `z-compile', which should be invoked with the
- command-line switch `-input' and with the result of performing the
- `%i' substitution. (See below.)
-
- As an alternative to providing a spec string, the text that
- follows a suffix directive can be one of the following:
-
- `@LANGUAGE'
- This says that the suffix is an alias for a known LANGUAGE.
- This is similar to using the `-x' command-line switch to GCC
- to specify a language explicitly. For example:
-
- .ZZ:
- @c++
-
- Says that .ZZ files are, in fact, C++ source files.
-
- `#NAME'
- This causes an error messages saying:
-
- NAME compiler not installed on this system.
-
- GCC already has an extensive list of suffixes built into it. This
- directive will add an entry to the end of the list of suffixes, but
- since the list is searched from the end backwards, it is
- effectively possible to override earlier entries using this
- technique.
-
-
- GCC has the following spec strings built into it. Spec files can
-override these strings or create their own. Note that individual
-targets can also add their own spec strings to this list.
-
- asm Options to pass to the assembler
- asm_final Options to pass to the assembler post-processor
- cpp Options to pass to the C preprocessor
- cc1 Options to pass to the C compiler
- cc1plus Options to pass to the C++ compiler
- endfile Object files to include at the end of the link
- link Options to pass to the linker
- lib Libraries to include on the command line to the linker
- libgcc Decides which GCC support library to pass to the linker
- linker Sets the name of the linker
- predefines Defines to be passed to the C preprocessor
- signed_char Defines to pass to CPP to say whether `char' is signed
- by default
- startfile Object files to include at the start of the link
-
- Here is a small example of a spec file:
-
- %rename lib old_lib
-
- *lib:
- --start-group -lgcc -lc -leval1 --end-group %(old_lib)
-
- This example renames the spec called `lib' to `old_lib' and then
-overrides the previous definition of `lib' with a new one. The new
-definition adds in some extra command-line options before including the
-text of the old definition.
-
- "Spec strings" are a list of command-line options to be passed to
-their corresponding program. In addition, the spec strings can contain
-`%'-prefixed sequences to substitute variable text or to conditionally
-insert text into the command line. Using these constructs it is
-possible to generate quite complex command lines.
-
- Here is a table of all defined `%'-sequences for spec strings. Note
-that spaces are not generated automatically around the results of
-expanding these sequences. Therefore you can concatenate them together
-or combine them with constant text in a single argument.
-
-`%%'
- Substitute one `%' into the program name or argument.
-
-`%i'
- Substitute the name of the input file being processed.
-
-`%b'
- Substitute the basename of the input file being processed. This
- is the substring up to (and not including) the last period and not
- including the directory.
-
-`%B'
- This is the same as `%b', but include the file suffix (text after
- the last period).
-
-`%d'
- Marks the argument containing or following the `%d' as a temporary
- file name, so that that file will be deleted if GCC exits
- successfully. Unlike `%g', this contributes no text to the
- argument.
-
-`%gSUFFIX'
- Substitute a file name that has suffix SUFFIX and is chosen once
- per compilation, and mark the argument in the same way as `%d'.
- To reduce exposure to denial-of-service attacks, the file name is
- now chosen in a way that is hard to predict even when previously
- chosen file names are known. For example, `%g.s ... %g.o ... %g.s'
- might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX
- matches the regexp `[.A-Za-z]*' or the special string `%O', which
- is treated exactly as if `%O' had been preprocessed. Previously,
- `%g' was simply substituted with a file name chosen once per
- compilation, without regard to any appended suffix (which was
- therefore treated just like ordinary text), making such attacks
- more likely to succeed.
-
-`%uSUFFIX'
- Like `%g', but generates a new temporary file name even if
- `%uSUFFIX' was already seen.
-
-`%USUFFIX'
- Substitutes the last file name generated with `%uSUFFIX',
- generating a new one if there is no such last file name. In the
- absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
- they don't share the same suffix _space_, so `%g.s ... %U.s ...
- %g.s ... %U.s' would involve the generation of two distinct file
- names, one for each `%g.s' and another for each `%U.s'.
- Previously, `%U' was simply substituted with a file name chosen
- for the previous `%u', without regard to any appended suffix.
-
-`%jSUFFIX'
- Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
- writable, and if save-temps is off; otherwise, substitute the name
- of a temporary file, just like `%u'. This temporary file is not
- meant for communication between processes, but rather as a junk
- disposal mechanism.
-
-`%.SUFFIX'
- Substitutes .SUFFIX for the suffixes of a matched switch's args
- when it is subsequently output with `%*'. SUFFIX is terminated by
- the next space or %.
-
-`%w'
- Marks the argument containing or following the `%w' as the
- designated output file of this compilation. This puts the argument
- into the sequence of arguments that `%o' will substitute later.
-
-`%o'
- Substitutes the names of all the output files, with spaces
- automatically placed around them. You should write spaces around
- the `%o' as well or the results are undefined. `%o' is for use in
- the specs for running the linker. Input files whose names have no
- recognized suffix are not compiled at all, but they are included
- among the output files, so they will be linked.
-
-`%O'
- Substitutes the suffix for object files. Note that this is
- handled specially when it immediately follows `%g, %u, or %U',
- because of the need for those to form complete file names. The
- handling is such that `%O' is treated exactly as if it had already
- been substituted, except that `%g, %u, and %U' do not currently
- support additional SUFFIX characters following `%O' as they would
- following, for example, `.o'.
-
-`%p'
- Substitutes the standard macro predefinitions for the current
- target machine. Use this when running `cpp'.
-
-`%P'
- Like `%p', but puts `__' before and after the name of each
- predefined macro, except for macros that start with `__' or with
- `_L', where L is an uppercase letter. This is for ISO C.
-
-`%I'
- Substitute a `-iprefix' option made from `GCC_EXEC_PREFIX'.
-
-`%s'
- Current argument is the name of a library or startup file of some
- sort. Search for that file in a standard list of directories and
- substitute the full name found.
-
-`%eSTR'
- Print STR as an error message. STR is terminated by a newline.
- Use this when inconsistent options are detected.
-
-`%|'
- Output `-' if the input for the current command is coming from a
- pipe.
-
-`%(NAME)'
- Substitute the contents of spec string NAME at this point.
-
-`%[NAME]'
- Like `%(...)' but put `__' around `-D' arguments.
-
-`%x{OPTION}'
- Accumulate an option for `%X'.
-
-`%X'
- Output the accumulated linker options specified by `-Wl' or a `%x'
- spec string.
-
-`%Y'
- Output the accumulated assembler options specified by `-Wa'.
-
-`%Z'
- Output the accumulated preprocessor options specified by `-Wp'.
-
-`%v1'
- Substitute the major version number of GCC. (For version 2.9.5,
- this is 2.)
-
-`%v2'
- Substitute the minor version number of GCC. (For version 2.9.5,
- this is 9.)
-
-`%v3'
- Substitute the patch level number of GCC. (For version 2.9.5,
- this is 5.)
-
-`%a'
- Process the `asm' spec. This is used to compute the switches to
- be passed to the assembler.
-
-`%A'
- Process the `asm_final' spec. This is a spec string for passing
- switches to an assembler post-processor, if such a program is
- needed.
-
-`%l'
- Process the `link' spec. This is the spec for computing the
- command line passed to the linker. Typically it will make use of
- the `%L %G %S %D and %E' sequences.
-
-`%D'
- Dump out a `-L' option for each directory that GCC believes might
- contain startup files. If the target supports multilibs then the
- current multilib directory will be prepended to each of these
- paths.
-
-`%M'
- Output the multilib directory with directory separators replaced
- with `_'. If multilib directories are not set, or the multilib
- directory is `.' then this option emits nothing.
-
-`%L'
- Process the `lib' spec. This is a spec string for deciding which
- libraries should be included on the command line to the linker.
-
-`%G'
- Process the `libgcc' spec. This is a spec string for deciding
- which GCC support library should be included on the command line
- to the linker.
-
-`%S'
- Process the `startfile' spec. This is a spec for deciding which
- object files should be the first ones passed to the linker.
- Typically this might be a file named `crt0.o'.
-
-`%E'
- Process the `endfile' spec. This is a spec string that specifies
- the last object files that will be passed to the linker.
-
-`%C'
- Process the `cpp' spec. This is used to construct the arguments
- to be passed to the C preprocessor.
-
-`%c'
- Process the `signed_char' spec. This is intended to be used to
- tell cpp whether a char is signed. It typically has the
- definition:
- %{funsigned-char:-D__CHAR_UNSIGNED__}
-
-`%1'
- Process the `cc1' spec. This is used to construct the options to
- be passed to the actual C compiler (`cc1').
-
-`%2'
- Process the `cc1plus' spec. This is used to construct the options
- to be passed to the actual C++ compiler (`cc1plus').
-
-`%*'
- Substitute the variable part of a matched option. See below.
- Note that each comma in the substituted string is replaced by a
- single space.
-
-`%{`S'}'
- Substitutes the `-S' switch, if that switch was given to GCC. If
- that switch was not specified, this substitutes nothing. Note that
- the leading dash is omitted when specifying this option, and it is
- automatically inserted if the substitution is performed. Thus the
- spec string `%{foo}' would match the command-line option `-foo'
- and would output the command line option `-foo'.
-
-`%W{`S'}'
- Like %{`S'} but mark last argument supplied within as a file to be
- deleted on failure.
-
-`%{`S'*}'
- Substitutes all the switches specified to GCC whose names start
- with `-S', but which also take an argument. This is used for
- switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as
- being one switch whose names starts with `o'. %{o*} would
- substitute this text, including the space. Thus two arguments
- would be generated.
-
-`%{^`S'*}'
- Like %{`S'*}, but don't put a blank between a switch and its
- argument. Thus %{^o*} would only generate one argument, not two.
-
-`%{`S'*&`T'*}'
- Like %{`S'*}, but preserve order of `S' and `T' options (the order
- of `S' and `T' in the spec is not significant). There can be any
- number of ampersand-separated variables; for each the wild card is
- optional. Useful for CPP as `%{D*&U*&A*}'.
-
-`%{<`S'}'
- Remove all occurrences of `-S' from the command line. Note--this
- command is position dependent. `%' commands in the spec string
- before this option will see `-S', `%' commands in the spec string
- after this option will not.
-
-`%{`S'*:`X'}'
- Substitutes `X' if one or more switches whose names start with
- `-S' are specified to GCC. Note that the tail part of the `-S'
- option (i.e. the part matched by the `*') will be substituted for
- each occurrence of `%*' within `X'.
-
-`%{`S':`X'}'
- Substitutes `X', but only if the `-S' switch was given to GCC.
-
-`%{!`S':`X'}'
- Substitutes `X', but only if the `-S' switch was _not_ given to
- GCC.
-
-`%{|`S':`X'}'
- Like %{`S':`X'}, but if no `S' switch, substitute `-'.
-
-`%{|!`S':`X'}'
- Like %{!`S':`X'}, but if there is an `S' switch, substitute `-'.
-
-`%{.`S':`X'}'
- Substitutes `X', but only if processing a file with suffix `S'.
-
-`%{!.`S':`X'}'
- Substitutes `X', but only if _not_ processing a file with suffix
- `S'.
-
-`%{`S'|`P':`X'}'
- Substitutes `X' if either `-S' or `-P' was given to GCC. This may
- be combined with `!' and `.' sequences as well, although they have
- a stronger binding than the `|'. For example a spec string like
- this:
-
- %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
-
- will output the following command-line options from the following
- input command-line options:
-
- fred.c -foo -baz
- jim.d -bar -boggle
- -d fred.c -foo -baz -boggle
- -d jim.d -bar -baz -boggle
-
-
- The conditional text `X' in a %{`S':`X'} or %{!`S':`X'} construct
-may contain other nested `%' constructs or spaces, or even newlines.
-They are processed as usual, as described above.
-
- The `-O', `-f', `-m', and `-W' switches are handled specifically in
-these constructs. If another value of `-O' or the negated form of a
-`-f', `-m', or `-W' switch is found later in the command line, the
-earlier switch value is ignored, except with {`S'*} where `S' is just
-one letter, which passes all matching options.
-
- The character `|' at the beginning of the predicate text is used to
-indicate that a command should be piped to the following command, but
-only if `-pipe' is specified.
-
- It is built into GCC which switches take arguments and which do not.
-(You might think it would be useful to generalize this to allow each
-compiler's spec to say which switches take arguments. But this cannot
-be done in a consistent fashion. GCC cannot even decide which input
-files have been specified without knowing which switches take arguments,
-and it must know which input files to compile in order to tell which
-compilers to run).
-
- GCC also knows implicitly that arguments starting in `-l' are to be
-treated as compiler output files, and passed to the linker in their
-proper position among the other output files.
-
-\1f
-File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC
-
-Specifying Target Machine and Compiler Version
-==============================================
-
- By default, GCC compiles code for the same type of machine that you
-are using. However, it can also be installed as a cross-compiler, to
-compile for some other type of machine. In fact, several different
-configurations of GCC, for different target machines, can be installed
-side by side. Then you specify which one to use with the `-b' option.
-
- In addition, older and newer versions of GCC can be installed side
-by side. One of them (probably the newest) will be the default, but
-you may sometimes wish to use another.
-
-`-b MACHINE'
- The argument MACHINE specifies the target machine for compilation.
- This is useful when you have installed GCC as a cross-compiler.
-
- The value to use for MACHINE is the same as was specified as the
- machine type when configuring GCC as a cross-compiler. For
- example, if a cross-compiler was configured with `configure
- i386v', meaning to compile for an 80386 running System V, then you
- would specify `-b i386v' to run that cross compiler.
-
- When you do not specify `-b', it normally means to compile for the
- same type of machine that you are using.
-
-`-V VERSION'
- The argument VERSION specifies which version of GCC to run. This
- is useful when multiple versions are installed. For example,
- VERSION might be `2.0', meaning to run GCC version 2.0.
-
- The default version, when you do not specify `-V', is the last
- version of GCC that you installed.
-
- The `-b' and `-V' options actually work by controlling part of the
-file name used for the executable files and libraries used for
-compilation. A given version of GCC, for a given target machine, is
-normally kept in the directory `/usr/local/lib/gcc-lib/MACHINE/VERSION'.
-
- Thus, sites can customize the effect of `-b' or `-V' either by
-changing the names of these directories or adding alternate names (or
-symbolic links). If in directory `/usr/local/lib/gcc-lib/' the file
-`80386' is a link to the file `i386v', then `-b 80386' becomes an alias
-for `-b i386v'.
-
- In one respect, the `-b' or `-V' do not completely change to a
-different compiler: the top-level driver program `gcc' that you
-originally invoked continues to run and invoke the other executables
-(preprocessor, compiler per se, assembler and linker) that do the real
-work. However, since no real work is done in the driver program, it
-usually does not matter that the driver program in use is not the one
-for the specified target. It is common for the interface to the other
-executables to change incompatibly between compiler versions, so unless
-the version specified is very close to that of the driver (for example,
-`-V 3.0' with a driver program from GCC version 3.0.1), use of `-V' may
-not work; for example, using `-V 2.95.2' will not work with a driver
-program from GCC 3.0.
-
- The only way that the driver program depends on the target machine is
-in the parsing and handling of special machine-specific options.
-However, this is controlled by a file which is found, along with the
-other executables, in the directory for the specified version and
-target machine. As a result, a single installed driver program adapts
-to any specified target machine, and sufficiently similar compiler
-versions.
-
- The driver program executable does control one significant thing,
-however: the default version and target machine. Therefore, you can
-install different instances of the driver program, compiled for
-different targets or versions, under different names.
-
- For example, if the driver for version 2.0 is installed as `ogcc'
-and that for version 2.1 is installed as `gcc', then the command `gcc'
-will use version 2.1 by default, while `ogcc' will use 2.0 by default.
-However, you can choose either version with either command with the
-`-V' option.
-
-\1f
-File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC
-
-Hardware Models and Configurations
-==================================
-
- Earlier we discussed the standard option `-b' which chooses among
-different installed compilers for completely different target machines,
-such as VAX vs. 68000 vs. 80386.
-
- In addition, each of these target machine types can have its own
-special options, starting with `-m', to choose among various hardware
-models or configurations--for example, 68010 vs 68020, floating
-coprocessor or none. A single installed version of the compiler can
-compile for any model or configuration, according to the options
-specified.
-
- Some configurations of the compiler also support additional special
-options, usually for compatibility with other compilers on the same
-platform.
-
- These options are defined by the macro `TARGET_SWITCHES' in the
-machine description. The default for the options is also defined by
-that macro, which enables you to change the defaults.
-
-* Menu:
-
-* M680x0 Options::
-* M68hc1x Options::
-* VAX Options::
-* SPARC Options::
-* Convex Options::
-* AMD29K Options::
-* ARM Options::
-* MN10200 Options::
-* MN10300 Options::
-* M32R/D Options::
-* M88K Options::
-* RS/6000 and PowerPC Options::
-* RT Options::
-* MIPS Options::
-* i386 and x86-64 Options::
-* HPPA Options::
-* Intel 960 Options::
-* DEC Alpha Options::
-* DEC Alpha/VMS Options::
-* Clipper Options::
-* H8/300 Options::
-* SH Options::
-* System V Options::
-* TMS320C3x/C4x Options::
-* V850 Options::
-* ARC Options::
-* NS32K Options::
-* AVR Options::
-* MCore Options::
-* IA-64 Options::
-* D30V Options::
-* S/390 and zSeries Options::
-* CRIS Options::
-* MMIX Options::
-* PDP-11 Options::
-* Xstormy16 Options::
-* Xtensa Options::
-
-\1f
-File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Up: Submodel Options
-
-M680x0 Options
---------------
-
- These are the `-m' options defined for the 68000 series. The default
-values for these options depends on which style of 68000 was selected
-when the compiler was configured; the defaults for the most common
-choices are given below.
-
-`-m68000'
-`-mc68000'
- Generate output for a 68000. This is the default when the
- compiler is configured for 68000-based systems.
-
- Use this option for microcontrollers with a 68000 or EC000 core,
- including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
-
-`-m68020'
-`-mc68020'
- Generate output for a 68020. This is the default when the
- compiler is configured for 68020-based systems.
-
-`-m68881'
- Generate output containing 68881 instructions for floating point.
- This is the default for most 68020 systems unless `--nfp' was
- specified when the compiler was configured.
-
-`-m68030'
- Generate output for a 68030. This is the default when the
- compiler is configured for 68030-based systems.
-
-`-m68040'
- Generate output for a 68040. This is the default when the
- compiler is configured for 68040-based systems.
-
- This option inhibits the use of 68881/68882 instructions that have
- to be emulated by software on the 68040. Use this option if your
- 68040 does not have code to emulate those instructions.
-
-`-m68060'
- Generate output for a 68060. This is the default when the
- compiler is configured for 68060-based systems.
-
- This option inhibits the use of 68020 and 68881/68882 instructions
- that have to be emulated by software on the 68060. Use this
- option if your 68060 does not have code to emulate those
- instructions.
-
-`-mcpu32'
- Generate output for a CPU32. This is the default when the
- compiler is configured for CPU32-based systems.
-
- Use this option for microcontrollers with a CPU32 or CPU32+ core,
- including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
- 68341, 68349 and 68360.
-
-`-m5200'
- Generate output for a 520X "coldfire" family cpu. This is the
- default when the compiler is configured for 520X-based systems.
-
- Use this option for microcontroller with a 5200 core, including
- the MCF5202, MCF5203, MCF5204 and MCF5202.
-
-`-m68020-40'
- Generate output for a 68040, without using any of the new
- instructions. This results in code which can run relatively
- efficiently on either a 68020/68881 or a 68030 or a 68040. The
- generated code does use the 68881 instructions that are emulated
- on the 68040.
-
-`-m68020-60'
- Generate output for a 68060, without using any of the new
- instructions. This results in code which can run relatively
- efficiently on either a 68020/68881 or a 68030 or a 68040. The
- generated code does use the 68881 instructions that are emulated
- on the 68060.
-
-`-mfpa'
- Generate output containing Sun FPA instructions for floating point.
-
-`-msoft-float'
- Generate output containing library calls for floating point.
- *Warning:* the requisite libraries are not available for all m68k
- targets. Normally the facilities of the machine's usual C
- compiler are used, but this can't be done directly in
- cross-compilation. You must make your own arrangements to provide
- suitable library functions for cross-compilation. The embedded
- targets `m68k-*-aout' and `m68k-*-coff' do provide software
- floating point support.
-
-`-mshort'
- Consider type `int' to be 16 bits wide, like `short int'.
-
-`-mnobitfield'
- Do not use the bit-field instructions. The `-m68000', `-mcpu32'
- and `-m5200' options imply `-mnobitfield'.
-
-`-mbitfield'
- Do use the bit-field instructions. The `-m68020' option implies
- `-mbitfield'. This is the default if you use a configuration
- designed for a 68020.
-
-`-mrtd'
- Use a different function-calling convention, in which functions
- that take a fixed number of arguments return with the `rtd'
- instruction, which pops their arguments while returning. This
- saves one instruction in the caller since there is no need to pop
- the arguments there.
-
- This calling convention is incompatible with the one normally used
- on Unix, so you cannot use it if you need to call libraries
- compiled with the Unix compiler.
-
- Also, you must provide function prototypes for all functions that
- take variable numbers of arguments (including `printf'); otherwise
- incorrect code will be generated for calls to those functions.
-
- In addition, seriously incorrect code will result if you call a
- function with too many arguments. (Normally, extra arguments are
- harmlessly ignored.)
-
- The `rtd' instruction is supported by the 68010, 68020, 68030,
- 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
-
-`-malign-int'
-`-mno-align-int'
- Control whether GCC aligns `int', `long', `long long', `float',
- `double', and `long double' variables on a 32-bit boundary
- (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning
- variables on 32-bit boundaries produces code that runs somewhat
- faster on processors with 32-bit busses at the expense of more
- memory.
-
- *Warning:* if you use the `-malign-int' switch, GCC will align
- structures containing the above types differently than most
- published application binary interface specifications for the m68k.
-
-`-mpcrel'
- Use the pc-relative addressing mode of the 68000 directly, instead
- of using a global offset table. At present, this option implies
- `-fpic', allowing at most a 16-bit offset for pc-relative
- addressing. `-fPIC' is not presently supported with `-mpcrel',
- though this could be supported for 68020 and higher processors.
-
-`-mno-strict-align'
-`-mstrict-align'
- Do not (do) assume that unaligned memory references will be
- handled by the system.
-
-
-\1f
-File: gcc.info, Node: M68hc1x Options, Next: VAX Options, Prev: M680x0 Options, Up: Submodel Options
-
-M68hc1x Options
----------------
-
- These are the `-m' options defined for the 68hc11 and 68hc12
-microcontrollers. The default values for these options depends on
-which style of microcontroller was selected when the compiler was
-configured; the defaults for the most common choices are given below.
-
-`-m6811'
-`-m68hc11'
- Generate output for a 68HC11. This is the default when the
- compiler is configured for 68HC11-based systems.
-
-`-m6812'
-`-m68hc12'
- Generate output for a 68HC12. This is the default when the
- compiler is configured for 68HC12-based systems.
-
-`-mauto-incdec'
- Enable the use of 68HC12 pre and post auto-increment and
- auto-decrement addressing modes.
-
-`-mshort'
- Consider type `int' to be 16 bits wide, like `short int'.
-
-`-msoft-reg-count=COUNT'
- Specify the number of pseudo-soft registers which are used for the
- code generation. The maximum number is 32. Using more pseudo-soft
- register may or may not result in better code depending on the
- program. The default is 4 for 68HC11 and 2 for 68HC12.
-
-
-\1f
-File: gcc.info, Node: VAX Options, Next: SPARC Options, Prev: M68hc1x Options, Up: Submodel Options
-
-VAX Options
------------
-
- These `-m' options are defined for the VAX:
-
-`-munix'
- Do not output certain jump instructions (`aobleq' and so on) that
- the Unix assembler for the VAX cannot handle across long ranges.
-
-`-mgnu'
- Do output those jump instructions, on the assumption that you will
- assemble with the GNU assembler.
-
-`-mg'
- Output code for g-format floating point numbers instead of
- d-format.
-
-\1f
-File: gcc.info, Node: SPARC Options, Next: Convex Options, Prev: VAX Options, Up: Submodel Options
-
-SPARC Options
--------------
-
- These `-m' switches are supported on the SPARC:
-
-`-mno-app-regs'
-`-mapp-regs'
- Specify `-mapp-regs' to generate output using the global registers
- 2 through 4, which the SPARC SVR4 ABI reserves for applications.
- This is the default.
-
- To be fully SVR4 ABI compliant at the cost of some performance
- loss, specify `-mno-app-regs'. You should compile libraries and
- system software with this option.
-
-`-mfpu'
-`-mhard-float'
- Generate output containing floating point instructions. This is
- the default.
-
-`-mno-fpu'
-`-msoft-float'
- Generate output containing library calls for floating point.
- *Warning:* the requisite libraries are not available for all SPARC
- targets. Normally the facilities of the machine's usual C
- compiler are used, but this cannot be done directly in
- cross-compilation. You must make your own arrangements to provide
- suitable library functions for cross-compilation. The embedded
- targets `sparc-*-aout' and `sparclite-*-*' do provide software
- floating point support.
-
- `-msoft-float' changes the calling convention in the output file;
- therefore, it is only useful if you compile _all_ of a program with
- this option. In particular, you need to compile `libgcc.a', the
- library that comes with GCC, with `-msoft-float' in order for this
- to work.
-
-`-mhard-quad-float'
- Generate output containing quad-word (long double) floating point
- instructions.
-
-`-msoft-quad-float'
- Generate output containing library calls for quad-word (long
- double) floating point instructions. The functions called are
- those specified in the SPARC ABI. This is the default.
-
- As of this writing, there are no sparc implementations that have
- hardware support for the quad-word floating point instructions.
- They all invoke a trap handler for one of these instructions, and
- then the trap handler emulates the effect of the instruction.
- Because of the trap handler overhead, this is much slower than
- calling the ABI library routines. Thus the `-msoft-quad-float'
- option is the default.
-
-`-mno-flat'
-`-mflat'
- With `-mflat', the compiler does not generate save/restore
- instructions and will use a "flat" or single register window
- calling convention. This model uses %i7 as the frame pointer and
- is compatible with the normal register window model. Code from
- either may be intermixed. The local registers and the input
- registers (0-5) are still treated as "call saved" registers and
- will be saved on the stack as necessary.
-
- With `-mno-flat' (the default), the compiler emits save/restore
- instructions (except for leaf functions) and is the normal mode of
- operation.
-
-`-mno-unaligned-doubles'
-`-munaligned-doubles'
- Assume that doubles have 8 byte alignment. This is the default.
-
- With `-munaligned-doubles', GCC assumes that doubles have 8 byte
- alignment only if they are contained in another type, or if they
- have an absolute address. Otherwise, it assumes they have 4 byte
- alignment. Specifying this option avoids some rare compatibility
- problems with code generated by other compilers. It is not the
- default because it results in a performance loss, especially for
- floating point code.
-
-`-mno-faster-structs'
-`-mfaster-structs'
- With `-mfaster-structs', the compiler assumes that structures
- should have 8 byte alignment. This enables the use of pairs of
- `ldd' and `std' instructions for copies in structure assignment,
- in place of twice as many `ld' and `st' pairs. However, the use
- of this changed alignment directly violates the Sparc ABI. Thus,
- it's intended only for use on targets where the developer
- acknowledges that their resulting code will not be directly in
- line with the rules of the ABI.
-
-`-mv8'
-`-msparclite'
- These two options select variations on the SPARC architecture.
-
- By default (unless specifically configured for the Fujitsu
- SPARClite), GCC generates code for the v7 variant of the SPARC
- architecture.
-
- `-mv8' will give you SPARC v8 code. The only difference from v7
- code is that the compiler emits the integer multiply and integer
- divide instructions which exist in SPARC v8 but not in SPARC v7.
-
- `-msparclite' will give you SPARClite code. This adds the integer
- multiply, integer divide step and scan (`ffs') instructions which
- exist in SPARClite but not in SPARC v7.
-
- These options are deprecated and will be deleted in a future GCC
- release. They have been replaced with `-mcpu=xxx'.
-
-`-mcypress'
-`-msupersparc'
- These two options select the processor for which the code is
- optimized.
-
- With `-mcypress' (the default), the compiler optimizes code for the
- Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx
- series. This is also appropriate for the older SparcStation 1, 2,
- IPX etc.
-
- With `-msupersparc' the compiler optimizes code for the SuperSparc
- cpu, as used in the SparcStation 10, 1000 and 2000 series. This
- flag also enables use of the full SPARC v8 instruction set.
-
- These options are deprecated and will be deleted in a future GCC
- release. They have been replaced with `-mcpu=xxx'.
-
-`-mcpu=CPU_TYPE'
- Set the instruction set, register set, and instruction scheduling
- parameters for machine type CPU_TYPE. Supported values for
- CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite',
- `hypersparc', `sparclite86x', `f930', `f934', `sparclet',
- `tsc701', `v9', and `ultrasparc'.
-
- Default instruction scheduling parameters are used for values that
- select an architecture and not an implementation. These are `v7',
- `v8', `sparclite', `sparclet', `v9'.
-
- Here is a list of each supported architecture and their supported
- implementations.
-
- v7: cypress
- v8: supersparc, hypersparc
- sparclite: f930, f934, sparclite86x
- sparclet: tsc701
- v9: ultrasparc
-
-`-mtune=CPU_TYPE'
- Set the instruction scheduling parameters for machine type
- CPU_TYPE, but do not set the instruction set or register set that
- the option `-mcpu=CPU_TYPE' would.
-
- The same values for `-mcpu=CPU_TYPE' can be used for
- `-mtune=CPU_TYPE', but the only useful values are those that
- select a particular cpu implementation. Those are `cypress',
- `supersparc', `hypersparc', `f930', `f934', `sparclite86x',
- `tsc701', and `ultrasparc'.
-
-
- These `-m' switches are supported in addition to the above on the
-SPARCLET processor.
-
-`-mlittle-endian'
- Generate code for a processor running in little-endian mode.
-
-`-mlive-g0'
- Treat register `%g0' as a normal register. GCC will continue to
- clobber it as necessary but will not assume it always reads as 0.
-
-`-mbroken-saverestore'
- Generate code that does not use non-trivial forms of the `save' and
- `restore' instructions. Early versions of the SPARCLET processor
- do not correctly handle `save' and `restore' instructions used with
- arguments. They correctly handle them used without arguments. A
- `save' instruction used without arguments increments the current
- window pointer but does not allocate a new stack frame. It is
- assumed that the window overflow trap handler will properly handle
- this case as will interrupt handlers.
-
- These `-m' switches are supported in addition to the above on SPARC
-V9 processors in 64-bit environments.
-
-`-mlittle-endian'
- Generate code for a processor running in little-endian mode.
-
-`-m32'
-`-m64'
- Generate code for a 32-bit or 64-bit environment. The 32-bit
- environment sets int, long and pointer to 32 bits. The 64-bit
- environment sets int to 32 bits and long and pointer to 64 bits.
-
-`-mcmodel=medlow'
- Generate code for the Medium/Low code model: the program must be
- linked in the low 32 bits of the address space. Pointers are 64
- bits. Programs can be statically or dynamically linked.
-
-`-mcmodel=medmid'
- Generate code for the Medium/Middle code model: the program must
- be linked in the low 44 bits of the address space, the text
- segment must be less than 2G bytes, and data segment must be
- within 2G of the text segment. Pointers are 64 bits.
-
-`-mcmodel=medany'
- Generate code for the Medium/Anywhere code model: the program may
- be linked anywhere in the address space, the text segment must be
- less than 2G bytes, and data segment must be within 2G of the text
- segment. Pointers are 64 bits.
-
-`-mcmodel=embmedany'
- Generate code for the Medium/Anywhere code model for embedded
- systems: assume a 32-bit text and a 32-bit data segment, both
- starting anywhere (determined at link time). Register %g4 points
- to the base of the data segment. Pointers are still 64 bits.
- Programs are statically linked, PIC is not supported.
-
-`-mstack-bias'
-`-mno-stack-bias'
- With `-mstack-bias', GCC assumes that the stack pointer, and frame
- pointer if present, are offset by -2047 which must be added back
- when making stack frame references. Otherwise, assume no such
- offset is present.
-
-\1f
-File: gcc.info, Node: Convex Options, Next: AMD29K Options, Prev: SPARC Options, Up: Submodel Options
-
-Convex Options
---------------
-
- These `-m' options are defined for Convex:
-
-`-mc1'
- Generate output for C1. The code will run on any Convex machine.
- The preprocessor symbol `__convex__c1__' is defined.
-
-`-mc2'
- Generate output for C2. Uses instructions not available on C1.
- Scheduling and other optimizations are chosen for max performance
- on C2. The preprocessor symbol `__convex_c2__' is defined.
-
-`-mc32'
- Generate output for C32xx. Uses instructions not available on C1.
- Scheduling and other optimizations are chosen for max performance
- on C32. The preprocessor symbol `__convex_c32__' is defined.
-
-`-mc34'
- Generate output for C34xx. Uses instructions not available on C1.
- Scheduling and other optimizations are chosen for max performance
- on C34. The preprocessor symbol `__convex_c34__' is defined.
-
-`-mc38'
- Generate output for C38xx. Uses instructions not available on C1.
- Scheduling and other optimizations are chosen for max performance
- on C38. The preprocessor symbol `__convex_c38__' is defined.
-
-`-margcount'
- Generate code which puts an argument count in the word preceding
- each argument list. This is compatible with regular CC, and a few
- programs may need the argument count word. GDB and other
- source-level debuggers do not need it; this info is in the symbol
- table.
-
-`-mnoargcount'
- Omit the argument count word. This is the default.
-
-`-mvolatile-cache'
- Allow volatile references to be cached. This is the default.
-
-`-mvolatile-nocache'
- Volatile references bypass the data cache, going all the way to
- memory. This is only needed for multi-processor code that does
- not use standard synchronization instructions. Making
- non-volatile references to volatile locations will not necessarily
- work.
-
-`-mlong32'
- Type long is 32 bits, the same as type int. This is the default.
-
-`-mlong64'
- Type long is 64 bits, the same as type long long. This option is
- useless, because no library support exists for it.
-
-\1f
-File: gcc.info, Node: AMD29K Options, Next: ARM Options, Prev: Convex Options, Up: Submodel Options
-
-AMD29K Options
---------------
-
- These `-m' options are defined for the AMD Am29000:
-
-`-mdw'
- Generate code that assumes the `DW' bit is set, i.e., that byte and
- halfword operations are directly supported by the hardware. This
- is the default.
-
-`-mndw'
- Generate code that assumes the `DW' bit is not set.
-
-`-mbw'
- Generate code that assumes the system supports byte and halfword
- write operations. This is the default.
-
-`-mnbw'
- Generate code that assumes the systems does not support byte and
- halfword write operations. `-mnbw' implies `-mndw'.
-
-`-msmall'
- Use a small memory model that assumes that all function addresses
- are either within a single 256 KB segment or at an absolute
- address of less than 256k. This allows the `call' instruction to
- be used instead of a `const', `consth', `calli' sequence.
-
-`-mnormal'
- Use the normal memory model: Generate `call' instructions only when
- calling functions in the same file and `calli' instructions
- otherwise. This works if each file occupies less than 256 KB but
- allows the entire executable to be larger than 256 KB. This is
- the default.
-
-`-mlarge'
- Always use `calli' instructions. Specify this option if you expect
- a single file to compile into more than 256 KB of code.
-
-`-m29050'
- Generate code for the Am29050.
-
-`-m29000'
- Generate code for the Am29000. This is the default.
-
-`-mkernel-registers'
- Generate references to registers `gr64-gr95' instead of to
- registers `gr96-gr127'. This option can be used when compiling
- kernel code that wants a set of global registers disjoint from
- that used by user-mode code.
-
- Note that when this option is used, register names in `-f' flags
- must use the normal, user-mode, names.
-
-`-muser-registers'
- Use the normal set of global registers, `gr96-gr127'. This is the
- default.
-
-`-mstack-check'
-`-mno-stack-check'
- Insert (or do not insert) a call to `__msp_check' after each stack
- adjustment. This is often used for kernel code.
-
-`-mstorem-bug'
-`-mno-storem-bug'
- `-mstorem-bug' handles 29k processors which cannot handle the
- separation of a mtsrim insn and a storem instruction (most 29000
- chips to date, but not the 29050).
-
-`-mno-reuse-arg-regs'
-`-mreuse-arg-regs'
- `-mno-reuse-arg-regs' tells the compiler to only use incoming
- argument registers for copying out arguments. This helps detect
- calling a function with fewer arguments than it was declared with.
-
-`-mno-impure-text'
-`-mimpure-text'
- `-mimpure-text', used in addition to `-shared', tells the compiler
- to not pass `-assert pure-text' to the linker when linking a
- shared object.
-
-`-msoft-float'
- Generate output containing library calls for floating point.
- *Warning:* the requisite libraries are not part of GCC. Normally
- the facilities of the machine's usual C compiler are used, but
- this can't be done directly in cross-compilation. You must make
- your own arrangements to provide suitable library functions for
- cross-compilation.
-
-`-mno-multm'
- Do not generate multm or multmu instructions. This is useful for
- some embedded systems which do not have trap handlers for these
- instructions.
-