124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DWARFDebugAbbrev.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_DWARFDebugAbbrev_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define SymbolFileDWARF_DWARFDebugAbbrev_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list>
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <map>
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDefines.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFAbbreviationDeclaration.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef std::vector<DWARFAbbreviationDeclaration>               DWARFAbbreviationDeclarationColl;
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef DWARFAbbreviationDeclarationColl::iterator              DWARFAbbreviationDeclarationCollIter;
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef DWARFAbbreviationDeclarationColl::const_iterator        DWARFAbbreviationDeclarationCollConstIter;
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFAbbreviationDeclarationSet
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFAbbreviationDeclarationSet() :
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_offset(DW_INVALID_OFFSET),
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_idx_offset(0),
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_decls()
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFAbbreviationDeclarationSet(dw_offset_t offset, uint32_t idx_offset) :
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_offset(offset),
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_idx_offset(idx_offset),
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_decls()
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void Clear();
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    dw_offset_t GetOffset() const { return m_offset; }
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void Dump(lldb_private::Stream *s) const;
4636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    bool Extract(const lldb_private::DataExtractor& data, lldb::offset_t *offset_ptr);
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //void Encode(BinaryStreamBuf& debug_abbrev_buf) const;
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    dw_uleb128_t AppendAbbrevDeclSequential(const DWARFAbbreviationDeclaration& abbrevDecl);
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DWARFAbbreviationDeclaration* GetAbbreviationDeclaration(dw_uleb128_t abbrCode) const;
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    dw_offset_t m_offset;
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t m_idx_offset;
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::vector<DWARFAbbreviationDeclaration> m_decls;
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef std::map<dw_offset_t, DWARFAbbreviationDeclarationSet> DWARFAbbreviationDeclarationCollMap;
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef DWARFAbbreviationDeclarationCollMap::iterator DWARFAbbreviationDeclarationCollMapIter;
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnertypedef DWARFAbbreviationDeclarationCollMap::const_iterator DWARFAbbreviationDeclarationCollMapConstIter;
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugAbbrev
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFDebugAbbrev();
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const DWARFAbbreviationDeclarationSet*  GetAbbreviationDeclarationSet(dw_offset_t cu_abbr_offset) const;
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void Dump(lldb_private::Stream *s) const;
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void Parse(const lldb_private::DataExtractor& data);
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DWARFAbbreviationDeclarationCollMap m_abbrevCollMap;
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    mutable DWARFAbbreviationDeclarationCollMapConstIter m_prev_abbr_offset_pos;
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // SymbolFileDWARF_DWARFDebugAbbrev_h_
75