Elf interface for new unwinder.
This cl includes the code to read arm unwind information from a shared
library.
Bug: 23762183
Test: Passes all unit tests. I can dump the arm unwind information
Test: for an arm shared library.
Change-Id: I43501ea2eab843b81de8bd5128401dd1971af8d3
diff --git a/libunwindstack/ArmExidx.h b/libunwindstack/ArmExidx.h
index a92caef..8c7f15a 100644
--- a/libunwindstack/ArmExidx.h
+++ b/libunwindstack/ArmExidx.h
@@ -21,8 +21,9 @@
#include <deque>
-#include "Memory.h"
-#include "Regs.h"
+// Forward declarations.
+class Memory;
+class RegsArm;
enum ArmStatus : size_t {
ARM_STATUS_NONE = 0,
@@ -43,7 +44,7 @@
class ArmExidx {
public:
- ArmExidx(Regs32* regs, Memory* elf_memory, Memory* process_memory)
+ ArmExidx(RegsArm* regs, Memory* elf_memory, Memory* process_memory)
: regs_(regs), elf_memory_(elf_memory), process_memory_(process_memory) {}
virtual ~ArmExidx() {}
@@ -59,11 +60,14 @@
ArmStatus status() { return status_; }
- Regs32* regs() { return regs_; }
+ RegsArm* regs() { return regs_; }
uint32_t cfa() { return cfa_; }
void set_cfa(uint32_t cfa) { cfa_ = cfa; }
+ bool pc_set() { return pc_set_; }
+ void set_pc_set(bool pc_set) { pc_set_ = pc_set; }
+
void set_log(bool log) { log_ = log; }
void set_log_skip_execution(bool skip_execution) { log_skip_execution_ = skip_execution; }
void set_log_indent(uint8_t indent) { log_indent_ = indent; }
@@ -87,7 +91,7 @@
bool DecodePrefix_11_010(uint8_t byte);
bool DecodePrefix_11(uint8_t byte);
- Regs32* regs_ = nullptr;
+ RegsArm* regs_ = nullptr;
uint32_t cfa_ = 0;
std::deque<uint8_t> data_;
ArmStatus status_ = ARM_STATUS_NONE;
@@ -98,6 +102,7 @@
bool log_ = false;
uint8_t log_indent_ = 0;
bool log_skip_execution_ = false;
+ bool pc_set_ = false;
};
#endif // _LIBUNWINDSTACK_ARM_EXIDX_H