diff options
author | Yabin Cui <yabinc@google.com> | 2021-07-14 17:01:15 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-07-14 17:01:15 +0000 |
commit | ab5c1c61fecabca2fb508b3ed9f7129ebc7a5828 (patch) | |
tree | 207f5949adcbc11cbbc0b48d59356f35b663c340 | |
parent | 2dc33a769f7d36c1932a69ce0ceb642eed48f157 (diff) | |
parent | 8aaeebdaac90cbbee633672c8d406d1ea83819ab (diff) | |
download | extras-ab5c1c61fecabca2fb508b3ed9f7129ebc7a5828.tar.gz |
Merge "simpleperf: fix reading filev2 section."
-rw-r--r-- | simpleperf/record_file.h | 10 | ||||
-rw-r--r-- | simpleperf/record_file_reader.cpp | 4 | ||||
-rw-r--r-- | simpleperf/record_file_test.cpp | 2 |
3 files changed, 13 insertions, 3 deletions
diff --git a/simpleperf/record_file.h b/simpleperf/record_file.h index 8733c277..9c1a22ff 100644 --- a/simpleperf/record_file.h +++ b/simpleperf/record_file.h @@ -50,6 +50,16 @@ struct FileFeature { FileFeature() {} + void Clear() { + path.clear(); + type = DSO_UNKNOWN_FILE; + min_vaddr = 0; + file_offset_of_min_vaddr = 0; + symbols.clear(); + symbol_ptrs.clear(); + dex_file_offsets.clear(); + } + DISALLOW_COPY_AND_ASSIGN(FileFeature); }; diff --git a/simpleperf/record_file_reader.cpp b/simpleperf/record_file_reader.cpp index 22277d40..5bf80cab 100644 --- a/simpleperf/record_file_reader.cpp +++ b/simpleperf/record_file_reader.cpp @@ -488,6 +488,7 @@ std::vector<uint64_t> RecordFileReader::ReadAuxTraceFeature() { } bool RecordFileReader::ReadFileFeature(size_t& read_pos, FileFeature* file) { + file->Clear(); if (HasFeature(FEAT_FILE)) { return ReadFileV1Feature(read_pos, file); } @@ -534,7 +535,6 @@ bool RecordFileReader::ReadFileV1Feature(size_t& read_pos, FileFeature* file) { MoveFromBinaryFormat(file->min_vaddr, p); uint32_t symbol_count; MoveFromBinaryFormat(symbol_count, p); - file->symbols.clear(); file->symbols.reserve(symbol_count); for (uint32_t i = 0; i < symbol_count; ++i) { uint64_t start_vaddr; @@ -545,7 +545,6 @@ bool RecordFileReader::ReadFileV1Feature(size_t& read_pos, FileFeature* file) { p += name.size() + 1; file->symbols.emplace_back(name, start_vaddr, len); } - file->dex_file_offsets.clear(); if (file->type == DSO_DEX_FILE) { uint32_t offset_count; MoveFromBinaryFormat(offset_count, p); @@ -592,7 +591,6 @@ bool RecordFileReader::ReadFileV2Feature(size_t& read_pos, FileFeature* file) { file->path = proto_file.path(); file->type = static_cast<DsoType>(proto_file.type()); file->min_vaddr = proto_file.min_vaddr(); - file->symbols.clear(); file->symbols.reserve(proto_file.symbol_size()); for (size_t i = 0; i < proto_file.symbol_size(); i++) { const auto& proto_symbol = proto_file.symbol(i); diff --git a/simpleperf/record_file_test.cpp b/simpleperf/record_file_test.cpp index 31c942c2..bf0436ad 100644 --- a/simpleperf/record_file_test.cpp +++ b/simpleperf/record_file_test.cpp @@ -246,8 +246,10 @@ TEST_F(RecordFileTest, write_file2_feature_section) { if (file.type == DSO_DEX_FILE) { ASSERT_EQ(file.dex_file_offsets, expected_file.dex_file_offsets); } else if (file.type == DSO_ELF_FILE) { + ASSERT_TRUE(file.dex_file_offsets.empty()); ASSERT_EQ(file.file_offset_of_min_vaddr, expected_file.file_offset_of_min_vaddr); } else if (file.type == DSO_KERNEL_MODULE) { + ASSERT_TRUE(file.dex_file_offsets.empty()); ASSERT_EQ(file.file_offset_of_min_vaddr, expected_file.file_offset_of_min_vaddr); } } |