diff options
author | Yabin Cui <yabinc@google.com> | 2015-07-01 16:16:57 -0700 |
---|---|---|
committer | Yabin Cui <yabinc@google.com> | 2015-07-06 13:11:28 -0700 |
commit | 638c558339b7f1ae0ed95f64bcf7dbc5b238ed83 (patch) | |
tree | c1d44b5fb66b1ff0cef713bdcc6fb9a1f196230e /simpleperf/record_file_reader.cpp | |
parent | 5e007c3d699d6509cc88865b40dfc0c5eda36bfa (diff) | |
download | extras-638c558339b7f1ae0ed95f64bcf7dbc5b238ed83.tar.gz |
Simpleperf: check build id in report command.
1. refactor BuildId type.
2. check build id before parsing symbols in report command.
Bug: 22179177
Change-Id: Iefc797a88d4a168e109db786105120c8d6914369
Diffstat (limited to 'simpleperf/record_file_reader.cpp')
-rw-r--r-- | simpleperf/record_file_reader.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/simpleperf/record_file_reader.cpp b/simpleperf/record_file_reader.cpp index 8407d32b..b78af51f 100644 --- a/simpleperf/record_file_reader.cpp +++ b/simpleperf/record_file_reader.cpp @@ -196,3 +196,25 @@ std::vector<std::string> RecordFileReader::ReadCmdlineFeature() { } return cmdline; } + +std::vector<BuildIdRecord> RecordFileReader::ReadBuildIdFeature() { + const std::map<int, SectionDesc>& section_map = FeatureSectionDescriptors(); + auto it = section_map.find(FEAT_BUILD_ID); + if (it == section_map.end()) { + return std::vector<BuildIdRecord>(); + } + SectionDesc section = it->second; + const char* p = DataAtOffset(section.offset); + const char* end = DataAtOffset(section.offset + section.size); + std::vector<BuildIdRecord> result; + while (p < end) { + const perf_event_header* header = reinterpret_cast<const perf_event_header*>(p); + CHECK_LE(p + header->size, end); + BuildIdRecord record(header); + // Set type explicitly as the perf.data produced by perf doesn't set it. + record.header.type = PERF_RECORD_BUILD_ID; + result.push_back(record); + p += header->size; + } + return result; +} |