124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DWARFDebugInfoEntry.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 10d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton#ifndef SymbolFileDWARF_DWARFDebugInfoEntry_h_ 11d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton#define SymbolFileDWARF_DWARFDebugInfoEntry_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "SymbolFileDWARF.h" 145fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton#include "llvm/ADT/SmallVector.h" 155fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton 160963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton#include "DWARFDebugAbbrev.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFAbbreviationDeclaration.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDebugRanges.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <map> 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <set> 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef std::map<const DWARFDebugInfoEntry*, dw_addr_t> DIEToAddressMap; 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef DIEToAddressMap::iterator DIEToAddressMapIter; 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef DIEToAddressMap::const_iterator DIEToAddressMapConstIter; 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef std::map<dw_addr_t, const DWARFDebugInfoEntry*> AddressToDIEMap; 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef AddressToDIEMap::iterator AddressToDIEMapIter; 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef AddressToDIEMap::const_iterator AddressToDIEMapConstIter; 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef std::map<dw_offset_t, dw_offset_t> DIEToDIEMap; 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef DIEToDIEMap::iterator DIEToDIEMapIter; 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef DIEToDIEMap::const_iterator DIEToDIEMapConstIter; 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef std::map<uint32_t, const DWARFDebugInfoEntry*> UInt32ToDIEMap; 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef UInt32ToDIEMap::iterator UInt32ToDIEMapIter; 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef UInt32ToDIEMap::const_iterator UInt32ToDIEMapConstIter; 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef std::multimap<uint32_t, const DWARFDebugInfoEntry*> UInt32ToDIEMMap; 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef UInt32ToDIEMMap::iterator UInt32ToDIEMMapIter; 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef UInt32ToDIEMMap::const_iterator UInt32ToDIEMMapConstIter; 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Claytonclass DWARFDeclContext; 45cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton 46489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton#define DIE_SIBLING_IDX_BITSIZE 31 470963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton#define DIE_ABBR_IDX_BITSIZE 15 480963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugInfoEntry 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<DWARFDebugInfoEntry> collection; 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef collection::iterator iterator; 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef collection::const_iterator const_iterator; 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<dw_offset_t> offset_collection; 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef offset_collection::iterator offset_collection_iterator; 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef offset_collection::const_iterator offset_collection_const_iterator; 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class Attributes 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Attributes(); 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Attributes(); 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Append(const DWARFCompileUnit *cu, dw_offset_t attr_die_offset, dw_attr_t attr, dw_form_t form); 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit * CompileUnitAtIndex(uint32_t i) const { return m_infos[i].cu; } 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_offset_t DIEOffsetAtIndex(uint32_t i) const { return m_infos[i].die_offset; } 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_attr_t AttributeAtIndex(uint32_t i) const { return m_infos[i].attr; } 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_attr_t FormAtIndex(uint32_t i) const { return m_infos[i].form; } 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool ExtractFormValueAtIndex (SymbolFileDWARF* dwarf2Data, uint32_t i, DWARFFormValue &form_value) const; 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t FormValueAsUnsignedAtIndex (SymbolFileDWARF* dwarf2Data, uint32_t i, uint64_t fail_value) const; 7375d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton uint64_t FormValueAsUnsigned (SymbolFileDWARF* dwarf2Data, dw_attr_t attr, uint64_t fail_value) const; 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t FindAttributeIndex(dw_attr_t attr) const; 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool ContainsAttribute(dw_attr_t attr) const; 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool RemoveAttribute(dw_attr_t attr); 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Clear() { m_infos.clear(); } 7836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t Size() const { return m_infos.size(); } 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner protected: 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct Info 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit *cu; // Keep the compile unit with each attribute in case we have DW_FORM_ref_addr values 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_offset_t die_offset; 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_attr_t attr; 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_form_t form; 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 885fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton 895fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton typedef llvm::SmallVector<Info, 32> collection; 905fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton collection m_infos; 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct CompareState 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CompareState() : 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner die_offset_pairs() 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner assert(sizeof(dw_offset_t)*2 == sizeof(uint64_t)); 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool AddTypePair(dw_offset_t a, dw_offset_t b) 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t a_b_offsets = (uint64_t)a << 32 | (uint64_t)b; 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Return true if this type was inserted, false otherwise 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return die_offset_pairs.insert(a_b_offsets).second; 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::set< uint64_t > die_offset_pairs; 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugInfoEntry(): 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_offset (DW_INVALID_OFFSET), 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_parent_idx (0), 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_sibling_idx (0), 114489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_empty_children(false), 1150963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton m_abbr_idx (0), 116489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_has_children (false), 117489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_tag (0) 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 121489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton void Clear () 122489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton { 123489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_offset = DW_INVALID_OFFSET; 124489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_parent_idx = 0; 125489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_sibling_idx = 0; 126489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_empty_children = false; 127489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_abbr_idx = 0; 128489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_has_children = false; 129489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_tag = 0; 130489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton } 131489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton 132c5dca6c656ffc94d2f958c56d7bc9076eac90783Greg Clayton bool Contains (const DWARFDebugInfoEntry *die) const; 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void BuildAddressRangeTable( 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugAranges* debug_aranges) const; 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void BuildFunctionAddressRangeTable( 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugAranges* debug_aranges) const; 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1445fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton bool FastExtract( 1455fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton const lldb_private::DataExtractor& debug_info_data, 1465fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton const DWARFCompileUnit* cu, 1475fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton const uint8_t *fixed_form_sizes, 14836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton lldb::offset_t* offset_ptr); 1495fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool Extract( 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 15336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton lldb::offset_t* offset_ptr); 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool LookupAddress( 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const dw_addr_t address, 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugInfoEntry** function_die, 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugInfoEntry** block_die); 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t GetAttributes( 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 1655fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton const uint8_t *fixed_form_sizes, 166e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton DWARFDebugInfoEntry::Attributes& attrs, 167e5748d889fb7fb97b3ff07444894d7714776b609Greg Clayton uint32_t curr_depth = 0) const; // "curr_depth" for internal use only, don't set this yourself!!! 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_offset_t GetAttributeValue( 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const dw_attr_t attr, 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFFormValue& formValue, 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_offset_t* end_attr_offset_ptr = NULL) const; 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char* GetAttributeValueAsString( 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const dw_attr_t attr, 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char* fail_value) const; 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t GetAttributeValueAsUnsigned( 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const dw_attr_t attr, 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t fail_value) const; 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t GetAttributeValueAsReference( 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const dw_attr_t attr, 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t fail_value) const; 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int64_t GetAttributeValueAsSigned( 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const dw_attr_t attr, 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int64_t fail_value) const; 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2006b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi dw_addr_t GetAttributeHighPC( 2016b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi SymbolFileDWARF* dwarf2Data, 2026b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi const DWARFCompileUnit* cu, 2036b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi dw_addr_t lo_pc, 2046b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi uint64_t fail_value) const; 2056b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi 2066b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi bool GetAttributeAddressRange( 2076b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi SymbolFileDWARF* dwarf2Data, 2086b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi const DWARFCompileUnit* cu, 2096b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi dw_addr_t& lo_pc, 2106b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi dw_addr_t& hi_pc, 2116b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi uint64_t fail_value) const; 2126b80ad96e1960e9c5a4c6c5cab09cc7591d4c3f9Ashok Thirumurthi 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_offset_t GetAttributeValueAsLocation( 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const dw_attr_t attr, 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DataExtractor& data, 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t &block_size) const; 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char* GetName( 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu) const; 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char* GetMangledName( 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool substitute_name_allowed = true) const; 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char* GetPubname( 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu) const; 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool GetName( 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const dw_offset_t die_offset, 237169c5fbc8cac8a0bd724bd18fd9d816ca3d6486aJim Ingham lldb_private::Stream &s); 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool AppendTypeName( 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const dw_offset_t die_offset, 243169c5fbc8cac8a0bd724bd18fd9d816ca3d6486aJim Ingham lldb_private::Stream &s); 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24575d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton const char * GetQualifiedName ( 24675d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton SymbolFileDWARF* dwarf2Data, 24775d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton DWARFCompileUnit* cu, 24875d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton std::string &storage) const; 24975d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton 25075d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton const char * GetQualifiedName ( 25175d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton SymbolFileDWARF* dwarf2Data, 25275d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton DWARFCompileUnit* cu, 25375d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton const DWARFDebugInfoEntry::Attributes& attributes, 25475d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton std::string &storage) const; 25575d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton 2565fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// static int Compare( 2575fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// SymbolFileDWARF* dwarf2Data, 2585fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// dw_offset_t a_die_offset, 2595fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// dw_offset_t b_die_offset, 2605fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// CompareState &compare_state, 2615fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// bool compare_siblings, 2625fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// bool compare_children); 2635fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// 2645fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// static int Compare( 2655fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// SymbolFileDWARF* dwarf2Data, 2665fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// DWARFCompileUnit* a_cu, const DWARFDebugInfoEntry* a_die, 2675fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// DWARFCompileUnit* b_cu, const DWARFDebugInfoEntry* b_die, 2685fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// CompareState &compare_state, 2695fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// bool compare_siblings, 2705fcff9ac1a713d5e814b4a05edef7544be470ad0Greg Clayton// bool compare_children); 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool OffsetLessThan ( 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry& a, 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry& b); 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Dump( 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 279169c5fbc8cac8a0bd724bd18fd9d816ca3d6486aJim Ingham lldb_private::Stream &s, 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t recurse_depth) const; 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void DumpAncestry( 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry* oldest, 286169c5fbc8cac8a0bd724bd18fd9d816ca3d6486aJim Ingham lldb_private::Stream &s, 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t recurse_depth) const; 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void DumpAttribute( 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::DataExtractor& debug_info_data, 29336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton lldb::offset_t *offset_ptr, 294169c5fbc8cac8a0bd724bd18fd9d816ca3d6486aJim Ingham lldb_private::Stream &s, 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_attr_t attr, 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner dw_form_t form); 297545489247a7b520dd603c9e5b0f0ef05a77ba9e3Jim Ingham // This one dumps the comp unit name, objfile name and die offset for this die so the stream S. 298545489247a7b520dd603c9e5b0f0ef05a77ba9e3Jim Ingham void DumpLocation( 299545489247a7b520dd603c9e5b0f0ef05a77ba9e3Jim Ingham SymbolFileDWARF* dwarf2Data, 300545489247a7b520dd603c9e5b0f0ef05a77ba9e3Jim Ingham DWARFCompileUnit* cu, 301169c5fbc8cac8a0bd724bd18fd9d816ca3d6486aJim Ingham lldb_private::Stream &s) const; 302545489247a7b520dd603c9e5b0f0ef05a77ba9e3Jim Ingham 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool GetDIENamesAndRanges( 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFileDWARF* dwarf2Data, 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFCompileUnit* cu, 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * &name, 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * &mangled, 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugRanges::RangeList& rangeList, 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int& decl_file, 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int& decl_line, 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int& decl_column, 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int& call_file, 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int& call_line, 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int& call_column, 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::DWARFExpression *frame_base = NULL) const; 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3170963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton const DWARFAbbreviationDeclaration* 3182f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton GetAbbreviationDeclarationPtr (SymbolFileDWARF* dwarf2Data, 3192f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton const DWARFCompileUnit *cu, 32036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton lldb::offset_t &offset) const; 3210963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton 3220963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton dw_tag_t 3230963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton Tag () const 3240963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton { 3250963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton return m_tag; 3260963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton } 3270963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton 3280963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton bool 3290963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton IsNULL() const 3300963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton { 3310963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton return m_abbr_idx == 0; 3320963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton } 3330963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton 3340963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton dw_offset_t 3350963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton GetOffset () const 3360963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton { 3370963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton return m_offset; 3380963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton } 3390963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton 3400963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton void 3410963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton SetOffset (dw_offset_t offset) 3420963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton { 3430963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton m_offset = offset; 3440963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton } 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3460963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton bool 3470963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton HasChildren () const 3480963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton { 3490963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton return m_has_children; 3500963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton } 3510963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton 3520963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton void 3530963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton SetHasChildren (bool b) 3540963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton { 3550963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton m_has_children = b; 3560963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton } 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // We know we are kept in a vector of contiguous entries, so we know 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // our parent will be some index behind "this". 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugInfoEntry* GetParent() { return m_parent_idx > 0 ? this - m_parent_idx : NULL; } 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry* GetParent() const { return m_parent_idx > 0 ? this - m_parent_idx : NULL; } 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // We know we are kept in a vector of contiguous entries, so we know 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // our sibling will be some index after "this". 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DWARFDebugInfoEntry* GetSibling() { return m_sibling_idx > 0 ? this + m_sibling_idx : NULL; } 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DWARFDebugInfoEntry* GetSibling() const { return m_sibling_idx > 0 ? this + m_sibling_idx : NULL; } 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // We know we are kept in a vector of contiguous entries, so we know 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // we don't need to store our child pointer, if we have a child it will 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // be the next entry in the list... 369489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton DWARFDebugInfoEntry* GetFirstChild() { return (HasChildren() && !m_empty_children) ? this + 1 : NULL; } 370489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton const DWARFDebugInfoEntry* GetFirstChild() const { return (HasChildren() && !m_empty_children) ? this + 1 : NULL; } 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37275d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton 373b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton void GetDeclContextDIEs (SymbolFileDWARF* dwarf2Data, 374b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton DWARFCompileUnit* cu, 375b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton DWARFDIECollection &decl_context_dies) const; 376b88575efac471db9156c731c3e28ad7e6d14b5efGreg Clayton 377cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton void GetDWARFDeclContext (SymbolFileDWARF* dwarf2Data, 378cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton DWARFCompileUnit* cu, 379cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton DWARFDeclContext &dwarf_decl_ctx) const; 380cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton 381cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton 382cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton bool MatchesDWARFDeclContext(SymbolFileDWARF* dwarf2Data, 383cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton DWARFCompileUnit* cu, 384cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton const DWARFDeclContext &dwarf_decl_ctx) const; 385cbff0fb344c17ef0699c1375f6ddeb5bcd1bdbe2Greg Clayton 38675d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton const DWARFDebugInfoEntry* GetParentDeclContextDIE (SymbolFileDWARF* dwarf2Data, 38775d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton DWARFCompileUnit* cu) const; 38875d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton const DWARFDebugInfoEntry* GetParentDeclContextDIE (SymbolFileDWARF* dwarf2Data, 38975d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton DWARFCompileUnit* cu, 39075d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton const DWARFDebugInfoEntry::Attributes& attributes) const; 39175d8c2591f6c56a09338bf4967a41510165a907eGreg Clayton 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetParent (DWARFDebugInfoEntry* parent) 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (parent) 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // We know we are kept in a vector of contiguous entries, so we know 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // our parent will be some index behind "this". 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_parent_idx = this - parent; 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_parent_idx = 0; 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetSibling (DWARFDebugInfoEntry* sibling) 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (sibling) 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // We know we are kept in a vector of contiguous entries, so we know 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // our sibling will be some index after "this". 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_sibling_idx = sibling - this; 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner sibling->SetParent(GetParent()); 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_sibling_idx = 0; 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 418489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton void 419489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton SetSiblingIndex (uint32_t idx) 420489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton { 421489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_sibling_idx = idx; 422489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton } 423489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton 424489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton void 425489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton SetParentIndex (uint32_t idx) 426489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton { 427489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_parent_idx = idx; 428489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton } 429489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton 430489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton bool 431489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton GetEmptyChildren () const 432489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton { 433489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton return m_empty_children; 434489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton } 435489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton 436489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton void 437489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton SetEmptyChildren (bool b) 438489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton { 439489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_empty_children = b; 440489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton } 441489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton 442489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton static void 443489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton DumpDIECollection (lldb_private::Stream &strm, 444489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton DWARFDebugInfoEntry::collection &die_collection); 445489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton 44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 447489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton dw_offset_t m_offset; // Offset within the .debug_info of the start of this entry 448489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton uint32_t m_parent_idx; // How many to subtract from "this" to get the parent. If zero this die has no parent 449489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton uint32_t m_sibling_idx:31, // How many to add to "this" to get the sibling. 450489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_empty_children:1; // If a DIE says it had children, yet it just contained a NULL tag, this will be set. 4510963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton uint32_t m_abbr_idx:DIE_ABBR_IDX_BITSIZE, 452489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_has_children:1, // Set to 1 if this DIE has children 453489575c164b3b3cfed2f80af6cc58848ad17ab5aGreg Clayton m_tag:16; // A copy of the DW_TAG value so we don't have to go through the compile unit abbrev table 4540963fdd2478c6404d11b96e7d5ae1f2de8b3bb1fGreg Clayton 45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 45624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 457d996d0c32b483c2190e1eb288cd3bbbd259c2960Greg Clayton#endif // SymbolFileDWARF_DWARFDebugInfoEntry_h_ 458