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