Microchip Technology SW006023-2 Data Sheet

Page of 238
MPLAB
®
 XC32 C/C++ Compiler User’s Guide
DS51686E-page 84
 2012 Microchip Technology Inc.
-finstrument-
 functions
Generate instrumentation calls for entry and exit to functions. Just 
after function entry and just before function exit, the following 
profiling functions are called with the address of the current 
function and its call site. 
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.
The profiling functions should be provided by the user.
Function instrumentation requires the use of a Frame Pointer. 
Some optimization levels disable the use of the Frame Pointer. 
Using -fno-omit-frame-pointer prevents this.
This instrumentation is also done for functions expanded inline in 
other functions. The profiling calls indicates 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.
A function may be given the attribute 
n
o_instrument_function
, in which case this instrumentation 
is not done.
-fno-ident
Ignore the #ident directive.
-fpack-struct
Pack all structure members together without holes. Usually you 
would not want to use this option, since it makes the code 
sub-optimal, and the offsets of structure members won’t agree with 
system libraries.
-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 capability between 32-bit compiled 
files and files compiled with other compilers.
Short structures and unions are those whose size and alignment 
match that of an integer type. 
-fno-short-double
By default, the compiler uses a double type equivalent to float. 
This option makes double equivalent to long double. Mixing 
this option across modules can have unexpected results if 
modules share double data either directly through argument 
passage or indirectly through shared buffer space. Libraries 
provided with the product function with either switch setting.
-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 is 
equivalent to the smallest integer type that has enough room.
-fverbose-asm
-fno-verbose-asm
Put extra commentary information in the generated assembly code 
to make it more readable.
-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 external and global data items 
to be volatile. The use of this switch has no effect on static data.
-fvolatile-static
Consider all memory references to static data to be volatile.
TABLE 3-18:
CODE GENERATION CONVENTION OPTIONS (CONTINUED)
Option
Definition