You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.6 KiB
66 lines
2.6 KiB
4 months ago
|
//===-- 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:
|
||
|
enum { InvalidCode = 0 };
|
||
|
DWARFAbbreviationDeclaration();
|
||
|
|
||
|
// For hand crafting an abbreviation declaration
|
||
|
DWARFAbbreviationDeclaration(dw_tag_t tag, uint8_t has_children);
|
||
|
|
||
|
dw_uleb128_t Code() const { return m_code; }
|
||
|
void SetCode(dw_uleb128_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].get_form() : 0;
|
||
|
}
|
||
|
|
||
|
// idx is assumed to be valid when calling GetAttrAndFormByIndex()
|
||
|
void GetAttrAndFormValueByIndex(uint32_t idx, dw_attr_t &attr,
|
||
|
DWARFFormValue &form_value) const {
|
||
|
m_attributes[idx].get(attr, form_value.FormRef(), form_value.ValueRef());
|
||
|
}
|
||
|
dw_form_t GetFormByIndexUnchecked(uint32_t idx) const {
|
||
|
return m_attributes[idx].get_form();
|
||
|
}
|
||
|
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<lldb_private::DWARFEnumState>
|
||
|
extract(const lldb_private::DWARFDataExtractor &data,
|
||
|
lldb::offset_t *offset_ptr);
|
||
|
bool IsValid();
|
||
|
bool operator==(const DWARFAbbreviationDeclaration &rhs) const;
|
||
|
|
||
|
protected:
|
||
|
dw_uleb128_t m_code;
|
||
|
dw_tag_t m_tag;
|
||
|
uint8_t m_has_children;
|
||
|
DWARFAttribute::collection m_attributes;
|
||
|
};
|
||
|
|
||
|
#endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFABBREVIATIONDECLARATION_H
|