diff options
author | Christopher Ferris <cferris@google.com> | 2019-04-01 16:53:56 -0700 |
---|---|---|
committer | Christopher Ferris <cferris@google.com> | 2019-04-01 16:56:09 -0700 |
commit | c312c9ac152be8b4ed1cd1455a1e7e2565a55ced (patch) | |
tree | 41a9470bac9d083eb715804a268f3b1023172d76 /libunwindstack/tests/DwarfDebugFrameTest.cpp | |
parent | 3b25a17a8a844ad6d9da8448ff0794bc8f813e27 (diff) |
Add minimal support for Dwarf 5.
This is not full support for dwarf 5, this merely treats a Dwarf 5
version as Dwarf 4. There are new dwarf ops that are not supported yet,
but this minimally support should allow unwinding to work if those
ops are not present.
Bug: 127355724
Test: New Unit tests pass.
Change-Id: I35b24fbcb15a64acd49e1e0b6890dff4456ee6fd
Diffstat (limited to 'libunwindstack/tests/DwarfDebugFrameTest.cpp')
-rw-r--r-- | libunwindstack/tests/DwarfDebugFrameTest.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/libunwindstack/tests/DwarfDebugFrameTest.cpp b/libunwindstack/tests/DwarfDebugFrameTest.cpp index d62093404..120bd73b5 100644 --- a/libunwindstack/tests/DwarfDebugFrameTest.cpp +++ b/libunwindstack/tests/DwarfDebugFrameTest.cpp @@ -550,6 +550,22 @@ TYPED_TEST_P(DwarfDebugFrameTest, GetCieFromOffset64_version4) { VerifyCieVersion(cie, 4, 10, DW_EH_PE_sdata8, 0x181, 0x1c, 0x10c); } +TYPED_TEST_P(DwarfDebugFrameTest, GetCieFromOffset32_version5) { + SetCie32(&this->memory_, 0x5000, 0x100, std::vector<uint8_t>{5, '\0', 0, 10, 4, 8, 0x81, 3}); + const DwarfCie* cie = this->debug_frame_->GetCieFromOffset(0x5000); + EXPECT_EQ(DWARF_ERROR_NONE, this->debug_frame_->LastErrorCode()); + ASSERT_TRUE(cie != nullptr); + VerifyCieVersion(cie, 5, 10, DW_EH_PE_sdata4, 0x181, 0x10, 0x104); +} + +TYPED_TEST_P(DwarfDebugFrameTest, GetCieFromOffset64_version5) { + SetCie64(&this->memory_, 0x5000, 0x100, std::vector<uint8_t>{5, '\0', 0, 10, 4, 8, 0x81, 3}); + const DwarfCie* cie = this->debug_frame_->GetCieFromOffset(0x5000); + EXPECT_EQ(DWARF_ERROR_NONE, this->debug_frame_->LastErrorCode()); + ASSERT_TRUE(cie != nullptr); + VerifyCieVersion(cie, 5, 10, DW_EH_PE_sdata8, 0x181, 0x1c, 0x10c); +} + TYPED_TEST_P(DwarfDebugFrameTest, GetCieFromOffset_version_invalid) { SetCie32(&this->memory_, 0x5000, 0x100, std::vector<uint8_t>{0, '\0', 1, 2, 3, 4, 5, 6, 7}); ASSERT_TRUE(this->debug_frame_->GetCieFromOffset(0x5000) == nullptr); @@ -558,10 +574,10 @@ TYPED_TEST_P(DwarfDebugFrameTest, GetCieFromOffset_version_invalid) { ASSERT_TRUE(this->debug_frame_->GetCieFromOffset(0x6000) == nullptr); EXPECT_EQ(DWARF_ERROR_UNSUPPORTED_VERSION, this->debug_frame_->LastErrorCode()); - SetCie32(&this->memory_, 0x7000, 0x100, std::vector<uint8_t>{5, '\0', 1, 2, 3, 4, 5, 6, 7}); + SetCie32(&this->memory_, 0x7000, 0x100, std::vector<uint8_t>{6, '\0', 1, 2, 3, 4, 5, 6, 7}); ASSERT_TRUE(this->debug_frame_->GetCieFromOffset(0x7000) == nullptr); EXPECT_EQ(DWARF_ERROR_UNSUPPORTED_VERSION, this->debug_frame_->LastErrorCode()); - SetCie64(&this->memory_, 0x8000, 0x100, std::vector<uint8_t>{5, '\0', 1, 2, 3, 4, 5, 6, 7}); + SetCie64(&this->memory_, 0x8000, 0x100, std::vector<uint8_t>{6, '\0', 1, 2, 3, 4, 5, 6, 7}); ASSERT_TRUE(this->debug_frame_->GetCieFromOffset(0x8000) == nullptr); EXPECT_EQ(DWARF_ERROR_UNSUPPORTED_VERSION, this->debug_frame_->LastErrorCode()); } @@ -803,9 +819,10 @@ REGISTER_TYPED_TEST_CASE_P( GetFdeFromPc64_not_in_section, GetCieFde32, GetCieFde64, GetCieFromOffset32_cie_cached, GetCieFromOffset64_cie_cached, GetCieFromOffset32_version1, GetCieFromOffset64_version1, GetCieFromOffset32_version3, GetCieFromOffset64_version3, GetCieFromOffset32_version4, - GetCieFromOffset64_version4, GetCieFromOffset_version_invalid, GetCieFromOffset32_augment, - GetCieFromOffset64_augment, GetFdeFromOffset32_augment, GetFdeFromOffset64_augment, - GetFdeFromOffset32_lsda_address, GetFdeFromOffset64_lsda_address, GetFdeFromPc_interleaved); + GetCieFromOffset64_version4, GetCieFromOffset32_version5, GetCieFromOffset64_version5, + GetCieFromOffset_version_invalid, GetCieFromOffset32_augment, GetCieFromOffset64_augment, + GetFdeFromOffset32_augment, GetFdeFromOffset64_augment, GetFdeFromOffset32_lsda_address, + GetFdeFromOffset64_lsda_address, GetFdeFromPc_interleaved); typedef ::testing::Types<uint32_t, uint64_t> DwarfDebugFrameTestTypes; INSTANTIATE_TYPED_TEST_CASE_P(, DwarfDebugFrameTest, DwarfDebugFrameTestTypes); |