1122 lines
45 KiB
Plaintext
1122 lines
45 KiB
Plaintext
This is Info file gcc.info, produced by Makeinfo version 1.68 from the
|
||
input file ../../gcc-2.95.2/gcc/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 and the internals of the GNU compiler.
|
||
|
||
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 Free Software Foundation, Inc.
|
||
|
||
Permission is granted to make and distribute verbatim copies of this
|
||
manual provided the copyright notice and this permission notice are
|
||
preserved on all copies.
|
||
|
||
Permission is granted to copy and distribute modified versions of
|
||
this manual under the conditions for verbatim copying, provided also
|
||
that the sections entitled "GNU General Public License" and "Funding
|
||
for Free Software" are included exactly as in the original, and
|
||
provided that the entire resulting derived work is distributed under
|
||
the terms of a permission notice identical to this one.
|
||
|
||
Permission is granted to copy and distribute translations of this
|
||
manual into another language, under the above conditions for modified
|
||
versions, except that the sections entitled "GNU General Public
|
||
License" and "Funding for Free Software", and this permission notice,
|
||
may be included in translations approved by the Free Software Foundation
|
||
instead of in the original English.
|
||
|
||
|
||
File: gcc.info, Node: Directory Options, Next: Target Options, Prev: Link Options, Up: Invoking GCC
|
||
|
||
Options for Directory Search
|
||
============================
|
||
|
||
These options specify directories to search for header files, for
|
||
libraries and for parts of the compiler:
|
||
|
||
`-IDIR'
|
||
Add the directory DIR to the head of the list of directories to be
|
||
searched for header files. This can be used to override a system
|
||
header file, substituting your own version, since these
|
||
directories are searched before the system header file
|
||
directories. If you use more than one `-I' option, the
|
||
directories are scanned in left-to-right order; the standard
|
||
system directories come after.
|
||
|
||
`-I-'
|
||
Any directories you specify with `-I' options before the `-I-'
|
||
option are searched only for the case of `#include "FILE"'; they
|
||
are not searched for `#include <FILE>'.
|
||
|
||
If additional directories are specified with `-I' options after
|
||
the `-I-', these directories are searched for all `#include'
|
||
directives. (Ordinarily *all* `-I' directories are used this way.)
|
||
|
||
In addition, the `-I-' option inhibits the use of the current
|
||
directory (where the current input file came from) as the first
|
||
search directory for `#include "FILE"'. There is no way to
|
||
override this effect of `-I-'. With `-I.' you can specify
|
||
searching the directory which was current when the compiler was
|
||
invoked. That is not exactly the same as what the preprocessor
|
||
does by default, but it is often satisfactory.
|
||
|
||
`-I-' does not inhibit the use of the standard system directories
|
||
for header files. Thus, `-I-' and `-nostdinc' are independent.
|
||
|
||
`-LDIR'
|
||
Add directory DIR to the list of directories to be searched for
|
||
`-l'.
|
||
|
||
`-BPREFIX'
|
||
This option specifies where to find the executables, libraries,
|
||
include files, and data files of the compiler itself.
|
||
|
||
The compiler driver program runs one or more of the subprograms
|
||
`cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each
|
||
program it tries to run, both with and without `MACHINE/VERSION/'
|
||
(*note Target Options::.).
|
||
|
||
For each subprogram to be run, the compiler driver first tries the
|
||
`-B' prefix, if any. If that name is not found, or if `-B' was
|
||
not specified, the driver tries two standard prefixes, which are
|
||
`/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'. If neither of
|
||
those results in a file name that is found, the unmodified program
|
||
name is searched for using the directories specified in your
|
||
`PATH' environment variable.
|
||
|
||
`-B' prefixes that effectively specify directory names also apply
|
||
to libraries in the linker, because the compiler translates these
|
||
options into `-L' options for the linker. They also apply to
|
||
includes files in the preprocessor, because the compiler
|
||
translates these options into `-isystem' options for the
|
||
preprocessor. In this case, the compiler appends `include' to the
|
||
prefix.
|
||
|
||
The run-time support file `libgcc.a' can also be searched for using
|
||
the `-B' prefix, if needed. If it is not found there, the two
|
||
standard prefixes above are tried, and that is all. The file is
|
||
left out of the link if it is not found by those means.
|
||
|
||
Another way to specify a prefix much like the `-B' prefix is to use
|
||
the environment variable `GCC_EXEC_PREFIX'. *Note Environment
|
||
Variables::.
|
||
|
||
`-specs=FILE'
|
||
Process FILE after the compiler reads in the standard `specs'
|
||
file, in order to override the defaults that the `gcc' driver
|
||
program uses when determining what switches to pass to `cc1',
|
||
`cc1plus', `as', `ld', etc. More than one `-specs='FILE can be
|
||
specified on the command line, and they are processed in order,
|
||
from left to right.
|
||
|
||
|
||
File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Directory Options, 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 and version.
|
||
|
||
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 compiler version.
|
||
|
||
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.
|
||
|
||
|
||
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::
|
||
* VAX Options::
|
||
* SPARC Options::
|
||
* Convex Options::
|
||
* AMD29K Options::
|
||
* ARM Options::
|
||
* Thumb Options::
|
||
* MN10200 Options::
|
||
* MN10300 Options::
|
||
* M32R/D Options::
|
||
* M88K Options::
|
||
* RS/6000 and PowerPC Options::
|
||
* RT Options::
|
||
* MIPS Options::
|
||
* i386 Options::
|
||
* HPPA Options::
|
||
* Intel 960 Options::
|
||
* DEC Alpha Options::
|
||
* Clipper Options::
|
||
* H8/300 Options::
|
||
* SH Options::
|
||
* System V Options::
|
||
* TMS320C3x/C4x Options::
|
||
* V850 Options::
|
||
* ARC Options::
|
||
* NS32K Options::
|
||
|
||
|
||
File: gcc.info, Node: M680x0 Options, Next: VAX 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.
|
||
|
||
|
||
File: gcc.info, Node: VAX Options, Next: SPARC Options, Prev: M680x0 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.
|
||
|
||
|
||
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-epilogue'
|
||
`-mepilogue'
|
||
With `-mepilogue' (the default), the compiler always emits code for
|
||
function exit at the end of each function. Any function exit in
|
||
the middle of the function (such as a return statement in C) will
|
||
generate a jump to the exit code at the end of the function.
|
||
|
||
With `-mno-epilogue', the compiler tries to emit exit code inline
|
||
at every function exit.
|
||
|
||
`-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.
|
||
|
||
`-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
|
||
optimised.
|
||
|
||
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 are used for `-mtune='
|
||
CPU_TYPE, though the only useful values are those that select a
|
||
particular cpu implementation: `cypress', `supersparc',
|
||
`hypersparc', `f930', `f934', `sparclite86x', `tsc701',
|
||
`ultrasparc'.
|
||
|
||
`-malign-loops=NUM'
|
||
Align loops to a 2 raised to a NUM byte boundary. If
|
||
`-malign-loops' is not specified, the default is 2.
|
||
|
||
`-malign-jumps=NUM'
|
||
Align instructions that are only jumped to to a 2 raised to a NUM
|
||
byte boundary. If `-malign-jumps' is not specified, the default
|
||
is 2.
|
||
|
||
`-malign-functions=NUM'
|
||
Align the start of functions to a 2 raised to NUM byte boundary.
|
||
If `-malign-functions' is not specified, the default is 2 if
|
||
compiling for 32 bit sparc, and 5 if compiling for 64 bit sparc.
|
||
|
||
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 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.
|
||
|
||
|
||
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.
|
||
|
||
|
||
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.
|
||
|
||
|
||
File: gcc.info, Node: ARM Options, Next: Thumb Options, Prev: AMD29K Options, Up: Submodel Options
|
||
|
||
ARM Options
|
||
-----------
|
||
|
||
These `-m' options are defined for Advanced RISC Machines (ARM)
|
||
architectures:
|
||
|
||
`-mapcs-frame'
|
||
Generate a stack frame that is compliant with the ARM Procedure
|
||
Call Standard for all functions, even if this is not strictly
|
||
necessary for correct execution of the code. Specifying
|
||
`-fomit-frame-pointer' with this option will cause the stack
|
||
frames not to be generated for leaf functions. The default is
|
||
`-mno-apcs-frame'.
|
||
|
||
`-mapcs'
|
||
This is a synonym for `-mapcs-frame'.
|
||
|
||
`-mapcs-26'
|
||
Generate code for a processor running with a 26-bit program
|
||
counter, and conforming to the function calling standards for the
|
||
APCS 26-bit option. This option replaces the `-m2' and `-m3'
|
||
options of previous releases of the compiler.
|
||
|
||
`-mapcs-32'
|
||
Generate code for a processor running with a 32-bit program
|
||
counter, and conforming to the function calling standards for the
|
||
APCS 32-bit option. This option replaces the `-m6' option of
|
||
previous releases of the compiler.
|
||
|
||
`-mapcs-stack-check'
|
||
Generate code to check the amount of stack space available upon
|
||
entry to every function (that actually uses some stack space). If
|
||
there is insufficient space available then either the function
|
||
`__rt_stkovf_split_small' or `__rt_stkovf_split_big' will be
|
||
called, depending upon the amount of stack space required. The
|
||
run time system is required to provide these functions. The
|
||
default is `-mno-apcs-stack-check', since this produces smaller
|
||
code.
|
||
|
||
`-mapcs-float'
|
||
Pass floating point arguments using the float point registers.
|
||
This is one of the variants of the APCS. This option is
|
||
reccommended if the target hardware has a floating point unit or
|
||
if a lot of floating point arithmetic is going to be performed by
|
||
the code. The default is `-mno-apcs-float', since integer only
|
||
code is slightly increased in size if `-mapcs-float' is used.
|
||
|
||
`-mapcs-reentrant'
|
||
Generate reentrant, position independent code. This is the
|
||
equivalent to specifying the `-fpic' option. The default is
|
||
`-mno-apcs-reentrant'.
|
||
|
||
`-mthumb-interwork'
|
||
Generate code which supports calling between the ARM and THUMB
|
||
instruction sets. Without this option the two instruction sets
|
||
cannot be reliably used inside one program. The default is
|
||
`-mno-thumb-interwork', since slightly larger code is generated
|
||
when `-mthumb-interwork' is specified.
|
||
|
||
`-mno-sched-prolog'
|
||
Prevent the reordering of instructions in the function prolog, or
|
||
the merging of those instruction with the instructions in the
|
||
function's body. This means that all functions will start with a
|
||
recognisable set of instructions (or in fact one of a chioce from
|
||
a small set of different function prologues), and this information
|
||
can be used to locate the start if functions inside an executable
|
||
piece of code. The default is `-msched-prolog'.
|
||
|
||
`-mhard-float'
|
||
Generate output containing floating point instructions. This is
|
||
the default.
|
||
|
||
`-msoft-float'
|
||
Generate output containing library calls for floating point.
|
||
*Warning:* the requisite libraries are not available for all ARM
|
||
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.
|
||
|
||
`-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.
|
||
|
||
`-mlittle-endian'
|
||
Generate code for a processor running in little-endian mode. This
|
||
is the default for all standard configurations.
|
||
|
||
`-mbig-endian'
|
||
Generate code for a processor running in big-endian mode; the
|
||
default is to compile code for a little-endian processor.
|
||
|
||
`-mwords-little-endian'
|
||
This option only applies when generating code for big-endian
|
||
processors. Generate code for a little-endian word order but a
|
||
big-endian byte order. That is, a byte order of the form
|
||
`32107654'. Note: this option should only be used if you require
|
||
compatibility with code for big-endian ARM processors generated by
|
||
versions of the compiler prior to 2.8.
|
||
|
||
`-mshort-load-bytes'
|
||
Do not try to load half-words (eg `short's) by loading a word from
|
||
an unaligned address. For some targets the MMU is configured to
|
||
trap unaligned loads; use this option to generate code that is
|
||
safe in these environments.
|
||
|
||
`-mno-short-load-bytes'
|
||
Use unaligned word loads to load half-words (eg `short's). This
|
||
option produces more efficient code, but the MMU is sometimes
|
||
configured to trap these instructions.
|
||
|
||
`-mshort-load-words'
|
||
This is a synonym for the `-mno-short-load-bytes'.
|
||
|
||
`-mno-short-load-words'
|
||
This is a synonym for the `-mshort-load-bytes'.
|
||
|
||
`-mbsd'
|
||
This option only applies to RISC iX. Emulate the native BSD-mode
|
||
compiler. This is the default if `-ansi' is not specified.
|
||
|
||
`-mxopen'
|
||
This option only applies to RISC iX. Emulate the native
|
||
X/Open-mode compiler.
|
||
|
||
`-mno-symrename'
|
||
This option only applies to RISC iX. Do not run the assembler
|
||
post-processor, `symrename', after code has been assembled.
|
||
Normally it is necessary to modify some of the standard symbols in
|
||
preparation for linking with the RISC iX C library; this option
|
||
suppresses this pass. The post-processor is never run when the
|
||
compiler is built for cross-compilation.
|
||
|
||
`-mcpu=<name>'
|
||
`-mtune=<name>'
|
||
This specifies the name of the target ARM processor. GCC uses
|
||
this name to determine what kind of instructions it can use when
|
||
generating assembly code. Permissable names are: arm2, arm250,
|
||
arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7m, arm7d,
|
||
arm7dm, arm7di, arm7dmi, arm70, arm700, arm700i, arm710, arm710c,
|
||
arm7100, arm7500, arm7500fe, arm7tdmi, arm8, strongarm,
|
||
strongarm110, strongarm1100, arm8, arm810, arm9, arm9tdmi.
|
||
`-mtune=' is a synonym for `-mcpue=' to support older versions of
|
||
GCC.
|
||
|
||
`-march=<name>'
|
||
This specifies the name of the target ARM architecture. GCC uses
|
||
this name to determine what kind of instructions it can use when
|
||
generating assembly code. This option can be used in conjunction
|
||
with or instead of the `-mcpu=' option. Permissable names are:
|
||
armv2, armv2a, armv3, armv3m, armv4, armv4t
|
||
|
||
`-mfpe=<number>'
|
||
`-mfp=<number>'
|
||
This specifes the version of the floating point emulation
|
||
available on the target. Permissable values are 2 and 3. `-mfp='
|
||
is a synonym for `-mfpe=' to support older versions of GCC.
|
||
|
||
`-mstructure-size-boundary=<n>'
|
||
The size of all structures and unions will be rounded up to a
|
||
multiple of the number of bits set by this option. Permissable
|
||
values are 8 and 32. The default value varies for different
|
||
toolchains. For the COFF targeted toolchain the default value is
|
||
8. Specifying the larger number can produced faster, more
|
||
efficient code, but can also increase the size of the program.
|
||
The two values are potentially incompatible. Code compiled with
|
||
one value cannot necessarily expect to work with code or libraries
|
||
compiled with the other value, if they exchange information using
|
||
structures or unions. Programmers are encouraged to use the 32
|
||
value as future versions of the toolchain may default to this
|
||
value.
|
||
|
||
`-mabort-on-noreturn'
|
||
Generate a call to the function abort at the end of a noreturn
|
||
function. It will be executed if the function tries to return.
|
||
|
||
|
||
File: gcc.info, Node: Thumb Options, Next: MN10200 Options, Prev: ARM Options, Up: Submodel Options
|
||
|
||
Thumb Options
|
||
-------------
|
||
|
||
`-mthumb-interwork'
|
||
Generate code which supports calling between the THUMB and ARM
|
||
instruction sets. Without this option the two instruction sets
|
||
cannot be reliably used inside one program. The default is
|
||
`-mno-thumb-interwork', since slightly smaller code is generated
|
||
with this option.
|
||
|
||
`-mtpcs-frame'
|
||
Generate a stack frame that is compliant with the Thumb Procedure
|
||
Call Standard for all non-leaf functions. (A leaf function is one
|
||
that does not call any other functions). The default is
|
||
`-mno-apcs-frame'.
|
||
|
||
`-mtpcs-leaf-frame'
|
||
Generate a stack frame that is compliant with the Thumb Procedure
|
||
Call Standard for all leaf functions. (A leaf function is one
|
||
that does not call any other functions). The default is
|
||
`-mno-apcs-leaf-frame'.
|
||
|
||
`-mlittle-endian'
|
||
Generate code for a processor running in little-endian mode. This
|
||
is the default for all standard configurations.
|
||
|
||
`-mbig-endian'
|
||
Generate code for a processor running in big-endian mode.
|
||
|
||
`-mstructure-size-boundary=<n>'
|
||
The size of all structures and unions will be rounded up to a
|
||
multiple of the number of bits set by this option. Permissable
|
||
values are 8 and 32. The default value varies for different
|
||
toolchains. For the COFF targeted toolchain the default value is
|
||
8. Specifying the larger number can produced faster, more
|
||
efficient code, but can also increase the size of the program.
|
||
The two values are potentially incompatible. Code compiled with
|
||
one value cannot necessarily expect to work with code or libraries
|
||
compiled with the other value, if they exchange information using
|
||
structures or unions. Programmers are encouraged to use the 32
|
||
value as future versions of the toolchain may default to this
|
||
value.
|
||
|
||
|
||
File: gcc.info, Node: MN10200 Options, Next: MN10300 Options, Prev: Thumb Options, Up: Submodel Options
|
||
|
||
MN10200 Options
|
||
---------------
|
||
|
||
These `-m' options are defined for Matsushita MN10200 architectures:
|
||
`-mrelax'
|
||
Indicate to the linker that it should perform a relaxation
|
||
optimization pass to shorten branches, calls and absolute memory
|
||
addresses. This option only has an effect when used on the
|
||
command line for the final link step.
|
||
|
||
This option makes symbolic debugging impossible.
|
||
|
||
|
||
File: gcc.info, Node: MN10300 Options, Next: M32R/D Options, Prev: MN10200 Options, Up: Submodel Options
|
||
|
||
MN10300 Options
|
||
---------------
|
||
|
||
These `-m' options are defined for Matsushita MN10300 architectures:
|
||
|
||
`-mmult-bug'
|
||
Generate code to avoid bugs in the multiply instructions for the
|
||
MN10300 processors. This is the default.
|
||
|
||
`-mno-mult-bug'
|
||
Do not generate code to avoid bugs in the multiply instructions
|
||
for the MN10300 processors.
|
||
|
||
`-mrelax'
|
||
Indicate to the linker that it should perform a relaxation
|
||
optimization pass to shorten branches, calls and absolute memory
|
||
addresses. This option only has an effect when used on the
|
||
command line for the final link step.
|
||
|
||
This option makes symbolic debugging impossible.
|
||
|
||
|
||
File: gcc.info, Node: M32R/D Options, Next: M88K Options, Prev: MN10300 Options, Up: Submodel Options
|
||
|
||
M32R/D Options
|
||
--------------
|
||
|
||
These `-m' options are defined for Mitsubishi M32R/D architectures:
|
||
|
||
`-mcode-model=small'
|
||
Assume all objects live in the lower 16MB of memory (so that their
|
||
addresses can be loaded with the `ld24' instruction), and assume
|
||
all subroutines are reachable with the `bl' instruction. This is
|
||
the default.
|
||
|
||
The addressability of a particular object can be set with the
|
||
`model' attribute.
|
||
|
||
`-mcode-model=medium'
|
||
Assume objects may be anywhere in the 32 bit address space (the
|
||
compiler will generate `seth/add3' instructions to load their
|
||
addresses), and assume all subroutines are reachable with the `bl'
|
||
instruction.
|
||
|
||
`-mcode-model=large'
|
||
Assume objects may be anywhere in the 32 bit address space (the
|
||
compiler will generate `seth/add3' instructions to load their
|
||
addresses), and assume subroutines may not be reachable with the
|
||
`bl' instruction (the compiler will generate the much slower
|
||
`seth/add3/jl' instruction sequence).
|
||
|
||
`-msdata=none'
|
||
Disable use of the small data area. Variables will be put into
|
||
one of `.data', `bss', or `.rodata' (unless the `section'
|
||
attribute has been specified). This is the default.
|
||
|
||
The small data area consists of sections `.sdata' and `.sbss'.
|
||
Objects may be explicitly put in the small data area with the
|
||
`section' attribute using one of these sections.
|
||
|
||
`-msdata=sdata'
|
||
Put small global and static data in the small data area, but do not
|
||
generate special code to reference them.
|
||
|
||
`-msdata=use'
|
||
Put small global and static data in the small data area, and
|
||
generate special instructions to reference them.
|
||
|
||
`-G NUM'
|
||
Put global and static objects less than or equal to NUM bytes into
|
||
the small data or bss sections instead of the normal data or bss
|
||
sections. The default value of NUM is 8. The `-msdata' option
|
||
must be set to one of `sdata' or `use' for this option to have any
|
||
effect.
|
||
|
||
All modules should be compiled with the same `-G NUM' value.
|
||
Compiling with different values of NUM may or may not work; if it
|
||
doesn't the linker will give an error message - incorrect code
|
||
will not be generated.
|
||
|