summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2021-07-14 17:01:15 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-07-14 17:01:15 +0000
commitab5c1c61fecabca2fb508b3ed9f7129ebc7a5828 (patch)
tree207f5949adcbc11cbbc0b48d59356f35b663c340
parent2dc33a769f7d36c1932a69ce0ceb642eed48f157 (diff)
parent8aaeebdaac90cbbee633672c8d406d1ea83819ab (diff)
downloadextras-ab5c1c61fecabca2fb508b3ed9f7129ebc7a5828.tar.gz
Merge "simpleperf: fix reading filev2 section."
-rw-r--r--simpleperf/record_file.h10
-rw-r--r--simpleperf/record_file_reader.cpp4
-rw-r--r--simpleperf/record_file_test.cpp2
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);
}
}