From: Arnaldo Carvalho de Melo<acme@xxxxxxxxxx>
Now 'perf record' will intercept PERF_RECORD_MMAP calls, creating a
linked list of DSOs, then when the session finishes, it will traverse
this list and read the buildids, stashing them at the end of the file
and will set up a new feature bit in the header bitmask.
'perf report' will then notice this feature and populate the 'dsos' list
and set the build ids.
When reading the symtabs it will refuse to load from a file that doesn't
have the same build id.
Example:
[root@doppio ~]# perf report | head
/home/acme/bin/perf with build id b1ea544ac3746e7538972548a09aadecc5753868 not found, continuing without symbols
# Samples: 2621434559
#
# Overhead Command Shared Object Symbol
# ........ ............... ............................. ......
#
7.91% init [kernel] [k] read_hpet
7.64% init [kernel] [k] mwait_idle_with_hints
7.60% swapper [kernel] [k] read_hpet
7.60% swapper [kernel] [k] mwait_idle_with_hints
3.65% init [kernel] [k] 0xffffffffa02339d9
[root@doppio ~]#
In this case the 'perf' binary was an older one, vanished, so it the symbols
probably wouldn't match.
Next patches will support the kernel as well, reading the build id notes for it
and the modules from /sys.
Another patch should also introduce a new plumbing command:
'perf list-buildids'
that will then be used in porcelain that is distro specific to
fetch -debuginfo packages where such buildids are present. This will in turn
allow for one to run 'perf record' in one machine and 'perf report' in another.