GNU Info

Info Node: (gcc-295.info)Code Gen Options

(gcc-295.info)Code Gen Options


Next: Environment Variables Prev: Submodel Options Up: Invoking GCC
Enter node , (file) or (file)node

Options for Code Generation Conventions
=======================================

   These machine-independent options control the interface conventions
used in code generation.

   Most of them 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.

`-fexceptions'
     Enable exception handling. Generates extra code needed to propagate
     exceptions.  For some targets, this implies generation of frame
     unwind information for all functions. This can produce significant
     data size overhead, although it does not affect execution.  If you
     do not specify this option, it is enabled by default for languages
     like C++ which normally require exception handling, and disabled
     for languages like C that do not normally require it.  However,
     when compiling C code that needs to interoperate properly with
     exception handlers written in C++, you may need to enable this
     option.  You may also wish to disable this option is you are
     compiling older C++ programs that don't use exception handling.

`-fpcc-struct-return'
     Return "short" `struct' and `union' values in memory like longer
     ones, rather than in registers.  This convention is less
     efficient, but it has the advantage of allowing intercallability
     between GCC-compiled files and files compiled with other compilers.

     The precise convention for returning structures in memory depends
     on the target configuration macros.

     Short structures and unions are those whose size and alignment
     match that of some integer type.

`-freg-struct-return'
     Use the convention that `struct' and `union' values are returned
     in registers when possible.  This is more efficient for small
     structures than `-fpcc-struct-return'.

     If you specify neither `-fpcc-struct-return' nor its contrary
     `-freg-struct-return', GCC defaults to whichever convention is
     standard for the target.  If there is no standard convention, GCC
     defaults to `-fpcc-struct-return', except on targets where GCC is
     the principal compiler.  In those cases, we can choose the
     standard, and we chose the more efficient register return
     alternative.

`-fshort-enums'
     Allocate to an `enum' type only as many bytes as it needs for the
     declared range of possible values.  Specifically, the `enum' type
     will be equivalent to the smallest integer type which has enough
     room.

`-fshort-double'
     Use the same size for `double' as for `float'.

`-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.

`-fno-common'
     Allocate even uninitialized global variables in the bss section of
     the object file, rather than generating them as common blocks.
     This has the effect that if the same variable is declared (without
     `extern') in two different compilations, you will get an error
     when you link them.  The only reason this might be useful is if
     you wish to verify that the program will work on other systems
     which always work this way.

`-fno-ident'
     Ignore the `#ident' directive.

`-fno-gnu-linker'
     Do not output global initializations (such as C++ constructors and
     destructors) in the form used by the GNU linker (on systems where
     the GNU linker is the standard method of handling them).  Use this
     option when you want to use a non-GNU linker, which also requires
     using the `collect2' program to make sure the system linker
     includes constructors and destructors.  (`collect2' is included in
     the GCC distribution.)  For systems which *must* use `collect2',
     the compiler driver `gcc' is configured to do this automatically.

`-finhibit-size-directive'
     Don't output a `.size' assembler directive, or anything else that
     would cause trouble if the function is split in the middle, and the
     two halves are placed at locations far apart in memory.  This
     option is used when compiling `crtstuff.c'; you should not need to
     use it for anything else.

`-fverbose-asm'
     Put extra commentary information in the generated assembly code to
     make it more readable.  This option is generally only of use to
     those who actually need to read the generated assembly code
     (perhaps while debugging the compiler itself).

     `-fno-verbose-asm', the default, causes the extra information to
     be omitted and is useful when comparing two assembler files.

`-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.  GCC does not consider static data items to be
     volatile because of this switch.

`-fvolatile-static'
     Consider all memory references to static data to be volatile.

`-fpic'
     Generate position-independent code (PIC) suitable for use in a
     shared library, if supported for the target machine.  Such code
     accesses all constant addresses through a global offset table
     (GOT).  The dynamic loader resolves the GOT entries when the
     program starts (the dynamic loader is not part of GCC; it is part
     of the operating system).  If the GOT size for the linked
     executable exceeds a machine-specific maximum size, you get an
     error message from the linker indicating that `-fpic' does not
     work; in that case, recompile with `-fPIC' instead.  (These
     maximums are 16k on the m88k, 8k on the Sparc, and 32k on the m68k
     and RS/6000.  The 386 has no such limit.)

     Position-independent code requires special support, and therefore
     works only on certain machines.  For the 386, GCC supports PIC for
     System V but not for the Sun 386i.  Code generated for the IBM
     RS/6000 is always position-independent.

`-fPIC'
     If supported for the target machine, emit position-independent
     code, suitable for dynamic linking and avoiding any limit on the
     size of the global offset table.  This option makes a difference
     on the m68k, m88k, and the Sparc.

     Position-independent code requires special support, and therefore
     works only on certain machines.

`-ffixed-REG'
     Treat the register named REG as a fixed register; generated 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 `REGISTER_NAMES' 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 allocable register that is
     clobbered by function calls.  It may be allocated for temporaries
     or variables that do not live across a call.  Functions compiled
     this way will not save and restore the register REG.

     It is an error to used this flag with the frame pointer or stack
     pointer.  Use of this flag for other registers that have fixed
     pervasive roles in the machine's execution model will produce
     disastrous 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 allocable register saved by
     functions.  It may be allocated even for temporaries or variables
     that live across a call.  Functions compiled this way will save
     and restore the register REG if they use it.

     It is an error to used this flag with the frame pointer or stack
     pointer.  Use of this flag for other registers that have fixed
     pervasive roles in the machine's execution model will produce
     disastrous results.

     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.

`-fpack-struct'
     Pack all structure members together without holes.  Usually you
     would not want to use this option, since it makes the code
     suboptimal, and the offsets of structure members won't agree with
     system libraries.

