124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DWARFAbbreviationDeclaration.h --------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_DWARFAbbreviationDeclaration_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_DWARFAbbreviationDeclaration_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "SymbolFileDWARF.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFAttribute.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFCompileUnit; 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFAbbreviationDeclaration 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum { InvalidCode = 0 }; 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFAbbreviationDeclaration(); 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For hand crafting an abbreviation declaration 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFAbbreviationDeclaration(dw_tag_t tag, uint8_t has_children); 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void AddAttribute(const DWARFAttribute& attr) 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_attributes.push_back(attr); 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_uleb128_t Code() const { return m_code; } 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void SetCode(dw_uleb128_t code) { m_code = code; } 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_tag_t Tag() const { return m_tag; } 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool HasChildren() const { return m_has_children; } 3536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t NumAttributes() const { return m_attributes.size(); } 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_attr_t GetAttrByIndex(uint32_t idx) const { return m_attributes.size() > idx ? m_attributes[idx].get_attr() : 0; } 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_form_t GetFormByIndex(uint32_t idx) const { return m_attributes.size() > idx ? m_attributes[idx].get_form() : 0; } 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool GetAttrAndFormByIndex(uint32_t idx, dw_attr_t& attr, dw_form_t& form) const 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_attributes.size() > idx) 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_attributes[idx].get(attr, form); 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner attr = form = 0; 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // idx is assumed to be valid when calling GetAttrAndFormByIndexUnchecked() 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void GetAttrAndFormByIndexUnchecked(uint32_t idx, dw_attr_t& attr, dw_form_t& form) const 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_attributes[idx].get(attr, form); 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 545fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton dw_form_t GetFormByIndexUnchecked (uint32_t idx) const 555fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton { 565fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton return m_attributes[idx].get_form(); 575fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton } 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void CopyExcludingAddressAttributes(const DWARFAbbreviationDeclaration& abbr_decl, const uint32_t idx); 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void CopyChangingStringToStrp( 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFAbbreviationDeclaration& abbr_decl, 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::DataExtractor& debug_info_data, 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_offset_t debug_info_offset, 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const uint32_t strp_min_len); 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t FindAttributeIndex(dw_attr_t attr) const; 6636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton bool Extract(const lldb_private::DataExtractor& data, lldb::offset_t *offset_ptr); 6736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton bool Extract(const lldb_private::DataExtractor& data, lldb::offset_t *offset_ptr, dw_uleb128_t code); 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// void Append(BinaryStreamBuf& out_buff) const; 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool IsValid(); 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Dump(lldb_private::Stream *s) const; 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool operator == (const DWARFAbbreviationDeclaration& rhs) const; 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// DWARFAttribute::collection& Attributes() { return m_attributes; } 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFAttribute::collection& Attributes() const { return m_attributes; } 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_uleb128_t m_code; 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_tag_t m_tag; 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint8_t m_has_children; 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFAttribute::collection m_attributes; 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_DWARFAbbreviationDeclaration_h_ 82