| //===-- DWARFUnitTest.cpp -------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "Plugins/SymbolFile/DWARF/DWARFUnit.h" |
| #include "TestingSupport/Symbol/YAMLModuleTester.h" |
| #include "gmock/gmock.h" |
| #include "gtest/gtest.h" |
| |
| using namespace lldb; |
| using namespace lldb_private; |
| |
| TEST(DWARFUnitTest, NullUnitDie) { |
| // Make sure we don't crash parsing a null unit DIE. |
| const char *yamldata = R"( |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_386 |
| DWARF: |
| debug_abbrev: |
| - Table: |
| - Code: 0x00000001 |
| Tag: DW_TAG_compile_unit |
| Children: DW_CHILDREN_yes |
| Attributes: |
| - Attribute: DW_AT_language |
| Form: DW_FORM_data2 |
| debug_info: |
| - Version: 4 |
| AddrSize: 8 |
| Entries: |
| - AbbrCode: 0x00000000 |
| )"; |
| |
| YAMLModuleTester t(yamldata); |
| ASSERT_TRUE((bool)t.GetDwarfUnit()); |
| |
| DWARFUnit *unit = t.GetDwarfUnit(); |
| const DWARFDebugInfoEntry *die_first = unit->DIE().GetDIE(); |
| ASSERT_NE(die_first, nullptr); |
| EXPECT_TRUE(die_first->IsNULL()); |
| } |
| |
| TEST(DWARFUnitTest, MissingSentinel) { |
| // Make sure we don't crash if the debug info is missing a null DIE sentinel. |
| const char *yamldata = R"( |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_386 |
| DWARF: |
| debug_abbrev: |
| - Table: |
| - Code: 0x00000001 |
| Tag: DW_TAG_compile_unit |
| Children: DW_CHILDREN_yes |
| Attributes: |
| - Attribute: DW_AT_language |
| Form: DW_FORM_data2 |
| debug_info: |
| - Version: 4 |
| AddrSize: 8 |
| Entries: |
| - AbbrCode: 0x00000001 |
| Values: |
| - Value: 0x000000000000000C |
| )"; |
| |
| YAMLModuleTester t(yamldata); |
| ASSERT_TRUE((bool)t.GetDwarfUnit()); |
| |
| DWARFUnit *unit = t.GetDwarfUnit(); |
| const DWARFDebugInfoEntry *die_first = unit->DIE().GetDIE(); |
| ASSERT_NE(die_first, nullptr); |
| EXPECT_EQ(die_first->GetFirstChild(), nullptr); |
| EXPECT_EQ(die_first->GetSibling(), nullptr); |
| } |