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/tests/ArmExidxExtractTest.cpp b/libunwindstack/tests/ArmExidxExtractTest.cpp
index 021765a..aed75bf 100644
--- a/libunwindstack/tests/ArmExidxExtractTest.cpp
+++ b/libunwindstack/tests/ArmExidxExtractTest.cpp
@@ -53,16 +53,16 @@
 }
 
 TEST_F(ArmExidxExtractTest, cant_unwind) {
-  elf_memory_.SetData(0x1000, 0x7fff2340);
-  elf_memory_.SetData(0x1004, 1);
+  elf_memory_.SetData32(0x1000, 0x7fff2340);
+  elf_memory_.SetData32(0x1004, 1);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x1000));
   ASSERT_EQ(ARM_STATUS_NO_UNWIND, exidx_->status());
   ASSERT_TRUE(data_->empty());
 }
 
 TEST_F(ArmExidxExtractTest, compact) {
-  elf_memory_.SetData(0x4000, 0x7ffa3000);
-  elf_memory_.SetData(0x4004, 0x80a8b0b0);
+  elf_memory_.SetData32(0x4000, 0x7ffa3000);
+  elf_memory_.SetData32(0x4004, 0x80a8b0b0);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x4000));
   ASSERT_EQ(3U, data_->size());
   ASSERT_EQ(0xa8, data_->at(0));
@@ -71,8 +71,8 @@
 
   // Missing finish gets added.
   elf_memory_.Clear();
-  elf_memory_.SetData(0x534, 0x7ffa3000);
-  elf_memory_.SetData(0x538, 0x80a1a2a3);
+  elf_memory_.SetData32(0x534, 0x7ffa3000);
+  elf_memory_.SetData32(0x538, 0x80a1a2a3);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x534));
   ASSERT_EQ(4U, data_->size());
   ASSERT_EQ(0xa1, data_->at(0));
@@ -82,29 +82,29 @@
 }
 
 TEST_F(ArmExidxExtractTest, compact_non_zero_personality) {
-  elf_memory_.SetData(0x4000, 0x7ffa3000);
+  elf_memory_.SetData32(0x4000, 0x7ffa3000);
 
   uint32_t compact_value = 0x80a8b0b0;
   for (size_t i = 1; i < 16; i++) {
-    elf_memory_.SetData(0x4004, compact_value | (i << 24));
+    elf_memory_.SetData32(0x4004, compact_value | (i << 24));
     ASSERT_FALSE(exidx_->ExtractEntryData(0x4000));
     ASSERT_EQ(ARM_STATUS_INVALID_PERSONALITY, exidx_->status());
   }
 }
 
 TEST_F(ArmExidxExtractTest, second_read_compact_personality_1_2) {
-  elf_memory_.SetData(0x5000, 0x1234);
-  elf_memory_.SetData(0x5004, 0x00001230);
-  elf_memory_.SetData(0x6234, 0x8100f3b0);
+  elf_memory_.SetData32(0x5000, 0x1234);
+  elf_memory_.SetData32(0x5004, 0x00001230);
+  elf_memory_.SetData32(0x6234, 0x8100f3b0);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(2U, data_->size());
   ASSERT_EQ(0xf3, data_->at(0));
   ASSERT_EQ(0xb0, data_->at(1));
 
   elf_memory_.Clear();
-  elf_memory_.SetData(0x5000, 0x1234);
-  elf_memory_.SetData(0x5004, 0x00001230);
-  elf_memory_.SetData(0x6234, 0x8200f3f4);
+  elf_memory_.SetData32(0x5000, 0x1234);
+  elf_memory_.SetData32(0x5004, 0x00001230);
+  elf_memory_.SetData32(0x6234, 0x8200f3f4);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(3U, data_->size());
   ASSERT_EQ(0xf3, data_->at(0));
@@ -112,10 +112,10 @@
   ASSERT_EQ(0xb0, data_->at(2));
 
   elf_memory_.Clear();
-  elf_memory_.SetData(0x5000, 0x1234);
-  elf_memory_.SetData(0x5004, 0x00001230);
-  elf_memory_.SetData(0x6234, 0x8201f3f4);
-  elf_memory_.SetData(0x6238, 0x102030b0);
+  elf_memory_.SetData32(0x5000, 0x1234);
+  elf_memory_.SetData32(0x5004, 0x00001230);
+  elf_memory_.SetData32(0x6234, 0x8201f3f4);
+  elf_memory_.SetData32(0x6238, 0x102030b0);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(6U, data_->size());
   ASSERT_EQ(0xf3, data_->at(0));
@@ -126,12 +126,12 @@
   ASSERT_EQ(0xb0, data_->at(5));
 
   elf_memory_.Clear();
-  elf_memory_.SetData(0x5000, 0x1234);
-  elf_memory_.SetData(0x5004, 0x00001230);
-  elf_memory_.SetData(0x6234, 0x8103f3f4);
-  elf_memory_.SetData(0x6238, 0x10203040);
-  elf_memory_.SetData(0x623c, 0x50607080);
-  elf_memory_.SetData(0x6240, 0x90a0c0d0);
+  elf_memory_.SetData32(0x5000, 0x1234);
+  elf_memory_.SetData32(0x5004, 0x00001230);
+  elf_memory_.SetData32(0x6234, 0x8103f3f4);
+  elf_memory_.SetData32(0x6238, 0x10203040);
+  elf_memory_.SetData32(0x623c, 0x50607080);
+  elf_memory_.SetData32(0x6240, 0x90a0c0d0);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(15U, data_->size());
   ASSERT_EQ(0xf3, data_->at(0));
@@ -152,33 +152,33 @@
 }
 
 TEST_F(ArmExidxExtractTest, second_read_compact_personality_illegal) {
-  elf_memory_.SetData(0x5000, 0x7ffa1e48);
-  elf_memory_.SetData(0x5004, 0x1230);
-  elf_memory_.SetData(0x6234, 0x832132b0);
+  elf_memory_.SetData32(0x5000, 0x7ffa1e48);
+  elf_memory_.SetData32(0x5004, 0x1230);
+  elf_memory_.SetData32(0x6234, 0x832132b0);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_INVALID_PERSONALITY, exidx_->status());
 
   elf_memory_.Clear();
