1254721Semaste//===-- NameToDIE.cpp -------------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#include "NameToDIE.h" 11254721Semaste#include "lldb/Core/ConstString.h" 12254721Semaste#include "lldb/Core/Stream.h" 13254721Semaste#include "lldb/Core/StreamString.h" 14254721Semaste#include "lldb/Core/RegularExpression.h" 15254721Semaste#include "lldb/Symbol/ObjectFile.h" 16254721Semaste 17254721Semaste#include "DWARFCompileUnit.h" 18254721Semaste#include "DWARFDebugInfo.h" 19254721Semaste#include "DWARFDebugInfoEntry.h" 20254721Semaste#include "SymbolFileDWARF.h" 21254721Semasteusing namespace lldb; 22254721Semasteusing namespace lldb_private; 23254721Semaste 24254721Semastevoid 25254721SemasteNameToDIE::Finalize() 26254721Semaste{ 27254721Semaste m_map.Sort (); 28254721Semaste m_map.SizeToFit (); 29254721Semaste} 30254721Semaste 31254721Semastevoid 32254721SemasteNameToDIE::Insert (const ConstString& name, uint32_t die_offset) 33254721Semaste{ 34254721Semaste m_map.Append(name.GetCString(), die_offset); 35254721Semaste} 36254721Semaste 37254721Semastesize_t 38254721SemasteNameToDIE::Find (const ConstString &name, DIEArray &info_array) const 39254721Semaste{ 40254721Semaste return m_map.GetValues (name.GetCString(), info_array); 41254721Semaste} 42254721Semaste 43254721Semastesize_t 44254721SemasteNameToDIE::Find (const RegularExpression& regex, DIEArray &info_array) const 45254721Semaste{ 46254721Semaste return m_map.GetValues (regex, info_array); 47254721Semaste} 48254721Semaste 49254721Semastesize_t 50254721SemasteNameToDIE::FindAllEntriesForCompileUnit (uint32_t cu_offset, 51254721Semaste uint32_t cu_end_offset, 52254721Semaste DIEArray &info_array) const 53254721Semaste{ 54254721Semaste const size_t initial_size = info_array.size(); 55254721Semaste const uint32_t size = m_map.GetSize(); 56254721Semaste for (uint32_t i=0; i<size; ++i) 57254721Semaste { 58254721Semaste const uint32_t die_offset = m_map.GetValueAtIndexUnchecked(i); 59254721Semaste if (cu_offset < die_offset && die_offset < cu_end_offset) 60254721Semaste info_array.push_back (die_offset); 61254721Semaste } 62254721Semaste return info_array.size() - initial_size; 63254721Semaste} 64254721Semaste 65254721Semastevoid 66254721SemasteNameToDIE::Dump (Stream *s) 67254721Semaste{ 68254721Semaste const uint32_t size = m_map.GetSize(); 69254721Semaste for (uint32_t i=0; i<size; ++i) 70254721Semaste { 71254721Semaste const char *cstr = m_map.GetCStringAtIndex(i); 72254721Semaste s->Printf("%p: {0x%8.8x} \"%s\"\n", cstr, m_map.GetValueAtIndexUnchecked(i), cstr); 73254721Semaste } 74254721Semaste} 75254721Semaste 76254721Semastevoid 77254721SemasteNameToDIE::ForEach (std::function <bool(const char *name, uint32_t die_offset)> const &callback) const 78254721Semaste{ 79254721Semaste const uint32_t size = m_map.GetSize(); 80254721Semaste for (uint32_t i=0; i<size; ++i) 81254721Semaste { 82254721Semaste if (!callback(m_map.GetCStringAtIndexUnchecked(i), 83254721Semaste m_map.GetValueAtIndexUnchecked (i))) 84254721Semaste break; 85254721Semaste } 86254721Semaste} 87