summaryrefslogtreecommitdiff
path: root/chromium/base/profiler/native_unwinder_android.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/base/profiler/native_unwinder_android.h')
-rw-r--r--chromium/base/profiler/native_unwinder_android.h34
1 files changed, 24 insertions, 10 deletions
diff --git a/chromium/base/profiler/native_unwinder_android.h b/chromium/base/profiler/native_unwinder_android.h
index 926a581b32a..62774e6adf5 100644
--- a/chromium/base/profiler/native_unwinder_android.h
+++ b/chromium/base/profiler/native_unwinder_android.h
@@ -6,14 +6,26 @@
#define BASE_PROFILER_NATIVE_UNWINDER_ANDROID_H_
#include "base/profiler/unwinder.h"
-
-namespace unwindstack {
-class Maps;
-class Memory;
-} // namespace unwindstack
+#include "third_party/libunwindstack/src/libunwindstack/include/unwindstack/Maps.h"
+#include "third_party/libunwindstack/src/libunwindstack/include/unwindstack/Memory.h"
namespace base {
+// Implementation of unwindstack::Memory that restricts memory access to a stack
+// buffer, used by NativeUnwinderAndroid. While unwinding, only memory accesses
+// within the stack should be performed to restore registers.
+class UnwindStackMemoryAndroid : public unwindstack::Memory {
+ public:
+ UnwindStackMemoryAndroid(uintptr_t stack_ptr, uintptr_t stack_top);
+ ~UnwindStackMemoryAndroid() override;
+
+ size_t Read(uint64_t addr, void* dst, size_t size) override;
+
+ private:
+ const uintptr_t stack_ptr_;
+ const uintptr_t stack_top_;
+};
+
// Native unwinder implementation for Android, using libunwindstack.
class NativeUnwinderAndroid : public Unwinder {
public:
@@ -22,10 +34,6 @@ class NativeUnwinderAndroid : public Unwinder {
// all profiles in a process.
static std::unique_ptr<unwindstack::Maps> CreateMaps();
static std::unique_ptr<unwindstack::Memory> CreateProcessMemory();
- // Adds modules found from executable loaded memory regions to |module_cache|.
- static void AddInitialModulesFromMaps(
- const unwindstack::Maps& memory_regions_map,
- ModuleCache* module_cache);
// |exclude_module_with_base_address| is used to exclude a specific module
// and let another unwinder take control. TryUnwind() will exit with
@@ -33,7 +41,7 @@ class NativeUnwinderAndroid : public Unwinder {
// encountered in that module.
NativeUnwinderAndroid(unwindstack::Maps* memory_regions_map,
unwindstack::Memory* process_memory,
- uintptr_t exclude_module_with_base_address = 0);
+ uintptr_t exclude_module_with_base_address);
~NativeUnwinderAndroid() override;
NativeUnwinderAndroid(const NativeUnwinderAndroid&) = delete;
@@ -47,6 +55,12 @@ class NativeUnwinderAndroid : public Unwinder {
ModuleCache* module_cache,
std::vector<Frame>* stack) const override;
+ // Adds modules found from executable loaded memory regions to |module_cache|.
+ // Public for test access.
+ static void AddInitialModulesFromMaps(
+ const unwindstack::Maps& memory_regions_map,
+ ModuleCache* module_cache);
+
private:
void EmitDexFrame(uintptr_t dex_pc,
ModuleCache* module_cache,