`-fcheck-memory-usage'
     Generate extra code to check each memory access.  GCC will generate
     code that is suitable for a detector of bad memory accesses such as
     `Checker'.

     Normally, you should compile all, or none, of your code with this
     option.

     If you do mix code compiled with and without this option, you must
     ensure that all code that has side effects and that is called by
     code compiled with this option is, itself, compiled with this
     option.  If you do not, you might get erroneous messages from the
     detector.

     If you use functions from a library that have side-effects (such as
     `read'), you might not be able to recompile the library and
     specify this option.  In that case, you can enable the
     `-fprefix-function-name' option, which requests GCC to encapsulate
     your code and make other functions look as if they were compiled
     with `-fcheck-memory-usage'.  This is done by calling "stubs",
     which are provided by the detector.  If you cannot find or build
     stubs for every function you call, you might have to specify
     `-fcheck-memory-usage' without `-fprefix-function-name'.

     If you specify this option, you can not use the `asm' or `__asm__'
     keywords in functions with memory checking enabled.  The compiler
     cannot understand what the `asm' statement will do, and therefore
     cannot generate the appropriate code, so it is rejected.  However,
     the function attribute `no_check_memory_usage' will disable memory
     checking within a function, and `asm' statements can be put inside
     such functions.  Inline expansion of a non-checked function within
     a checked function is permitted; the inline function's memory
     accesses won't be checked, but the rest will.

     If you move your `asm' statements to non-checked inline functions,
     but they do access memory, you can add calls to the support code
     in your inline function, to indicate any reads, writes, or copies
     being done.  These calls would be similar to those done in the
     stubs described above.

`-fprefix-function-name'
     Request GCC to add a prefix to the symbols generated for function
     names.  GCC adds a prefix to the names of functions defined as
     well as functions called.  Code compiled with this option and code
     compiled without the option can't be linked together, unless stubs
     are used.

     If you compile the following code with `-fprefix-function-name'
          extern void bar (int);
          void
          foo (int a)
          {
            return bar (a + 5);
          }

     GCC will compile the code as if it was written:
          extern void prefix_bar (int);
          void
          prefix_foo (int a)
          {
            return prefix_bar (a + 5);
          }
     This option is designed to be used with `-fcheck-memory-usage'.

`-finstrument-functions'
     Generate instrumentation calls for entry and exit to functions.
     Just after function entry and just before function exit, the
     following profiling functions will be called with the address of
     the current function and its call site.  (On some platforms,
     `__builtin_return_address' does not work beyond the current
     function, so the call site information may not be available to the
     profiling functions otherwise.)

          void __cyg_profile_func_enter (void *this_fn, void *call_site);
          void __cyg_profile_func_exit  (void *this_fn, void *call_site);

     The first argument is the address of the start of the current
     function, which may be looked up exactly in the symbol table.

     This instrumentation is also done for functions expanded inline in
     other functions.  The profiling calls will indicate where,
     conceptually, the inline function is entered and exited.  This
     means that addressable versions of such functions must be
     available.  If all your uses of a function are expanded inline,
     this may mean an additional expansion of code size.  If you use
     `extern inline' in your C code, an addressable version of such
     functions must be provided.  (This is normally the case anyways,
     but if you get lucky and the optimizer always expands the
     functions inline, you might have gotten away without providing
     static copies.)

     A function may be given the attribute `no_instrument_function', in
     which case this instrumentation will not be done.  This can be
     used, for example, for the profiling functions listed above,
     high-priority interrupt routines, and any functions from which the
     profiling functions cannot safely be called (perhaps signal
     handlers, if the profiling routines generate output or allocate
     memory).

`-fstack-check'
     Generate code to verify that you do not go beyond the boundary of
     the stack.  You should specify this flag if you are running in an
     environment with multiple threads, but only rarely need to specify
     it in a single-threaded environment since stack overflow is
     automatically detected on nearly all systems if there is only one
     stack.

`-fargument-alias'
`-fargument-noalias'
`-fargument-noalias-global'
     Specify the possible relationships among parameters and between
     parameters and global data.

     `-fargument-alias' specifies that arguments (parameters) may alias
     each other and may alias global storage.  `-fargument-noalias'
     specifies that arguments do not alias each other, but may alias
     global storage.  `-fargument-noalias-global' specifies that
     arguments do not alias each other and do not alias global storage.

     Each language will automatically use whatever option is required by
     the language standard.  You should not need to use these options
     yourself.

`-fleading-underscore'
     This option and its counterpart, -fno-leading-underscore, forcibly
     change the way C symbols are represented in the object file.  One
     use is to help link with legacy assembly code.

     Be warned that you should know what you are doing when invoking
     this option, and that not all targets provide complete support for
     it.


automatically generated by info2www version 1.2.2.9