forked from OSchip/llvm-project
74 lines
2.5 KiB
C++
74 lines
2.5 KiB
C++
//===-- DWARFAbbreviationDeclaration.h --------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_DWARFAbbreviationDeclaration_h_
|
|
#define liblldb_DWARFAbbreviationDeclaration_h_
|
|
|
|
#include "DWARFAttribute.h"
|
|
#include "SymbolFileDWARF.h"
|
|
|
|
class DWARFAbbreviationDeclaration {
|
|
public:
|
|
enum { InvalidCode = 0 };
|
|
DWARFAbbreviationDeclaration();
|
|
|
|
// For hand crafting an abbreviation declaration
|
|
DWARFAbbreviationDeclaration(dw_tag_t tag, uint8_t has_children);
|
|
void AddAttribute(const DWARFAttribute &attr) {
|
|
m_attributes.push_back(attr);
|
|
}
|
|
|
|
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_attr_t GetAttrByIndex(uint32_t idx) const {
|
|
return m_attributes.size() > idx ? m_attributes[idx].get_attr() : 0;
|
|
}
|
|
dw_form_t GetFormByIndex(uint32_t idx) const {
|
|
return m_attributes.size() > idx ? m_attributes[idx].get_form() : 0;
|
|
}
|
|
bool GetAttrAndFormByIndex(uint32_t idx, dw_attr_t &attr,
|
|
dw_form_t &form) const {
|
|
if (m_attributes.size() > idx) {
|
|
m_attributes[idx].get(attr, form);
|
|
return true;
|
|
}
|
|
attr = form = 0;
|
|
return false;
|
|
}
|
|
|
|
// idx is assumed to be valid when calling GetAttrAndFormByIndexUnchecked()
|
|
void GetAttrAndFormByIndexUnchecked(uint32_t idx, dw_attr_t &attr,
|
|
dw_form_t &form) const {
|
|
m_attributes[idx].get(attr, form);
|
|
}
|
|
dw_form_t GetFormByIndexUnchecked(uint32_t idx) const {
|
|
return m_attributes[idx].get_form();
|
|
}
|
|
uint32_t FindAttributeIndex(dw_attr_t attr) const;
|
|
bool Extract(const lldb_private::DWARFDataExtractor &data,
|
|
lldb::offset_t *offset_ptr);
|
|
bool Extract(const lldb_private::DWARFDataExtractor &data,
|
|
lldb::offset_t *offset_ptr, dw_uleb128_t code);
|
|
bool IsValid();
|
|
void Dump(lldb_private::Stream *s) const;
|
|
bool operator==(const DWARFAbbreviationDeclaration &rhs) const;
|
|
const DWARFAttribute::collection &Attributes() const { return m_attributes; }
|
|
|
|
protected:
|
|
dw_uleb128_t m_code;
|
|
dw_tag_t m_tag;
|
|
uint8_t m_has_children;
|
|
DWARFAttribute::collection m_attributes;
|
|
};
|
|
|
|
#endif // liblldb_DWARFAbbreviationDeclaration_h_
|