summaryrefslogtreecommitdiff
path: root/simpleperf
diff options
context:
space:
mode:
authorTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2024-05-17 22:13:31 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-05-17 22:13:31 +0000
commit0f520aba0ec447bf177c1c1ec6676d9d50f50295 (patch)
tree57dbd28356f780e47d07e75109a8caffe7c8e04b /simpleperf
parentf3b1b8712ad41060570f4ff7930f8f169fc84742 (diff)
parent3a22c2e5ad5fe18326cc334fab4032da272cf11c (diff)
downloadextras-master.tar.gz
Merge "simpleperf: inject: Fix a segfault error when parsing vmlinux data" into mainHEADmastermain
Diffstat (limited to 'simpleperf')
-rw-r--r--simpleperf/cmd_inject.cpp66
1 files changed, 31 insertions, 35 deletions
diff --git a/simpleperf/cmd_inject.cpp b/simpleperf/cmd_inject.cpp
index 8dec235b..6798a32a 100644
--- a/simpleperf/cmd_inject.cpp
+++ b/simpleperf/cmd_inject.cpp
@@ -686,53 +686,49 @@ class AutoFDOWriter {
uint64_t base_addr = binary.first_load_segment_addr;
// Write range_count_map. Sort the output by addrs.
- std::vector<AddrPair> addr_pairs;
- for (const auto& p : binary.range_count_map) {
- AddrPair addrs = p.first;
- if (addrs.first >= base_addr && addrs.second >= base_addr) {
- addrs.first -= base_addr;
- addrs.second -= base_addr;
- addr_pairs.emplace_back(addrs);
+ std::vector<std::pair<AddrPair, uint64_t>> range_counts;
+ for (std::pair<AddrPair, uint64_t> p : binary.range_count_map) {
+ if (p.first.first >= base_addr && p.first.second >= base_addr) {
+ p.first.first -= base_addr;
+ p.first.second -= base_addr;
+ range_counts.emplace_back(p);
}
}
- std::sort(addr_pairs.begin(), addr_pairs.end());
- fprintf(output_fp.get(), "%zu\n", addr_pairs.size());
- for (const auto& addrs : addr_pairs) {
- fprintf(output_fp.get(), "%" PRIx64 "-%" PRIx64 ":%" PRIu64 "\n", addrs.first, addrs.second,
- binary.range_count_map.find(addrs)->second);
+ std::sort(range_counts.begin(), range_counts.end());
+ fprintf(output_fp.get(), "%zu\n", range_counts.size());
+ for (const auto& p : range_counts) {
+ fprintf(output_fp.get(), "%" PRIx64 "-%" PRIx64 ":%" PRIu64 "\n", p.first.first,
+ p.first.second, p.second);
}
// Write addr_count_map. Sort the output by addrs.
- std::vector<uint64_t> addrs;
- for (const auto& p : binary.address_count_map) {
- uint64_t addr = p.first;
- if (addr >= base_addr) {
- addr -= base_addr;
- addrs.push_back(addr);
+ std::vector<std::pair<uint64_t, uint64_t>> address_counts;
+ for (std::pair<uint64_t, uint64_t> p : binary.address_count_map) {
+ if (p.first >= base_addr) {
+ p.first -= base_addr;
+ address_counts.emplace_back(p);
}
}
- std::sort(addrs.begin(), addrs.end());
- fprintf(output_fp.get(), "%zu\n", addrs.size());
- for (const auto& addr : addrs) {
- fprintf(output_fp.get(), "%" PRIx64 ":%" PRIu64 "\n", addr,
- binary.address_count_map.find(addr)->second);
+ std::sort(address_counts.begin(), address_counts.end());
+ fprintf(output_fp.get(), "%zu\n", address_counts.size());
+ for (const auto& p : address_counts) {
+ fprintf(output_fp.get(), "%" PRIx64 ":%" PRIu64 "\n", p.first, p.second);
}
// Write branch_count_map. Sort the output by addrs.
- addr_pairs.clear();
- for (const auto& p : binary.branch_count_map) {
- AddrPair addrs = p.first;
- if (addrs.first >= base_addr) {
- addrs.first -= base_addr;
- addrs.second = (addrs.second >= base_addr) ? (addrs.second - base_addr) : 0;
- addr_pairs.emplace_back(addrs);
+ std::vector<std::pair<AddrPair, uint64_t>> branch_counts;
+ for (std::pair<AddrPair, uint64_t> p : binary.branch_count_map) {
+ if (p.first.first >= base_addr) {
+ p.first.first -= base_addr;
+ p.first.second = (p.first.second >= base_addr) ? (p.first.second - base_addr) : 0;
+ branch_counts.emplace_back(p);
}
}
- std::sort(addr_pairs.begin(), addr_pairs.end());
- fprintf(output_fp.get(), "%zu\n", addr_pairs.size());
- for (const auto& addrs : addr_pairs) {
- fprintf(output_fp.get(), "%" PRIx64 "->%" PRIx64 ":%" PRIu64 "\n", addrs.first,
- addrs.second, binary.branch_count_map.find(addrs)->second);
+ std::sort(branch_counts.begin(), branch_counts.end());
+ fprintf(output_fp.get(), "%zu\n", branch_counts.size());
+ for (const auto& p : branch_counts) {
+ fprintf(output_fp.get(), "%" PRIx64 "->%" PRIx64 ":%" PRIu64 "\n", p.first.first,
+ p.first.second, p.second);
}
// Write the binary path in comment.