Address-to-Name resolution in the splat command
The lock instrumentation in the kernel and PThread library is what captures the information for each lock event.
Data addresses are used to identify locks; instruction addresses are used to identify the point of execution. These addresses are captured in the event records in the trace, and used by the splatcommand to identify the locks and the functions that operate on them.
However, these addresses are not of much use to the programmer, who would rather know the names of the lock and function declarations so that they can be located in the program source files. The conversion of names to addresses is determined by the compiler and loader, and can be captured in a file using the gensyms command. The gensyms command also captures the contents of the /usr/include/sys/lockname.h file, which declares classes of kernel locks.
The gensyms output file is passed to the splat command with the -n flag. When splat reports on a kernel lock, it provides the best identification that it can.
Kernel locks that are declared are resolved by name. Locks that are created dynamically are identified by class if their class name is given when they are created. The libpthreads.a instrumentation is not equipped to capture names or classes of PThread synchronizers, so they are always identified by address only.