diff options
Diffstat (limited to 'simpleperf/OfflineUnwinder_impl.h')
-rw-r--r-- | simpleperf/OfflineUnwinder_impl.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/simpleperf/OfflineUnwinder_impl.h b/simpleperf/OfflineUnwinder_impl.h index 01f03369..1a523547 100644 --- a/simpleperf/OfflineUnwinder_impl.h +++ b/simpleperf/OfflineUnwinder_impl.h @@ -17,6 +17,7 @@ #pragma once #include <unwindstack/Maps.h> +#include <unwindstack/Regs.h> #include "thread_tree.h" @@ -31,4 +32,23 @@ class UnwindMaps : public unwindstack::Maps { std::vector<const MapEntry*> entries_; }; +class OfflineUnwinderImpl : public OfflineUnwinder { + public: + OfflineUnwinderImpl(bool collect_stat) : collect_stat_(collect_stat) { + unwindstack::Elf::SetCachingEnabled(true); + } + + bool UnwindCallChain(const ThreadEntry& thread, const RegSet& regs, const char* stack, + size_t stack_size, std::vector<uint64_t>* ips, + std::vector<uint64_t>* sps) override; + + void LoadMetaInfo(const std::unordered_map<std::string, std::string>& info_map) override; + unwindstack::Regs* GetBacktraceRegs(const RegSet& regs); + + private: + bool collect_stat_; + std::unordered_map<pid_t, UnwindMaps> cached_maps_; + uint64_t arm64_pac_mask_ = 0; +}; + } // namespace simpleperf |