simpleperf: fix an abort caused by ip zero in kernel callchain.
When the kernel fails to unwind a kernel callchain, it may generate
zero ip address. RecordFileReader::ReadRecord() removes zero ips in
kernel callchain by adjusting r->callchain_data.ip_nr. However, it
will make a check in SampleRecord::BuildBinaryWithNewCallChain() abort.
This patch fixes it by moving the logic of erasing zero ip addresses
to SampleRecord::AdjustCallChainGeneratedByKernel(), which replaces
zero ip address with a context value, which will not be shown to user.
Also change SampleRecord::ExcludeKernelCallChain() to support
consecutive context values in callchain, which may be generated by
SampleRecord::AdjustCallChainGeneratedByKernel().
Bug: none
Test: run simpleperf_unit_test
Change-Id: I85e5bfc4bf2bfddfbd2925748fa89d6e28d69ffc
9 files changed