diff --git a/lldb/source/Plugins/SymbolFile/DWARF/CMakeLists.txt b/lldb/source/Plugins/SymbolFile/DWARF/CMakeLists.txt --- a/lldb/source/Plugins/SymbolFile/DWARF/CMakeLists.txt +++ b/lldb/source/Plugins/SymbolFile/DWARF/CMakeLists.txt @@ -10,7 +10,6 @@ AppleDWARFIndex.cpp DebugNamesDWARFIndex.cpp DIERef.cpp - DWARFAbbreviationDeclaration.cpp DWARFASTParser.cpp DWARFASTParserClang.cpp DWARFAttribute.cpp diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFAbbreviationDeclaration.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFAbbreviationDeclaration.h deleted file mode 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFAbbreviationDeclaration.h +++ /dev/null @@ -1,92 +0,0 @@ -//===-- DWARFAbbreviationDeclaration.h --------------------------*- C++ -*-===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -#ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFABBREVIATIONDECLARATION_H -#define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFABBREVIATIONDECLARATION_H - -#include "DWARFAttribute.h" -#include "DWARFDefines.h" -#include "SymbolFileDWARF.h" -#include "llvm/Support/Error.h" - -class DWARFAbbreviationDeclaration { -public: - struct AttributeSpec { - AttributeSpec(dw_attr_t attr, dw_form_t form, int64_t value) - : m_attr(attr), m_form(form), m_value(value) {} - - AttributeSpec(dw_attr_t attr, dw_form_t form) - : m_attr(attr), m_form(form), m_value(0) {} - - bool IsImplicitConst() const { - return m_form == lldb_private::dwarf::DW_FORM_implicit_const; - } - - int64_t GetImplicitConstValue() const { return m_value; } - - dw_attr_t GetAttribute() const { return m_attr; } - - dw_form_t GetForm() const { return m_form; } - - private: - dw_attr_t m_attr; - dw_form_t m_form; - int64_t m_value; - }; - - enum { InvalidCode = 0 }; - DWARFAbbreviationDeclaration(); - - // For hand crafting an abbreviation declaration - DWARFAbbreviationDeclaration(dw_tag_t tag, uint8_t has_children); - - uint32_t Code() const { return m_code; } - void SetCode(uint32_t code) { m_code = code; } - dw_tag_t Tag() const { return m_tag; } - bool HasChildren() const { return m_has_children; } - size_t NumAttributes() const { return m_attributes.size(); } - dw_form_t GetFormByIndex(uint32_t idx) const { - return m_attributes.size() > idx ? m_attributes[idx].GetForm() - : dw_form_t(0); - } - - // idx is assumed to be valid when calling GetAttrAndFormByIndex() - void GetAttrAndFormValueByIndex(uint32_t idx, dw_attr_t &attr, - DWARFFormValue &form_value) const { - const AttributeSpec &spec = m_attributes[idx]; - attr = spec.GetAttribute(); - form_value.FormRef() = spec.GetForm(); - if (spec.IsImplicitConst()) - form_value.SetSigned(spec.GetImplicitConstValue()); - } - dw_form_t GetFormByIndexUnchecked(uint32_t idx) const { - return m_attributes[idx].GetForm(); - } - uint32_t FindAttributeIndex(dw_attr_t attr) const; - - /// Extract one abbreviation declaration and all of its associated attributes. - /// Possible return values: - /// DWARFEnumState::Complete - the extraction completed successfully. This - /// was the last abbrev decl in a sequence, and the user should not call - /// this function again. - /// DWARFEnumState::MoreItems - the extraction completed successfully. The - /// user should call this function again to retrieve the next decl. - /// llvm::Error - A parsing error occurred. The debug info is malformed. - llvm::Expected - extract(const lldb_private::DWARFDataExtractor &data, - lldb::offset_t *offset_ptr); - bool IsValid(); - -protected: - uint32_t m_code = InvalidCode; - dw_tag_t m_tag = llvm::dwarf::DW_TAG_null; - uint8_t m_has_children = 0; - llvm::SmallVector m_attributes; -}; - -#endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFABBREVIATIONDECLARATION_H diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFAbbreviationDeclaration.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFAbbreviationDeclaration.cpp deleted file mode 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFAbbreviationDeclaration.cpp +++ /dev/null @@ -1,81 +0,0 @@ -//===-- DWARFAbbreviationDeclaration.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 "DWARFAbbreviationDeclaration.h" - -#include "lldb/Core/dwarf.h" -#include "lldb/Utility/Stream.h" - -#include "llvm/Object/Error.h" - -#include "DWARFFormValue.h" - -using namespace lldb_private; -using namespace lldb_private::dwarf; - -DWARFAbbreviationDeclaration::DWARFAbbreviationDeclaration() : m_attributes() {} - -DWARFAbbreviationDeclaration::DWARFAbbreviationDeclaration(dw_tag_t tag, - uint8_t has_children) - : m_tag(tag), m_has_children(has_children), m_attributes() {} - -llvm::Expected -DWARFAbbreviationDeclaration::extract(const DWARFDataExtractor &data, - lldb::offset_t *offset_ptr) { - m_code = data.GetULEB128(offset_ptr); - if (m_code == 0) - return DWARFEnumState::Complete; - - m_attributes.clear(); - m_tag = static_cast(data.GetULEB128(offset_ptr)); - if (m_tag == DW_TAG_null) - return llvm::make_error( - "abbrev decl requires non-null tag."); - - m_has_children = data.GetU8(offset_ptr); - - while (data.ValidOffset(*offset_ptr)) { - auto attr = static_cast(data.GetULEB128(offset_ptr)); - auto form = static_cast(data.GetULEB128(offset_ptr)); - - // This is the last attribute for this abbrev decl, but there may still be - // more abbrev decls, so return MoreItems to indicate to the caller that - // they should call this function again. - if (!attr && !form) - return DWARFEnumState::MoreItems; - - if (!attr || !form) - return llvm::make_error( - "malformed abbreviation declaration attribute"); - - if (form == DW_FORM_implicit_const) { - int64_t value = data.GetSLEB128(offset_ptr); - m_attributes.emplace_back(attr, form, value); - continue; - } - - m_attributes.emplace_back(attr, form); - } - - return llvm::make_error( - "abbreviation declaration attribute list not terminated with a null " - "entry"); -} - -bool DWARFAbbreviationDeclaration::IsValid() { - return m_code != 0 && m_tag != llvm::dwarf::DW_TAG_null; -} - -uint32_t -DWARFAbbreviationDeclaration::FindAttributeIndex(dw_attr_t attr) const { - for (size_t i = 0; i < m_attributes.size(); ++i) { - if (m_attributes[i].GetAttribute() == attr) - return i; - } - return DW_INVALID_INDEX; -} diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.h --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.h @@ -9,14 +9,16 @@ #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGABBREV_H #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGABBREV_H -#include #include #include "lldb/lldb-private.h" -#include "DWARFAbbreviationDeclaration.h" #include "DWARFDefines.h" +#include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h" + +using DWARFAbbreviationDeclaration = llvm::DWARFAbbreviationDeclaration; + typedef std::vector DWARFAbbreviationDeclarationColl; typedef DWARFAbbreviationDeclarationColl::iterator diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.cpp --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.cpp @@ -8,6 +8,7 @@ #include "DWARFDebugAbbrev.h" #include "DWARFDataExtractor.h" +#include "DWARFFormValue.h" #include "lldb/Utility/Stream.h" using namespace lldb; @@ -23,26 +24,26 @@ llvm::Error DWARFAbbreviationDeclarationSet::extract(const DWARFDataExtractor &data, lldb::offset_t *offset_ptr) { + llvm::DataExtractor llvm_data = data.GetAsLLVM(); const lldb::offset_t begin_offset = *offset_ptr; m_offset = begin_offset; Clear(); DWARFAbbreviationDeclaration abbrevDeclaration; uint32_t prev_abbr_code = 0; while (true) { - llvm::Expected es = - abbrevDeclaration.extract(data, offset_ptr); + llvm::Expected es = + abbrevDeclaration.extract(llvm_data, offset_ptr); if (!es) return es.takeError(); - if (*es == DWARFEnumState::Complete) + if (*es == llvm::DWARFAbbreviationDeclaration::ExtractState::Complete) break; - m_decls.push_back(abbrevDeclaration); if (m_idx_offset == 0) - m_idx_offset = abbrevDeclaration.Code(); - else if (prev_abbr_code + 1 != abbrevDeclaration.Code()) { - // Out of order indexes, we can't do O(1) lookups... + m_idx_offset = abbrevDeclaration.getCode(); + else if (prev_abbr_code + 1 != abbrevDeclaration.getCode()) m_idx_offset = UINT32_MAX; - } - prev_abbr_code = abbrevDeclaration.Code(); + + prev_abbr_code = abbrevDeclaration.getCode(); + m_decls.push_back(abbrevDeclaration); } return llvm::ErrorSuccess(); } @@ -52,29 +53,24 @@ DWARFAbbreviationDeclarationSet::GetAbbreviationDeclaration( uint32_t abbrCode) const { if (m_idx_offset == UINT32_MAX) { - DWARFAbbreviationDeclarationCollConstIter pos; - DWARFAbbreviationDeclarationCollConstIter end = m_decls.end(); - for (pos = m_decls.begin(); pos != end; ++pos) { - if (pos->Code() == abbrCode) - return &(*pos); + for (const auto &decl : m_decls) { + if (decl.getCode() == abbrCode) + return &decl; } - } else { - uint32_t idx = abbrCode - m_idx_offset; - if (idx < m_decls.size()) - return &m_decls[idx]; + return nullptr; } - return nullptr; + if (abbrCode < m_idx_offset || abbrCode >= m_idx_offset + m_decls.size()) + return nullptr; + return &m_decls[abbrCode - m_idx_offset]; } // DWARFAbbreviationDeclarationSet::GetUnsupportedForms() void DWARFAbbreviationDeclarationSet::GetUnsupportedForms( std::set &invalid_forms) const { - for (const auto &abbr_decl : m_decls) { - const size_t num_attrs = abbr_decl.NumAttributes(); - for (size_t i=0; i #include +#include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h" + class DWARFDeclContext; #define DIE_SIBLING_IDX_BITSIZE 31 @@ -111,7 +113,7 @@ std::optional &call_column, lldb_private::DWARFExpressionList *frame_base = nullptr) const; - const DWARFAbbreviationDeclaration * + const llvm::DWARFAbbreviationDeclaration * GetAbbreviationDeclarationPtr(const DWARFUnit *cu) const; lldb::offset_t GetFirstAttributeOffset() const; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp @@ -69,14 +69,12 @@ *offset_ptr = UINT32_MAX; return false; } - m_tag = abbrevDecl->Tag(); - m_has_children = abbrevDecl->HasChildren(); + m_tag = abbrevDecl->getTag(); + m_has_children = abbrevDecl->hasChildren(); // Skip all data in the .debug_info or .debug_types for the attributes - const uint32_t numAttributes = abbrevDecl->NumAttributes(); - uint32_t i; dw_form_t form; - for (i = 0; i < numAttributes; ++i) { - form = abbrevDecl->GetFormByIndexUnchecked(i); + for (const auto &attribute : abbrevDecl->attributes()) { + form = attribute.Form; std::optional fixed_skip_size = DWARFFormValue::GetFixedSize(form, cu); if (fixed_skip_size) @@ -228,6 +226,15 @@ return DWARFRangeList(); } +static void ExtractAttrAndFormValue( + const llvm::DWARFAbbreviationDeclaration::AttributeSpec &attr_spec, + dw_attr_t &attr, DWARFFormValue &form_value) { + attr = attr_spec.Attr; + form_value.FormRef() = attr_spec.Form; + if (attr_spec.isImplicitConst()) + form_value.SetSigned(attr_spec.getImplicitConstValue()); +} + // GetDIENamesAndRanges // // Gets the valid address ranges for a given DIE by looking for a @@ -243,25 +250,22 @@ std::vector dies; bool set_frame_base_loclist_addr = false; - const auto *abbrevDecl = GetAbbreviationDeclarationPtr(cu); - SymbolFileDWARF &dwarf = cu->GetSymbolFileDWARF(); lldb::ModuleSP module = dwarf.GetObjectFile()->GetModule(); - if (abbrevDecl) { + if (const auto *abbrevDecl = GetAbbreviationDeclarationPtr(cu)) { const DWARFDataExtractor &data = cu->GetData(); lldb::offset_t offset = GetFirstAttributeOffset(); if (!data.ValidOffset(offset)) return false; - const uint32_t numAttributes = abbrevDecl->NumAttributes(); bool do_offset = false; - for (uint32_t i = 0; i < numAttributes; ++i) { + for (const auto &attribute : abbrevDecl->attributes()) { DWARFFormValue form_value(cu); dw_attr_t attr; - abbrevDecl->GetAttrAndFormValueByIndex(i, attr, form_value); + ExtractAttrAndFormValue(attribute, attr, form_value); if (form_value.ExtractValue(data, &offset)) { switch (attr) { @@ -415,54 +419,54 @@ Recurse recurse, uint32_t curr_depth) const { const auto *abbrevDecl = GetAbbreviationDeclarationPtr(cu); - if (abbrevDecl) { - const DWARFDataExtractor &data = cu->GetData(); - lldb::offset_t offset = GetFirstAttributeOffset(); - - const uint32_t num_attributes = abbrevDecl->NumAttributes(); - for (uint32_t i = 0; i < num_attributes; ++i) { - DWARFFormValue form_value(cu); - dw_attr_t attr; - abbrevDecl->GetAttrAndFormValueByIndex(i, attr, form_value); - const dw_form_t form = form_value.Form(); + if (!abbrevDecl) { + attributes.Clear(); + return; + } - // If we are tracking down DW_AT_specification or DW_AT_abstract_origin - // attributes, the depth will be non-zero. We need to omit certain - // attributes that don't make sense. - switch (attr) { - case DW_AT_sibling: - case DW_AT_declaration: - if (curr_depth > 0) { - // This attribute doesn't make sense when combined with the DIE that - // references this DIE. We know a DIE is referencing this DIE because - // curr_depth is not zero - break; - } - [[fallthrough]]; - default: - attributes.Append(form_value, offset, attr); + const DWARFDataExtractor &data = cu->GetData(); + lldb::offset_t offset = GetFirstAttributeOffset(); + + for (const auto &attribute : abbrevDecl->attributes()) { + DWARFFormValue form_value(cu); + dw_attr_t attr; + ExtractAttrAndFormValue(attribute, attr, form_value); + + // If we are tracking down DW_AT_specification or DW_AT_abstract_origin + // attributes, the depth will be non-zero. We need to omit certain + // attributes that don't make sense. + switch (attr) { + case DW_AT_sibling: + case DW_AT_declaration: + if (curr_depth > 0) { + // This attribute doesn't make sense when combined with the DIE that + // references this DIE. We know a DIE is referencing this DIE because + // curr_depth is not zero break; } + [[fallthrough]]; + default: + attributes.Append(form_value, offset, attr); + break; + } - if (recurse == Recurse::yes && - ((attr == DW_AT_specification) || (attr == DW_AT_abstract_origin))) { - if (form_value.ExtractValue(data, &offset)) { - DWARFDIE spec_die = form_value.Reference(); - if (spec_die) - spec_die.GetDIE()->GetAttributes(spec_die.GetCU(), attributes, - recurse, curr_depth + 1); - } - } else { - std::optional fixed_skip_size = - DWARFFormValue::GetFixedSize(form, cu); - if (fixed_skip_size) - offset += *fixed_skip_size; - else - DWARFFormValue::SkipValue(form, data, &offset, cu); + if (recurse == Recurse::yes && + ((attr == DW_AT_specification) || (attr == DW_AT_abstract_origin))) { + if (form_value.ExtractValue(data, &offset)) { + DWARFDIE spec_die = form_value.Reference(); + if (spec_die) + spec_die.GetDIE()->GetAttributes(spec_die.GetCU(), attributes, + recurse, curr_depth + 1); } + } else { + const dw_form_t form = form_value.Form(); + std::optional fixed_skip_size = + DWARFFormValue::GetFixedSize(form, cu); + if (fixed_skip_size) + offset += *fixed_skip_size; + else + DWARFFormValue::SkipValue(form, data, &offset, cu); } - } else { - attributes.Clear(); } } @@ -477,20 +481,20 @@ dw_offset_t *end_attr_offset_ptr, bool check_specification_or_abstract_origin) const { if (const auto *abbrevDecl = GetAbbreviationDeclarationPtr(cu)) { - uint32_t attr_idx = abbrevDecl->FindAttributeIndex(attr); + std::optional attr_idx = abbrevDecl->findAttributeIndex(attr); - if (attr_idx != DW_INVALID_INDEX) { + if (attr_idx) { const DWARFDataExtractor &data = cu->GetData(); lldb::offset_t offset = GetFirstAttributeOffset(); uint32_t idx = 0; - while (idx < attr_idx) - DWARFFormValue::SkipValue(abbrevDecl->GetFormByIndex(idx++), - data, &offset, cu); + while (idx < *attr_idx) + DWARFFormValue::SkipValue(abbrevDecl->getFormByIndex(idx++), data, + &offset, cu); const dw_offset_t attr_offset = offset; form_value.SetUnit(cu); - form_value.SetForm(abbrevDecl->GetFormByIndex(idx)); + form_value.SetForm(abbrevDecl->getFormByIndex(idx)); if (form_value.ExtractValue(data, &offset)) { if (end_attr_offset_ptr) *end_attr_offset_ptr = offset; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDefines.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDefines.h --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDefines.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDefines.h @@ -14,8 +14,6 @@ namespace lldb_private { -enum class DWARFEnumState { MoreItems, Complete }; - typedef uint32_t DRC_class; // Holds DRC_* class bitfields const char *DW_TAG_value_to_name(uint32_t val); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h @@ -40,7 +40,6 @@ // Forward Declarations for this DWARF plugin class DebugMapModule; -class DWARFAbbreviationDeclaration; class DWARFAbbreviationDeclarationSet; class DWARFCompileUnit; class DWARFDebugAbbrev; diff --git a/lldb/unittests/SymbolFile/DWARF/SymbolFileDWARFTests.cpp b/lldb/unittests/SymbolFile/DWARF/SymbolFileDWARFTests.cpp --- a/lldb/unittests/SymbolFile/DWARF/SymbolFileDWARFTests.cpp +++ b/lldb/unittests/SymbolFile/DWARF/SymbolFileDWARFTests.cpp @@ -15,7 +15,6 @@ #include "llvm/Support/Path.h" #include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h" -#include "Plugins/SymbolFile/DWARF/DWARFAbbreviationDeclaration.h" #include "Plugins/SymbolFile/DWARF/DWARFDataExtractor.h" #include "Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.h" #include "Plugins/SymbolFile/DWARF/DWARFDebugArangeSet.h" @@ -105,13 +104,13 @@ EXPECT_EQ(abbrev_set.GetIndexOffset(), 1u); auto abbrev1 = abbrev_set.GetAbbreviationDeclaration(1); - EXPECT_EQ(abbrev1->Tag(), DW_TAG_compile_unit); - EXPECT_TRUE(abbrev1->HasChildren()); - EXPECT_EQ(abbrev1->NumAttributes(), 1u); + EXPECT_EQ(abbrev1->getTag(), DW_TAG_compile_unit); + EXPECT_TRUE(abbrev1->hasChildren()); + EXPECT_EQ(abbrev1->getNumAttributes(), 1u); auto abbrev2 = abbrev_set.GetAbbreviationDeclaration(2); - EXPECT_EQ(abbrev2->Tag(), DW_TAG_subprogram); - EXPECT_FALSE(abbrev2->HasChildren()); - EXPECT_EQ(abbrev2->NumAttributes(), 1u); + EXPECT_EQ(abbrev2->getTag(), DW_TAG_subprogram); + EXPECT_FALSE(abbrev2->hasChildren()); + EXPECT_EQ(abbrev2->getNumAttributes(), 1u); } TEST_F(SymbolFileDWARFTests, TestAbbrevOrder1Start5) { @@ -150,13 +149,13 @@ EXPECT_EQ(abbrev_set.GetIndexOffset(), 5u); auto abbrev1 = abbrev_set.GetAbbreviationDeclaration(5); - EXPECT_EQ(abbrev1->Tag(), DW_TAG_compile_unit); - EXPECT_TRUE(abbrev1->HasChildren()); - EXPECT_EQ(abbrev1->NumAttributes(), 1u); + EXPECT_EQ(abbrev1->getTag(), DW_TAG_compile_unit); + EXPECT_TRUE(abbrev1->hasChildren()); + EXPECT_EQ(abbrev1->getNumAttributes(), 1u); auto abbrev2 = abbrev_set.GetAbbreviationDeclaration(6); - EXPECT_EQ(abbrev2->Tag(), DW_TAG_subprogram); - EXPECT_FALSE(abbrev2->HasChildren()); - EXPECT_EQ(abbrev2->NumAttributes(), 1u); + EXPECT_EQ(abbrev2->getTag(), DW_TAG_subprogram); + EXPECT_FALSE(abbrev2->hasChildren()); + EXPECT_EQ(abbrev2->getNumAttributes(), 1u); } TEST_F(SymbolFileDWARFTests, TestAbbrevOutOfOrder) { @@ -195,13 +194,13 @@ EXPECT_EQ(abbrev_set.GetIndexOffset(), UINT32_MAX); auto abbrev1 = abbrev_set.GetAbbreviationDeclaration(2); - EXPECT_EQ(abbrev1->Tag(), DW_TAG_compile_unit); - EXPECT_TRUE(abbrev1->HasChildren()); - EXPECT_EQ(abbrev1->NumAttributes(), 1u); + EXPECT_EQ(abbrev1->getTag(), DW_TAG_compile_unit); + EXPECT_TRUE(abbrev1->hasChildren()); + EXPECT_EQ(abbrev1->getNumAttributes(), 1u); auto abbrev2 = abbrev_set.GetAbbreviationDeclaration(1); - EXPECT_EQ(abbrev2->Tag(), DW_TAG_subprogram); - EXPECT_FALSE(abbrev2->HasChildren()); - EXPECT_EQ(abbrev2->NumAttributes(), 1u); + EXPECT_EQ(abbrev2->getTag(), DW_TAG_subprogram); + EXPECT_FALSE(abbrev2->hasChildren()); + EXPECT_EQ(abbrev2->getNumAttributes(), 1u); } TEST_F(SymbolFileDWARFTests, TestAbbrevInvalidNULLTag) { @@ -226,9 +225,8 @@ llvm::Error error = abbrev_set.extract(data, &data_offset); // Verify we get an error EXPECT_TRUE(bool(error)); - EXPECT_EQ("abbrev decl requires non-null tag.", + EXPECT_EQ("abbreviation declaration requires a non-null tag", llvm::toString(std::move(error))); - } TEST_F(SymbolFileDWARFTests, TestAbbrevNullAttrValidForm) { @@ -255,7 +253,8 @@ llvm::Error error = abbrev_set.extract(data, &data_offset); // Verify we get an error EXPECT_TRUE(bool(error)); - EXPECT_EQ("malformed abbreviation declaration attribute", + EXPECT_EQ("malformed abbreviation declaration attribute. Either the " + "attribute or the form is zero while the other is not", llvm::toString(std::move(error))); } @@ -283,7 +282,8 @@ llvm::Error error = abbrev_set.extract(data, &data_offset); // Verify we get an error EXPECT_TRUE(bool(error)); - EXPECT_EQ("malformed abbreviation declaration attribute", + EXPECT_EQ("malformed abbreviation declaration attribute. Either the " + "attribute or the form is zero while the other is not", llvm::toString(std::move(error))); } @@ -309,8 +309,9 @@ llvm::Error error = abbrev_set.extract(data, &data_offset); // Verify we get an error EXPECT_TRUE(bool(error)); - EXPECT_EQ("abbreviation declaration attribute list not terminated with a " - "null entry", llvm::toString(std::move(error))); + EXPECT_EQ("abbreviation declaration attribute list was not terminated with a " + "null entry", + llvm::toString(std::move(error))); } TEST_F(SymbolFileDWARFTests, ParseArangesNonzeroSegmentSize) {