In certain situations you might need to generate real object files with -ipo. To force the compiler to produce real object files instead of "mock" ones with IPO, you must specify -ipo_obj in addition to -ipo.
Use of -ipo_obj is necessary under the following conditions:
The objects produced by the compilation phase
of -ipo will be placed in a static library without
the use of xiar. The compiler does not support
multifile IPO for static libraries, so all static libraries are passed
to the linker. Linking with a static library that contains "mock"
object files will result in linkage errors because the objects do not
contain real code or data. Specifying
-ipo_obj causes the compiler to generate object files that can
be used in static libraries.
Alternatively, if you create the static library using xiar, then the resulting static library will work as a normal library.
The objects produced by the compilation phase of -ipo might be linked without the -ipo option and without the use of xiar.
You want to generate an assembly listing for each source file (using -S) while compiling with -ipo. If you use -ipo with -S, but without -ipo_obj, the compiler issues a warning and an empty assembly file is produced for each compiled source file.