]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / source / Plugins / SymbolFile / DWARF / DWARFDebugAbbrev.h
1 //===-- DWARFDebugAbbrev.h --------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef SymbolFileDWARF_DWARFDebugAbbrev_h_
11 #define SymbolFileDWARF_DWARFDebugAbbrev_h_
12
13 #include <list>
14 #include <map>
15
16 #include "lldb/lldb-private.h"
17
18 #include "DWARFDefines.h"
19 #include "DWARFAbbreviationDeclaration.h"
20
21 typedef std::vector<DWARFAbbreviationDeclaration>               DWARFAbbreviationDeclarationColl;
22 typedef DWARFAbbreviationDeclarationColl::iterator              DWARFAbbreviationDeclarationCollIter;
23 typedef DWARFAbbreviationDeclarationColl::const_iterator        DWARFAbbreviationDeclarationCollConstIter;
24
25
26 class DWARFAbbreviationDeclarationSet
27 {
28 public:
29     DWARFAbbreviationDeclarationSet() :
30         m_offset(DW_INVALID_OFFSET),
31         m_idx_offset(0),
32         m_decls()
33         {
34         }
35
36     DWARFAbbreviationDeclarationSet(dw_offset_t offset, uint32_t idx_offset) :
37         m_offset(offset),
38         m_idx_offset(idx_offset),
39         m_decls()
40         {
41         }
42
43     void Clear();
44     dw_offset_t GetOffset() const { return m_offset; }
45     void Dump(lldb_private::Stream *s) const;
46     bool Extract(const lldb_private::DataExtractor& data, lldb::offset_t *offset_ptr);
47     //void Encode(BinaryStreamBuf& debug_abbrev_buf) const;
48     dw_uleb128_t AppendAbbrevDeclSequential(const DWARFAbbreviationDeclaration& abbrevDecl);
49
50     const DWARFAbbreviationDeclaration* GetAbbreviationDeclaration(dw_uleb128_t abbrCode) const;
51 private:
52     dw_offset_t m_offset;
53     uint32_t m_idx_offset;
54     std::vector<DWARFAbbreviationDeclaration> m_decls;
55 };
56
57 typedef std::map<dw_offset_t, DWARFAbbreviationDeclarationSet> DWARFAbbreviationDeclarationCollMap;
58 typedef DWARFAbbreviationDeclarationCollMap::iterator DWARFAbbreviationDeclarationCollMapIter;
59 typedef DWARFAbbreviationDeclarationCollMap::const_iterator DWARFAbbreviationDeclarationCollMapConstIter;
60
61
62 class DWARFDebugAbbrev
63 {
64 public:
65     DWARFDebugAbbrev();
66     const DWARFAbbreviationDeclarationSet*  GetAbbreviationDeclarationSet(dw_offset_t cu_abbr_offset) const;
67     void Dump(lldb_private::Stream *s) const;
68     void Parse(const lldb_private::DataExtractor& data);
69 protected:
70     DWARFAbbreviationDeclarationCollMap m_abbrevCollMap;
71     mutable DWARFAbbreviationDeclarationCollMapConstIter m_prev_abbr_offset_pos;
72 };
73
74 #endif  // SymbolFileDWARF_DWARFDebugAbbrev_h_