HP-UX Linker and Libraries User's Guide
To profile shared libraries, you must set the environment variable SHLIB_FLOW_DATA to the file
that receives profile data. Unlike FLOW_DATA, SHLIB_FLOW_DATA has no default output file. If
SHLIB_FLOW_DATA is not set, profile data is not collected. This allows you to activate or suspend
the profiling of instrumented shared libraries.
Note that you can set SHLIB_FLOW_DATA to flow.data which is the same file as the default setting
for FLOW_DATA. But, again, profile data can be collected from shared libraries only if you explicitly
set SHLIB_FLOW_DATA to some output file. The following is an example for instrumenting, profiling,
and optimizing a shared library:
$ cc +z +I -c -O libcode.c //Create I-SOM files.
$ ld -b -I libcode.o -o mylib.inst.sl //Create instrumented sl.
$ cc main.c mylib.inst.sl //Create executable a.out file.
$ export SHLIB_FLOW_DATA=./flow.data //Specify output file for profile data
$ a.out < input_file //Run instrumented executable with
representative input data.
$ ld -b -P +pgm mylib.inst.sl \ //Perform PBO.
libcode.o -o mylib.sl
Note that the name used in the database is the output pathname specified when the instrumented
library is linked (mylib.inst.sl in the example above), regardless of how the library might be
moved or renamed after it is created.
Using PBO with ld -r
Beginning with the HP-UX 10.0 release, you can take greater advantage of PBO on merged object
files created with the -r linker option.
Briefly, ld -r combines multiple .o files into a single .o file. It is often used in large product
builds to combine objects into more manageable units. It is also often used in combination with
the linker -h option to hide symbols that may conflict with other subsystems in a large application.
(See Hiding Symbols with -h for more information on ld -h.)
In HP-UX 10.0, the subspaces in the merged .o file produced by ld -r are relocatable which
allows for greater optimization. The following is an example of using PBO with ld -r:
$ cc +I -c file1.c file2.c //Create individual I-SOM files
$ ld -r -I -o reloc.o file1.o file2.o //Build relocatable, merged file
$ cc +I -o a.out reloc.o //Create instrumented executable file.
$ a.out < input_file //Run instrumented executable
with representative input data.
$ ld -r -P +pgm a.out -o reloc.o \
file1.o file2.o //Rebuild relocatable file for PBO.
$ cc +P -o a.out reloc.o //Perform PBO on the final executable
file.
Notice, in the example above, that the +pgm option was necessary because the output file name
differs from the instrumented program file name.
NOTE: If you are using -r and C++ templates, check "Known Limitations" in the HP C++ Release
Notes for possible limitations.
Linker Optimizations 213