GCC(1) USER COMMANDS GCC(1)
NAME
gcc - GNU project C Compiler
SYNOPSIS
gcc [ options ] files
WARNING
This man page is an extract of the documentation of the GNU
C compiler and is limited to the meaning of the options. It
is updated only occasionally, because the GNU project does
not use nroff. For complete, current documentation, refer
to the Info file gcc or the DVI file gcc.dvi which are made
from the Texinfo source file gcc.texinfo.
DESCRIPTION
The GNU C compiler uses a command syntax much like the Unix
C compiler. The gcc program accepts options and file names
as operands. Multiple single-letter options may not be
grouped: -dr is very different from -d -r. When you invoke
GNU CC, it normally does preprocessing, compilation, assem-
bly and linking. File names which end in .c are taken as C
source to be preprocessed and compiled; file names ending in
.i are taken as preprocessor output to be compiled; compiler
output files plus any input files with names ending in .s
are assembled; then the resulting object files, plus any
other input files, are linked together to produce an execut-
able. Command options allow you to stop this process at an
intermediate stage. For example, the -c option says not to
run the linker. Then the output consists of object files
output by the assembler. Other command options are passed
on to one stage of processing. Some options control the
preprocessor and others the compiler itself. Yet other
options control the assembler and linker; these are not
documented here, but you rarely need to use any of them. If
the environment variable `TMPDIR' is defined, GNU C will
place all of the compiler temporary files in the directory
specified by `TMPDIR'.
OPTIONS
Here are the options to control the overall compilation pro-
cess, including those that say whether to link, whether to
assemble, and so on.
-o file
Place output in file file. This applies regardless to
whatever sort of output is being produced, whether it
be an executable file, an object file, an assembler
file or preprocessed C code.
If -o is not specified, the default is to put an exe-
cutable file in a.out, the object file source.c in
source.o, an assembler file in source.s, and
Version 1.36 Last change: 18 June 1989 1
GCC(1) USER COMMANDS GCC(1)
preprocessed C on standard output.
-c Compile or assemble the source files, but do not link.
Produce object files with names made by replacing .c or
.s with .o at the end of the input file names. Do
nothing at all for object files specified as input.
-S Compile into assembler code but do not assemble. The
assembler output file name is made by replacing .c with
.s at the end of the input file name. Do nothing at
all for assembler source files or object files speci-
fied as input.
-E Run only the C preprocessor. Preprocess all the C
source files specified and output the results to stan-
dard output.
-v Compiler driver program prints the commands it executes
as it runs the preprocessor, compiler proper, assembler
and linker. Some of these are directed to print their
own version numbers.
-pipe
Use pipes rather than temporary files for communication
between the various stages of compilation. This fails
to work on some systems where the assembler is unable
to read from a pipe; but the GNU assembler has no trou-
ble.
-Bprefix
Compiler driver program tries prefix as a prefix for
each program it tries to run. These programs are cpp,
cc1, as and ld.
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-. 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.
The run-time support file gnulib is also 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. Most of the time, on most
machines, you can do without it.
You can get a similar result from the environment vari-
able GCCEXECPREFIX; if it is defined, its value is
Version 1.36 Last change: 18 June 1989 2
GCC(1) USER COMMANDS GCC(1)
used as a prefix in the same way. If both the -B
option and the GCCEXECPREFIX variable are present,
the -B option is used first and the environment vari-
able value second.
-bprefix
The argument prefix is used as a second prefix for the
compiler executables and libraries. This prefix is
optional: the compiler tries each file first with it,
then without it. This prefix follows the prefix speci-
fied with -B or the default prefixes.
Thus, -bvax- -Bcc/ in the presence of environment vari-
able GCCEXECPREFIX with definition /u/foo/ causes GNU
CC to try the following file names for the preprocessor
executable:
cc/vax-cpp
cc/cpp
/u/foo/vax-cpp
/u/foo/cpp
/usr/local/lib/gcc-vax-cpp
/usr/local/lib/gcc-cpp
/usr/lib/gcc-vax-cpp
/usr/lib/gcc-cpp These options control the details
of C compilation itself.
-ansi
Support all ANSI standard C programs.
This turns off certain features of GNU C that are
incompatible with ANSI C, such as the asm, inline and
typeof keywords, and predefined macros such as unix and
vax that identify the type of system you are using. It
also enables the undesirable and rarely used ANSI tri-
graph feature.
The alternate keywords asm, inline and
typeof continue to work despite -ansi. You would
not want to use them in an ANSI C program, of course,
but it useful to put them in header files that might be
included in compilations done with -ansi. Alternate
predefined macros such as unix and vax are also
available, with or without -ansi.
The -ansi option does not cause non-ANSI programs to be
rejected gratuitously. For that, -pedantic is required
in addition to -ansi.
The macro STRICTANSI is predefined when the -ansi
option is used. Some header files may notice this
macro and refrain from declaring certain functions or
Version 1.36 Last change: 18 June 1989 3
GCC(1) USER COMMANDS GCC(1)
defining certain macros that the ANSI standard doesn't
call for; this is to avoid interfering with any pro-
grams that might use these names for other things.
-traditional
Attempt to support some aspects of traditional C com-
pilers. Specifically:
* All extern declarations take effect globally even if
they are written inside of a function definition. This
includes implicit declarations of functions.
* The keywords typeof, inline, signed, const and volatile
are not recognized.
* Comparisons between pointers and integers are always
allowed.
* Integer types unsigned short and unsigned char promote
to unsigned int.
* Out-of-range floating point literals are not an error.
* All automatic variables not declared register are
preserved by longjmp(3C). Ordinarily, GNU C follows
ANSI C: automatic variables not declared volatile may
be clobbered.
* In the preprocessor, comments convert to nothing at
all, rather than to a space. This allows traditional
token concatenation.
* In the preprocessor, macro arguments are recognized
within string constants in a macro definition (and
their values are stringified, though without additional
quote marks, when they appear in such a context). The
preprocessor always considers a string constant to end
at a newline.
* The predefined macro STDC is not defined when you
use -traditional, but GNUC is (since the GNU exten-
sions which GNUC indicates are not affected by
-traditional). If you need to write header files that
work differently depending on whether -traditional is
in use, by testing both of these predefined macros you
can distinguish four situations: GNU C, traditional GNU
C, other ANSI C compilers, and other old C compilers.
-O Optimize. Optimizing compilation takes somewhat more
time, and a lot more memory for a large function.
Without -O, the compiler's goal is to reduce the cost
Version 1.36 Last change: 18 June 1989 4
GCC(1) USER COMMANDS GCC(1)
of compilation and to make debugging produce the
expected results. Statements are independent: if you
stop the program with a breakpoint between statements,
you can then assign a new value to any variable or
change the program counter to any other statement in
the function and get exactly the results you would
expect from the source code.
Without -O, only variables declared register are allo-
cated in registers. The resulting compiled code is a
little worse than produced by PCC without -O.
With -O, the compiler tries to reduce code size and
execution time.
Some of the -f options described below turn specific
kinds of optimization on or off.
-g Produce debugging information in the operating system's
native format (for DBX or SDB). GDB also can work with
this debugging information.
Unlike most other C compilers, GNU CC allows you to use
-g with -O. The shortcuts taken by optimized code may
occasionally produce surprising results: some variables
you declared may not exist at all; flow of control may
briefly move where you did not expect it; some state-
ments may not be executed because they compute constant
results or their values were already at hand; some
statements may execute in different places because they
were moved out of loops. Nevertheless it proves possi-
ble to debug optimized output. This makes it reason-
able to use the optimizer for programs that might have
bugs.
-gg Produce debugging information in GDB's own format.
This requires the GNU assembler and linker in order to
work.
This feature will probably be eliminated. It was
intended to enable GDB to read the symbol table faster,
but it doesn't result in enough of a speedup to be
worth the larger object files and executables. We are
working on other ways of making GDB start even faster,
which work with DBX format debugging information and
could be made to work with SDB format.
-w Inhibit all warning messages.
-W Print extra warning messages for these events:
* An automatic variable is used without first being
Version 1.36 Last change: 18 June 1989 5
GCC(1) USER COMMANDS GCC(1)
initialized.
These warnings are possible only in optimizing compila-
tion, because they require data flow information that
is computed only when optimizing. If you don't specify
-O, you simply won't get these warnings.
These warnings occur only for variables that are candi-
dates for register allocation. Therefore, they do not
occur for a variable that is declared volatile, or
whose address is taken, or whose size is other than 1,
2, 4 or 8 bytes. Also, they do not occur for struc-
tures, unions or arrays, even when they are in regis-
ters.
Note that there may be no warning about a variable that
is used only to compute a value that itself is never
used, because such computations may be deleted by data
flow analysis before the warnings are printed.
These warnings are made optional because GNU CC is not
smart enough to see all the reasons why the code might
be correct despite appearing to have an error. Here is
one example of how this can happen:
{
int x;
switch (y)
{
case 1: x = 1;
break;
case 2: x = 4;
break;
case 3: x = 5;
}
foo (x);
}
If the value of y is always 1, 2 or 3, then x is always
initialized, but GNU CC doesn't know this. Here is
another common case:
{
int save_y;
if (change_y) save_y = y, y = new_y;
...
if (change_y) y = save_y;
}
This has no bug because save_y is used only if it is
set.
Version 1.36 Last change: 18 June 1989 6
GCC(1) USER COMMANDS GCC(1)
Some spurious warnings can be avoided if you declare as
volatile all the functions you use that never return.
* A nonvolatile automatic variable might be changed by a
call to longjmp(3C). These warnings as well are possi-
ble only in optimizing compilation.
The compiler sees only the calls to setjmp(3C). It
cannot know where longjmp(3C) will be called; in fact,
a signal handler could call it at any point in the
code. As a result, you may get a warning even when
there is in fact no problem because longjmp(3C) cannot
in fact be called at the place which would cause a
problem.
* A function can return either with or without a value.
(Falling off the end of the function body is considered
returning without a value.) For example, this function
would evoke such a warning:
foo (a)
{
if (a > 0)
return a;
}
Spurious warnings can occur because GNU CC does not
realize that certain functions (including abort(3C) and
longjmp(3C)) will never return.
* An expression-statement contains no side effects.
In the future, other useful warnings may also be
enabled by this option.
-Wimplicit
Warn whenever a function is implicitly declared.
-Wreturn-type
Warn whenever a function is defined with a return-type
that defaults to int. Also warn about any return
statement with no return-value in a function whose
return-type is not void.
-Wunused
Warn whenever a local variable is unused aside from its
declaration, and whenever a function is declared static
but never defined.
-Wswitch
Warn whenever a switch statement has an index of
enumeral type and lacks a case for one or more of the
Version 1.36 Last change: 18 June 1989 7
GCC(1) USER COMMANDS GCC(1)
named codes of that enumeration. (The presence of a
default label prevents this warning.) case labels out-
side the enumeration range also provoke warnings when
this option is used.
-Wcomment
Warn whenever a comment-start sequence /* appears in a
comment.
-Wtrigraphs
Warn if any trigraphs are encountered (assuming they
are enabled).
-Wall
All of the above -W options combined. These are all
the options which pertain to usage that we do not
recommend and that we believe is always easy to avoid,
even in conjunction with macros.
The other -W... options below are not implied by -Wall
because certain kinds of useful macros are almost
impossible to write without causing those warnings.
-Wshadow
Warn whenever a local variable shadows another local
variable.
-Wid-clash-len
Warn whenever two distinct identifiers match in the
first len characters. This may help you prepare a pro-
gram that will compile with certain obsolete, brain-
damaged compilers.
-Wpointer-arith
Warn about anything that depends on the size of a func-
tion type or of void. GNU C assigns these types a size
of 1, for convenience in calculations with void *
pointers and pointers to functions.
-Wcast-qual
Warn whenever a pointer is cast so as to remove a type
qualifier from the target type. For example, warn if a
const char * is cast to an ordinary char *.
-Wwrite-strings
Give string constants the type const char[length] so
that copying the address of one into a non-const char *
pointer will get a warning. These warnings will help
you find at compile time code that can try to write
into a string constant, but only if you have been very
careful about using const in declarations and proto-
types. Otherwise, it will just be a nuisance; this is
Version 1.36 Last change: 18 June 1989 8
GCC(1) USER COMMANDS GCC(1)
why we did not make -Wall request these warnings.
-p Generate extra code to write profile information suit-
able for the analysis program prof(1).
-pg Generate extra code to write profile information suit-
able for the analysis program gprof(1).
-a Generate extra code to write profile information for
basic blocks, suitable for the analysis program
tcov(1). Eventually GNU gprof(1) should be extended to
process this data.
-llibrary
Search a standard list of directories for a library
named library, which is actually a file named
liblibrary.a. The linker uses this file as if it had
been specified precisely by name.
The directories searched include several standard sys-
tem directories plus any that you specify with -L.
Normally the files found this way are library files--
archive files whose members are object files. The
linker handles an archive file by scanning through it
for members which define symbols that have so far been
referenced but not defined. But if the file that is
found is an ordinary object file, it is linked in the
usual fashion. The only difference between using an -l
option and specifying a file name is that -l searches
several directories.
-Ldir
Add directory dir to the list of directories to be
searched for -l.
-nostdlib
Don't use the standard system libraries and startup
files when linking. Only the files you specify (plus
gnulib) will be passed to the linker.
-mmachinespec
Machine-dependent option specifying something about the
type of target machine. These options are defined by
the macro TARGETSWITCHES in the machine description.
The default for the options is also defined by that
macro, which enables you to change the defaults.
These are the -m options defined in the 68000 machine
description:
-m68020
Version 1.36 Last change: 18 June 1989 9
GCC(1) USER COMMANDS GCC(1)
-mc68020
Generate output for a 68020 (rather than a 68000).
This is the default if you use the unmodified
sources.
-m68000
-mc68000
Generate output for a 68000 (rather than a 68020).
-m68881
Generate output containing 68881 instructions for
floating point. This is the default if you use
the unmodified sources.
-mfpa
Generate output containing Sun FPA instructions
for floating point.
-msoft-float
Generate output containing library calls for
floating point.
-mshort
Consider type int to be 16 bits wide, like short
int.
-mnobitfield
Do not use the bit-field instructions. -m68000
implies -mnobitfield.
-mbitfield
Do use the bit-field instructions. -m68020
implies -mbitfield. This is the default if you
use the unmodified sources.
-mrtd
Use a different function-calling convention, in
which functions that take a fixed number of argu-
ments 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(3S)); otherwise incorrect code
will be generated for calls to those functions.
Version 1.36 Last change: 18 June 1989 10
GCC(1) USER COMMANDS GCC(1)
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 and
68020 processors, but not by the 68000.
These -m options are defined in the Vax machine
description:
-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 assump-
tion that you will assemble with the GNU assem-
bler.
-mg
Output code for g-format floating point numbers
instead of d-format.
These -m switches are supported on the Sparc:
-mfpu
Generate output containing floating point instruc-
tions. This is the default if you use the unmodi-
fied sources.
-msoft-float
Generate output containing library calls for
floating point.
-mno-epilogue
Generate separate return instructions for return
statements. This has both advantages and disad-
vantages; I don't recall what they are.
These -m options are defined in the Convex machine
description:
-mc1
Generate output for a C1. This is the default
when the compiler is configured for a C1.
-mc2
Generate output for a C2. This is the default
when the compiler is configured for a C2.
Version 1.36 Last change: 18 June 1989 11
GCC(1) USER COMMANDS GCC(1)
-margcount
Generate code which puts an argument count in the
word preceding each argument list. Some nonport-
able Convex and Vax programs need this word.
(Debuggers don't; this info is in the symbol
table.)
-mnoargcount
Omit the argument count word. This is the default
if you use the unmodified sources.
These -m options defined in the 88000 machine descrip-
tion:
-mliteral-synthesis
Emit two or three instruction sequences to refer-
ence static data. This is on by default. If
selected, register r13 is used as a scratch regis-
ter to build up addresses with the or.u instruc-
tion, and is unavailable for normal allocation by
the compiler.
-mno-literal-synthesis
Emit one instruction sequences to reference static
data, assuming that the linker or assembler will
patch up these references to use the appropriate
linker registers (r26 through r29). Most linkers
for 88000 machines will not do this optimization.
-mstatic-literal-synthesis
Emit one instruction sequences to reference static
data, using register r25 as a base register to the
beginning of the data section. At present, this
option also sets the -mconst-uses-data option.
This option is experimental, and may change from
release to release.
You must compile the file containing the main
function with this option if you compile any
module with it on. This is because the compiler
loads register r25 in the prologue of the main
function.
This option will not work if either your linker
does not align the data section to a 64K boundary,
or you have more than 64K of data. Refering to
function addresses, except in a call context does
not work at present. No checking is done at
present for these cases.
-mno-static-literal-synthesis
Do not perform static literal synthesis. This
Version 1.36 Last change: 18 June 1989 12
GCC(1) USER COMMANDS GCC(1)
option is on by default.
-mdouble-memory-refs
Assume that it is ok to use the ld.d or st.d
instructions. This is on by default.
-mno-double-memory-refs
Do not use the ld.d or st.d instructions. If dou-
ble word alignment is not guaranteed by the linker
or any of the modules do keep the stack aligned on
double word boundaries, you probably need to use
this switch.
-mdelay-slot
Attempt to reorder instructions to make use of the
delay slot following branch and subroutine call
instructions (ie, try to use a jsr.n instruction
instead of a jsr instruction). This is on by
default if optimization is specified.
-mno-delay-slot
Do no reorder instructions to take advantage of
the delay slot following branch and subroutine
call instructions.
-mconst-uses-data
Put constant data into the data section rather
than the text section. Use this option if your
linker does not perform literal synthesis on con-
stants within the text section and you use the
-mno-literal-synthesis option; if your system does
not support read access to the text section; or if
you are doing some post-processing on the assembly
language with tools that don't understand about
constants going in the text area.
-mconst-uses-text
Put constant data into the text section. This
option is on by default.
-mno-const-uses-data
Same as the -mconst-uses-text option.
-mocs-debug-info
Put out additional debug information to comply
with the 88open OCS text description information.
This is default when running under Data General's
DG/UX operating system, and is not the default on
other 88000 platforms. It adds 8 32-bit words to
the text segment for each function compiled, and
gives the debugger and runtime system information
on where registers are saved and whether the frame
Version 1.36 Last change: 18 June 1989 13
GCC(1) USER COMMANDS GCC(1)
pointer is eliminated or not.
-mno-ocs-debug-info
Do not put out any additional debugging informa-
tion.
-mocs-frame-position
When emitting COFF debug information for automatic
variables and parameters stored on the stack, the
offset written out is from the OCS canonical frame
pointer (CFA), which is the stack pointer (regis-
ter r31) when the function is entered. This is
specified by the 88Open OCS (Object Compatibility
Standard), but not all of the current debuggers
support this yet. If this option is in effect,
optiimization will automatically attempt to elim-
inate the frame pointer, even when debugging.
-mno-ocs-frame-position
When emitting COFF debug information for automatic
variables and parameters stored on the stack, the
offset written out is from the frame pointer
register r30. This is the default behavior of the
GNU C compiler. If this option is in effect, no
automatic frame pointer elimination is done when
debugging information is being written out via the
-g switch.
-midentify-revision
Emit an assembly ident directive which gives the
filename, date, time, and compiler revision, for
use with the what command.
-mtrap-large-shift
Emit a tbnd instruction before each shift by a
non-constant amount, to trap if the shift count is
less than zero or greater than 31. The 88000 does
not produce a reasonable result in such cases, and
the trap will halt the program at the point an
unreasonable shift is done, rather than producing
bogus results. The ANSI standard for C specifies
that shifts outside of the range of 0 to
number_bits - 1 is undefined. It is an error to
specify both -mtrap-large-shift and
-mhandle-large-shift.
-mno-trap-large-shift
Do not emit a tbnd instruction before each shift
by a non-constant amount, to trap if the shift
count is less than zero or greater than 31.
Version 1.36 Last change: 18 June 1989 14
GCC(1) USER COMMANDS GCC(1)
-mhandle-large-shift
Emit a four instruction sequence for each shift by
a non-constant amount, if the shift count is less
than zero or greater than 31. Logical shifts and
arithmetic shifts left produce a 0 result if the
shift count is out of bounds. Arithmetic shifts
right produce a copy of the sign bit if the shift
count is out of bounds. The ANSI standard for C
specifies that shifts outside of the range of 0 to
number_bits - 1 is undefined. It is an error to
specify both -mtrap-large-shift and
-mhandle-large-shift.
-mno-handle-large-shift
Emit a single instruction to handle all shifts
(unless -mtrap-large-shift is specified).
-mcheck-zero-division
Emit code to check if an integer division by zero
occurs and issue trap number 503 if it occurs.
The current 88000 processors do not reliably check
the dividend for zero. This is the default
behavior of the GNU C compiler.
-mno-check-zero-division
Do not emit code to check if an integer division
by zero occurs and issue trap number 503 if it
occurs.
-muse-div-instruction
Do not emit code to check both the divisior and
dividend when doing normal integer division (as
opposed to unsigned division) to see if either is
negative, and fixup things up so that the division
is done with positive numbers. You would use this
switch when you are confident that most or all
signed divisions are done with positive numbers.
If this fixup is not done, the 88100 will trap to
the kernel if either number is negative. The
operating system will calculate the correct answer
for all negative operands, except for the most
negative number (-214783648) divided by negative
1, whose signed result cannot be represented in 32
bits.
-mno-use-div-instruction
Emit code to check both the divisior and dividend
when doing normal integer division (as opposed to
unsigned division) to see if either is negative,
and fixup things up so that the division is done
with positive numbers (except for the case of the
Version 1.36 Last change: 18 June 1989 15
GCC(1) USER COMMANDS GCC(1)
most negative number which does not have a posi-
tive counterpart). This is the default behavior
of the GNU C compiler.
The cost of doing this check is that up to two
more registers are needed; some extra time is
spent figuring out whether the operands are nega-
tive; and the GNU compiler does not optimize
expressions containing division like it would nor-
mally.
-mblock-move
Enable the compiler to generate inline code for
copying structures and for calls to the builtin
functions __builtin_memcpy and __builtin_strcpy
where it is reasonable to do so. In addition, if
optimization is specified with -O, memcpy is
defined to be __builtin_memcpy, and strcpy is
defined to be __builtin_strcpy. This is the
default behavior.
-mno-block-move
Do not attempt to do block moves with inline code.
-mwarn-passed-structs
Emit a warning message if a structure is passed to
a function, or declared as a function argument.
At least one other C compiler for the 88000, did
not pass structures according to the 88100 Object
Compatibility Standard, and this switch warns
about the places where GNU CC will not intero-
perate with that compiler.
-mno-underscores
Do not emit a leading underscore before all exter-
nal names instead of the normal single underscore.
You should not use this switch in general, unless
you make sure every module has been compiled with
it, including the standard library.
-mtwo-underscores
Emit two leading underscores before all external
names instead of the normal single underscore.
You should not use this switch in general, unless
you make sure every module has been compiled with
it, including the standard library.
-mtrace-function
Call the function __enter before the normal func-
tion prologue, and also call the function __leave
after the normal function epilogue. These rou-
tines are passed the address of a dope vector in
Version 1.36 Last change: 18 June 1989 16
GCC(1) USER COMMANDS GCC(1)
register r12, and the return address of the
current function in register r13. The dope vector
is a table of values for use in the __enter and
__leave functions, and consists of: 1) a count of
the words in the dope vector; 2) a pointer to a
null terminated string, giving the function name;
3) a word containing the length of the string; 4)
a bitmask giving the fixed registers used (typi-
cally r0, r30, and r31); and 5) a bitmask giving
the registers that are expected to be preserved
across calls (typically r14 through r31). Because
of the unusual calling sequence, these routines
should be coded in assembler, or carefully written
C code with assembler assists. The purpose of
these routines is to provide some low level sup-
port to track down things like preserved registers
getting clobbered, and the like.
-mno-trace-function
Do not call the special prologue and epilogue rou-
tines. This switch is the default behavior.
-msilicon-filter
Run the silicon filter (sifilter) before calling
the assembler. This is no longer needed, since
the GNU C compiler knows about the various
features of the current Motorola 88100 chips.
-mno-silicon-filter
Do not run the silicon filter (sifilter) before
calling the assembler. This is the default
behavior of the GNU C compiler.
-fflag
Specify machine-independent flags. Most flags have
both positive and negative forms; the negative form of
-ffoo would be -fno-foo. In the table below, only one
of the forms is listed--the one which is not the
default. You can figure out the other form by either
removing no- or adding it.
-fpcc-struct-return
Use the same convention for returning struct and union
values that is used by the usual C compiler on your
system. This convention is less efficient for small
structures, and on many machines it fails to be reen-
trant; but it has the advantage of allowing intercalla-
bility between GCC-compiled code and PCC-compiled code.
-ffloat-store
Do not store floating-point variables in registers.
This prevents undesirable excess precision on machines
Version 1.36 Last change: 18 June 1989 17
GCC(1) USER COMMANDS GCC(1)
such as the 68000 where the floating registers (of the
68881) keep more precision than a double is supposed to
have.
For most programs, the excess precision does only good,
but a few programs rely on the precise definition of
IEEE floating point. Use -ffloat-store for such pro-
grams.
-fno-asm
Do not recognize asm, inline or typeof as a keyword.
These words may then be used as identifiers. You can
use asm, inline and typeof instead.
-fno-defer-pop
Always pop the arguments to each function call as soon
as that function returns. Normally the compiler (when
optimizing) lets arguments accumulate on the stack for
several function calls and pops them all at once.
-fstrength-reduce
Perform the optimizations of loop strength reduction
and elimination of iteration variables.
-fcombine-regs
Allow the combine pass to combine an instruction that
copies one register into another. This might or might
not produce better code when used in addition to -O. I
am interested in hearing about the difference this
makes.
-fforce-mem
Force memory operands to be copied into registers
before doing arithmetic on them. This may produce
better code by making all memory references potential
common subexpressions. When they are not common subex-
pressions, instruction combination should eliminate the
separate register-load. I am interested in hearing
about the difference this makes.
-fforce-addr
Force memory address constants to be copied into regis-
ters before doing arithmetic on them. This may produce
better code just as -fforce-mem may. I am interested
in hearing about the difference this makes.
-fomit-frame-pointer
Don't keep the frame pointer in a register for func-
tions that don't need one. This avoids the instruc-
tions to save, set up and restore frame pointers; it
also makes an extra register available in many func-
tions. It also makes debugging impossible.
Version 1.36 Last change: 18 June 1989 18
GCC(1) USER COMMANDS GCC(1)
On some machines, such as the Vax, this flag has no
effect, because the standard calling sequence automati-
cally handles the frame pointer and nothing is saved by
pretending it doesn't exist. The machine-description
macro FRAMEPOINTERREQUIRED controls whether a target
machine supports this flag.
-finline-functions
Integrate all simple functions into their callers. The
compiler heuristically decides which functions are sim-
ple enough to be worth integrating in this way.
If all calls to a given function are integrated, and
the function is declared static, then the function is
normally not output as assembler code in its own right.
-fcaller-saves
Enable values to be allocated in registers that will be
clobbered by function calls, by emitting extra instruc-
tions to save and restore the registers around such
calls. Such allocation is done only when it seems to
result in better code than would otherwise be produced.
This option is enabled by default on certain machines,
usually those which have no call-preserved registers to
use instead.
-fkeep-inline-functions
Even if all calls to a given function are integrated,
and the function is declared static, nevertheless out-
put a separate run-time callable version of the func-
tion.
-fwritable-strings
Store string constants in the writable data segment and
don't uniquize them. This is for compatibility with
old programs which assume they can write into string
constants. Writing into string constants is a very bad
idea; constants should be constant.
-fcond-mismatch
Allow conditional expressions with mismatched types in
the second and third arguments. The value of such an
expression is void.
-fno-function-cse
Do not put function addresses in registers; make each
instruction that calls a constant function contain the
function's address explicitly.
This option results in less efficient code, but some
strange hacks that alter the assembler output may be
Version 1.36 Last change: 18 June 1989 19
GCC(1) USER COMMANDS GCC(1)
confused by the optimizations performed when this
option is not used.
-fvolatile
Consider all memory references through pointers to be
volatile.
-fvolatile-global
Consider all memory references to extern and global
data items to be volatile.
-fshared-data
Requests that the data and non-const variables of this
compilation be shared data rather than private data.
The distinction makes sense only on certain operating
systems, where shared data is shared between processes
running the same program, while private data exists in
one copy per process.
-funsigned-char
Let the type char be the unsigned, like unsigned char.
Each kind of machine has a default for what char should
be. It is either like unsigned char by default or like
signed char by default. (Actually, at present, the
default is always signed.)
The type char is always a distinct type from either
signed char or unsigned char, even though its behavior
is always just like one of those two.
Note that this is equivalent to -fno-signed-char, which
is the negative form of -fsigned-char.
-fsigned-char
Let the type char be signed, like signed char.
Note that this is equivalent to -fno-unsigned-char,
which is the negative form of -funsigned-char.
-funsigned-bit
Treat bitfields that do not specify unsigned or signed
explicitly in the type key as if unsigned were speci-
fied.
Each kind of machine has a default for whether plain
bitfields are signed or unsigned by default.
Note that this is equivalent to -fno-signed-bit, which
is the negative form of -fsigned-bit.
-fsigned-bit
Version 1.36 Last change: 18 June 1989 20
GCC(1) USER COMMANDS GCC(1)
Treat bitfields that do not specify unsigned or signed
explicitly in the type key as if signed were specified.
Note that this is equivalent to -fno-unsigned-bit,
which is the negative form of -funsigned-bit.
-fdelayed-branch
If supported for the target machine, attempt to reorder
instructions to exploit instruction slots available
after delayed branch instructions.
-ffixed-reg
Treat the register named reg as a fixed register; gen-
erated code should never refer to it (except perhaps as
a stack pointer, frame pointer or in some other fixed
role).
reg must be the name of a register. The register names
accepted are machine-specific and are defined in the
REGISTERNAMES macro in the machine description macro
file.
This flag does not have a negative form, because it
specifies a three-way choice.
-fcall-used-reg
Treat the register named reg as an allocatable register
that is clobbered by function calls. It may be allo-
cated for temporaries or variables that do not live
across a call. Functions compiled this way will not
save and restore the register REG.
Use of this flag for a register that has a fixed per-
vasive role in the machine's execution model, such as
the stack pointer or frame pointer, will produce disas-
trous results.
This flag does not have a negative form, because it
specifies a three-way choice.
-fcall-saved-reg
Treat the register named reg as an allocatable register
saved by functions. It may be allocated even for tem-
poraries or variables that live across a call. Func-
tions compiled this way will save and restore the
register reg if they use it.
Use of this flag for a register that has a fixed per-
vasive role in the machine's execution model, such as
the stack pointer or frame pointer, will produce disas-
trous results.
Version 1.36 Last change: 18 June 1989 21
GCC(1) USER COMMANDS GCC(1)
A different sort of disaster will result from the use
of this flag for a register in which function values
may be returned.
This flag does not have a negative form, because it
specifies a three-way choice.
-dletters
Says to make debugging dumps at times specified by
letters. Here are the possible letters:
r
Dump after RTL generation.
j
Dump after first jump optimization.
J
Dump after last jump optimization.
s
Dump after CSE (including the jump optimization
that sometimes follows CSE).
L
Dump after loop optimization.
f
Dump after flow analysis.
c
Dump after instruction combination.
l
Dump after local register allocation.
g
Dump after global register allocation.
d
Dump after delayed branch scheduling.
m
Print statistics on memory usage, at the end of
the run.
-pedantic
Issue all the warnings demanded by strict ANSI standard
C; reject all programs that use forbidden extensions.
Valid ANSI standard C programs should compile properly
with or without this option (though a rare few will
require -ansi). However, without this option, certain
GNU extensions and traditional C features are supported
as well. With this option, they are rejected. There
is no reason to use this option; it exists only to
satisfy pedants.
-pedantic does not cause warning messages for use of
the alternate keywords whose names begin and end with
.
Version 1.36 Last change: 18 June 1989 22
GCC(1) USER COMMANDS GCC(1)
-static
On Suns running version 4, this prevents linking with
the shared libraries. (-g has the same effect.) These
options control the C preprocessor, which is run on
each C source file before actual compilation. If you
use the `-E' option, nothing is done except C prepro-
cessing. Some of these options make sense only
together with `-E' because they request preprocessor
output that is not suitable for actual compilation.
-C Tell the preprocessor not to discard comments. Used
with the -E option.
-Idir
Search directory dir for include files.
-I- Any directories specified 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 as the first search directory for
#include "file". Therefore, the current directory is
searched only if it is requested explicitly with -I..
Specifying both -I- and -I. allows you to control pre-
cisely which directories are searched before the
current one and which are searched after.
-nostdinc
Do not search the standard system directories for
header files. Only the directories you have specified
with -I options (and the current directory, if
appropriate) are searched.
Between -nostdinc and -I-, you can eliminate all direc-
tories from the search path except those you specify.
-M Tell the preprocessor to output a rule suitable for
make(1) describing the dependencies of each source
file. For each source file, the preprocessor outputs
one make-rule whose target is the object file name for
that source file and whose dependencies are all the
files #included in it. This rule may be a single line
or may be continued with \-newline if it is long.
-M implies -E.
Version 1.36 Last change: 18 June 1989 23
GCC(1) USER COMMANDS GCC(1)
-MM Like -M but the output mentions only the user-header
files included with #include "file". System header
files included with #include <file> are omitted.
-MM implies -E.
-Dmacro
Define macro macro with the empty string as its defini-
tion.
-Dmacro=defn
Define macro macro as defn.
-Umacro
Undefine macro macro.
-trigraphs
Support ANSI C trigraphs. You don't want to know about
this brain-damage. The -ansi option also has this
effect.
FILES
file.c C source file
file.s assembly language file
file.o object file
a.out link edited output
/tmp/cc* temporary files
LIBDIR/gcc-cpp preprocessor
LIBDIR/gcc-cc1 compiler
LIBDIR/gcc-gnulib library needed by GCC on some machines
/lib/crt[01n].o start-up routine
/lib/libc.a standard C library, see intro(3)
/usr/include standard directory for #include files
LIBDIR/gcc-include standard gcc directory for #include files
LIBDIR is usually /usr/local/lib.
SEE ALSO
as(1), ld(1), adb(1), dbx(1), sdb(1).
BUGS
Bugs should be reported to bug-gcc@prep.ai.mit.edu. Bugs
tend actually to be fixed if they can be isolated, so it is
in your interest to report them in such a way that they can
be easily reproduced.
COPYING
Copyright (c) 1988 Free Software Foundation, Inc. Permis-
sion is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permis-
sion notice are preserved on all copies. Permission is
granted to copy and distribute modified versions of this
Version 1.36 Last change: 18 June 1989 24
GCC(1) USER COMMANDS GCC(1)
manual under the conditions for verbatim copying, 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 condi-
tions for modified versions, except that this permission
notice may be included in translations approved by the Free
Software Foundation instead of in the original English.
AUTHORS
See the GNU CC Manual for the contributors to GNU CC.
Version 1.36 Last change: 18 June 1989 25