124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DWARFDIECollection.cpp ----------------------------------*- 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#include "DWARFDIECollection.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <algorithm> 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDebugInfoEntry.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace std; 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDWARFDIECollection::Insert(const DWARFDebugInfoEntry *die) 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner iterator end_pos = m_dies.end(); 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner iterator insert_pos = upper_bound(m_dies.begin(), end_pos, die); 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (insert_pos != end_pos && (*insert_pos == die)) 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_dies.insert(insert_pos, die); 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Claytonvoid 33b433a3d8b910d571c0bcdcd5018778ac3763e703Greg ClaytonDWARFDIECollection::Append (const DWARFDebugInfoEntry *die) 34b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton{ 35b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton m_dies.push_back (die); 36b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton} 37b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst DWARFDebugInfoEntry * 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDWARFDIECollection::GetDIEPtrAtIndex(uint32_t idx) const 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (idx < m_dies.size()) 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_dies[idx]; 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return NULL; 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDWARFDIECollection::Size() const 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_dies.size(); 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerDWARFDIECollection::Dump(Stream *s, const char* title) const 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (title && title[0] != '\0') 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner s->Printf( "%s\n", title); 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const_iterator end_pos = m_dies.end(); 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const_iterator pos; 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (pos = m_dies.begin(); pos != end_pos; ++pos) 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner s->Printf( "0x%8.8x\n", (*pos)->GetOffset()); 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 63