-  elf_memory_.SetData(0x5000, 0x7ffa1e48);
-  elf_memory_.SetData(0x5004, 0x1230);
-  elf_memory_.SetData(0x6234, 0x842132b0);
+  elf_memory_.SetData32(0x5000, 0x7ffa1e48);
+  elf_memory_.SetData32(0x5004, 0x1230);
+  elf_memory_.SetData32(0x6234, 0x842132b0);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_INVALID_PERSONALITY, exidx_->status());
 }
 
 TEST_F(ArmExidxExtractTest, second_read_offset_is_negative) {
-  elf_memory_.SetData(0x5000, 0x7ffa1e48);
-  elf_memory_.SetData(0x5004, 0x7fffb1e0);
-  elf_memory_.SetData(0x1e4, 0x842132b0);
+  elf_memory_.SetData32(0x5000, 0x7ffa1e48);
+  elf_memory_.SetData32(0x5004, 0x7fffb1e0);
+  elf_memory_.SetData32(0x1e4, 0x842132b0);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_INVALID_PERSONALITY, exidx_->status());
 }
 
 TEST_F(ArmExidxExtractTest, second_read_not_compact) {
-  elf_memory_.SetData(0x5000, 0x1234);
-  elf_memory_.SetData(0x5004, 0x00001230);
-  elf_memory_.SetData(0x6234, 0x1);
-  elf_memory_.SetData(0x6238, 0x001122b0);
+  elf_memory_.SetData32(0x5000, 0x1234);
+  elf_memory_.SetData32(0x5004, 0x00001230);
+  elf_memory_.SetData32(0x6234, 0x1);
+  elf_memory_.SetData32(0x6238, 0x001122b0);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(3U, data_->size());
   ASSERT_EQ(0x11, data_->at(0));
@@ -186,10 +186,10 @@
   ASSERT_EQ(0xb0, data_->at(2));
 
   elf_memory_.Clear();
-  elf_memory_.SetData(0x5000, 0x1234);
-  elf_memory_.SetData(0x5004, 0x00001230);
-  elf_memory_.SetData(0x6234, 0x2);
-  elf_memory_.SetData(0x6238, 0x00112233);
+  elf_memory_.SetData32(0x5000, 0x1234);
+  elf_memory_.SetData32(0x5004, 0x00001230);
+  elf_memory_.SetData32(0x6234, 0x2);
+  elf_memory_.SetData32(0x6238, 0x00112233);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(4U, data_->size());
   ASSERT_EQ(0x11, data_->at(0));
@@ -198,11 +198,11 @@
   ASSERT_EQ(0xb0, data_->at(3));
 
   elf_memory_.Clear();
-  elf_memory_.SetData(0x5000, 0x1234);
-  elf_memory_.SetData(0x5004, 0x00001230);
-  elf_memory_.SetData(0x6234, 0x3);
-  elf_memory_.SetData(0x6238, 0x01112233);
-  elf_memory_.SetData(0x623c, 0x445566b0);
+  elf_memory_.SetData32(0x5000, 0x1234);
+  elf_memory_.SetData32(0x5004, 0x00001230);
+  elf_memory_.SetData32(0x6234, 0x3);
+  elf_memory_.SetData32(0x6238, 0x01112233);
+  elf_memory_.SetData32(0x623c, 0x445566b0);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(7U, data_->size());
   ASSERT_EQ(0x11, data_->at(0));
@@ -214,15 +214,15 @@
   ASSERT_EQ(0xb0, data_->at(6));
 
   elf_memory_.Clear();
-  elf_memory_.SetData(0x5000, 0x1234);
-  elf_memory_.SetData(0x5004, 0x00001230);
-  elf_memory_.SetData(0x6234, 0x3);
-  elf_memory_.SetData(0x6238, 0x05112233);
-  elf_memory_.SetData(0x623c, 0x01020304);
-  elf_memory_.SetData(0x6240, 0x05060708);
-  elf_memory_.SetData(0x6244, 0x090a0b0c);
-  elf_memory_.SetData(0x6248, 0x0d0e0f10);
-  elf_memory_.SetData(0x624c, 0x11121314);
+  elf_memory_.SetData32(0x5000, 0x1234);
+  elf_memory_.SetData32(0x5004, 0x00001230);
+  elf_memory_.SetData32(0x6234, 0x3);
+  elf_memory_.SetData32(0x6238, 0x05112233);
+  elf_memory_.SetData32(0x623c, 0x01020304);
+  elf_memory_.SetData32(0x6240, 0x05060708);
+  elf_memory_.SetData32(0x6244, 0x090a0b0c);
+  elf_memory_.SetData32(0x6248, 0x0d0e0f10);
+  elf_memory_.SetData32(0x624c, 0x11121314);
   ASSERT_TRUE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(24U, data_->size());
   ASSERT_EQ(0x11, data_->at(0));
@@ -255,43 +255,43 @@
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_READ_FAILED, exidx_->status());
 
