diff options
Diffstat (limited to 'libunwindstack/tests/DwarfDebugFrameTest.cpp')
-rw-r--r-- | libunwindstack/tests/DwarfDebugFrameTest.cpp | 58 |
1 files changed, 48 insertions, 10 deletions
diff --git a/libunwindstack/tests/DwarfDebugFrameTest.cpp b/libunwindstack/tests/DwarfDebugFrameTest.cpp index c28a41edb..3a5204463 100644 --- a/libunwindstack/tests/DwarfDebugFrameTest.cpp +++ b/libunwindstack/tests/DwarfDebugFrameTest.cpp @@ -103,7 +103,7 @@ TYPED_TEST_P(DwarfDebugFrameTest, Init32) { this->memory_.SetData32(0x5508, 0x4500); this->memory_.SetData32(0x550c, 0x500); - ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x600)); + ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x600, 0)); ASSERT_EQ(4U, this->debug_frame_->TestGetFdeCount()); typename DwarfDebugFrame<TypeParam>::FdeInfo info(0, 0, 0); @@ -142,7 +142,7 @@ TYPED_TEST_P(DwarfDebugFrameTest, Init32_fde_not_following_cie) { this->memory_.SetData32(0x5108, 0x1500); this->memory_.SetData32(0x510c, 0x200); - ASSERT_FALSE(this->debug_frame_->Init(0x5000, 0x600)); + ASSERT_FALSE(this->debug_frame_->Init(0x5000, 0x600, 0)); ASSERT_EQ(DWARF_ERROR_ILLEGAL_VALUE, this->debug_frame_->LastErrorCode()); } @@ -181,7 +181,7 @@ TYPED_TEST_P(DwarfDebugFrameTest, Init32_do_not_fail_on_bad_next_entry) { this->memory_.SetData32(0x5508, 0x4500); this->memory_.SetData32(0x550c, 0x500); - ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x600)); + ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x600, 0)); ASSERT_EQ(2U, this->debug_frame_->TestGetFdeCount()); } @@ -226,7 +226,7 @@ TYPED_TEST_P(DwarfDebugFrameTest, Init64) { this->memory_.SetData64(0x5514, 0x4500); this->memory_.SetData64(0x551c, 0x500); - ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x600)); + ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x600, 0)); ASSERT_EQ(4U, this->debug_frame_->TestGetFdeCount()); typename DwarfDebugFrame<TypeParam>::FdeInfo info(0, 0, 0); @@ -267,7 +267,7 @@ TYPED_TEST_P(DwarfDebugFrameTest, Init64_fde_not_following_cie) { this->memory_.SetData64(0x5114, 0x1500); this->memory_.SetData64(0x511c, 0x200); - ASSERT_FALSE(this->debug_frame_->Init(0x5000, 0x600)); + ASSERT_FALSE(this->debug_frame_->Init(0x5000, 0x600, 0)); ASSERT_EQ(DWARF_ERROR_ILLEGAL_VALUE, this->debug_frame_->LastErrorCode()); } @@ -312,10 +312,48 @@ TYPED_TEST_P(DwarfDebugFrameTest, Init64_do_not_fail_on_bad_next_entry) { this->memory_.SetData64(0x5514, 0x4500); this->memory_.SetData64(0x551c, 0x500); - ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x600)); + ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x600, 0)); ASSERT_EQ(2U, this->debug_frame_->TestGetFdeCount()); } +TYPED_TEST_P(DwarfDebugFrameTest, Init_non_zero_load_bias) { + // CIE 32 information. + this->memory_.SetData32(0x5000, 0xfc); + this->memory_.SetData32(0x5004, 0xffffffff); + this->memory_.SetData8(0x5008, 1); + this->memory_.SetData8(0x5009, 'z'); + this->memory_.SetData8(0x500a, 'R'); + this->memory_.SetData8(0x500b, '\0'); + this->memory_.SetData8(0x500c, 0); + this->memory_.SetData8(0x500d, 0); + this->memory_.SetData8(0x500e, 0); + this->memory_.SetData8(0x500f, 0); + this->memory_.SetData8(0x5010, 0x1b); + + // FDE 32 information. + this->memory_.SetData32(0x5100, 0xfc); + this->memory_.SetData32(0x5104, 0); + this->memory_.SetData32(0x5108, 0x1500); + this->memory_.SetData32(0x510c, 0x200); + this->memory_.SetData8(0x5110, 0); + this->memory_.SetData8(0x5111, 0); + + ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x200, 0x1000)); + ASSERT_EQ(1U, this->debug_frame_->TestGetFdeCount()); + + typename DwarfDebugFrame<TypeParam>::FdeInfo info(0, 0, 0); + + this->debug_frame_->TestGetFdeInfo(0, &info); + EXPECT_EQ(0x5100U, info.offset); + EXPECT_EQ(0x2500U, info.start); + EXPECT_EQ(0x2700U, info.end); + + const DwarfFde* fde = this->debug_frame_->GetFdeFromPc(0x2504); + ASSERT_TRUE(fde != nullptr); + EXPECT_EQ(0x2500U, fde->pc_start); + EXPECT_EQ(0x2700U, fde->pc_end); +} + TYPED_TEST_P(DwarfDebugFrameTest, Init_version1) { // CIE 32 information. this->memory_.SetData32(0x5000, 0xfc); @@ -340,7 +378,7 @@ TYPED_TEST_P(DwarfDebugFrameTest, Init_version1) { this->memory_.SetData16(0x5108, 0x1500); this->memory_.SetData16(0x510a, 0x200); - ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x200)); + ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x200, 0)); ASSERT_EQ(1U, this->debug_frame_->TestGetFdeCount()); typename DwarfDebugFrame<TypeParam>::FdeInfo info(0, 0, 0); @@ -383,7 +421,7 @@ TYPED_TEST_P(DwarfDebugFrameTest, Init_version4) { this->memory_.SetData16(0x5108, 0x1500); this->memory_.SetData16(0x510a, 0x200); - ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x200)); + ASSERT_TRUE(this->debug_frame_->Init(0x5000, 0x200, 0)); ASSERT_EQ(1U, this->debug_frame_->TestGetFdeCount()); typename DwarfDebugFrame<TypeParam>::FdeInfo info(0, 0, 0); @@ -538,8 +576,8 @@ TYPED_TEST_P(DwarfDebugFrameTest, GetCieFde64) { REGISTER_TYPED_TEST_CASE_P(DwarfDebugFrameTest, Init32, Init32_fde_not_following_cie, Init32_do_not_fail_on_bad_next_entry, Init64, Init64_do_not_fail_on_bad_next_entry, Init64_fde_not_following_cie, - Init_version1, Init_version4, GetFdeOffsetFromPc, GetCieFde32, - GetCieFde64); + Init_non_zero_load_bias, Init_version1, Init_version4, + GetFdeOffsetFromPc, GetCieFde32, GetCieFde64); typedef ::testing::Types<uint32_t, uint64_t> DwarfDebugFrameTestTypes; INSTANTIATE_TYPED_TEST_CASE_P(, DwarfDebugFrameTest, DwarfDebugFrameTestTypes); |