-  elf_memory_.SetData(0x5000, 0x100);
+  elf_memory_.SetData32(0x5000, 0x100);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_READ_FAILED, exidx_->status());
 
-  elf_memory_.SetData(0x5004, 0x100);
+  elf_memory_.SetData32(0x5004, 0x100);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_READ_FAILED, exidx_->status());
 
-  elf_memory_.SetData(0x5104, 0x1);
+  elf_memory_.SetData32(0x5104, 0x1);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_READ_FAILED, exidx_->status());
 
-  elf_memory_.SetData(0x5108, 0x01010203);
+  elf_memory_.SetData32(0x5108, 0x01010203);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_READ_FAILED, exidx_->status());
 }
 
 TEST_F(ArmExidxExtractTest, malformed) {
-  elf_memory_.SetData(0x5000, 0x100);
-  elf_memory_.SetData(0x5004, 0x100);
-  elf_memory_.SetData(0x5104, 0x1);
-  elf_memory_.SetData(0x5108, 0x06010203);
+  elf_memory_.SetData32(0x5000, 0x100);
+  elf_memory_.SetData32(0x5004, 0x100);
+  elf_memory_.SetData32(0x5104, 0x1);
+  elf_memory_.SetData32(0x5108, 0x06010203);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_MALFORMED, exidx_->status());
 
   elf_memory_.Clear();
-  elf_memory_.SetData(0x5000, 0x100);
-  elf_memory_.SetData(0x5004, 0x100);
-  elf_memory_.SetData(0x5104, 0x1);
-  elf_memory_.SetData(0x5108, 0x81060203);
+  elf_memory_.SetData32(0x5000, 0x100);
+  elf_memory_.SetData32(0x5004, 0x100);
+  elf_memory_.SetData32(0x5104, 0x1);
+  elf_memory_.SetData32(0x5108, 0x81060203);
   ASSERT_FALSE(exidx_->ExtractEntryData(0x5000));
   ASSERT_EQ(ARM_STATUS_MALFORMED, exidx_->status());
 }
 
 TEST_F(ArmExidxExtractTest, cant_unwind_log) {
-  elf_memory_.SetData(0x1000, 0x7fff2340);
-  elf_memory_.SetData(0x1004, 1);
+  elf_memory_.SetData32(0x1000, 0x7fff2340);
+  elf_memory_.SetData32(0x1004, 1);
 
   exidx_->set_log(true);
   exidx_->set_log_indent(0);
@@ -305,8 +305,8 @@
 }
 
 TEST_F(ArmExidxExtractTest, raw_data_compact) {
-  elf_memory_.SetData(0x4000, 0x7ffa3000);
-  elf_memory_.SetData(0x4004, 0x80a8b0b0);
+  elf_memory_.SetData32(0x4000, 0x7ffa3000);
+  elf_memory_.SetData32(0x4004, 0x80a8b0b0);
 
   exidx_->set_log(true);
   exidx_->set_log_indent(0);
@@ -317,10 +317,10 @@
 }
 
 TEST_F(ArmExidxExtractTest, raw_data_non_compact) {
-  elf_memory_.SetData(0x5000, 0x1234);
-  elf_memory_.SetData(0x5004, 0x00001230);
-  elf_memory_.SetData(0x6234, 0x2);
-  elf_memory_.SetData(0x6238, 0x00112233);
+  elf_memory_.SetData32(0x5000, 0x1234);
+  elf_memory_.SetData32(0x5004, 0x00001230);
+  elf_memory_.SetData32(0x6234, 0x2);
+  elf_memory_.SetData32(0x6238, 0x00112233);
 
   exidx_->set_log(true);
   exidx_->set_log_indent(0);