1254721Semaste//===-- SymbolFileSymtab.h --------------------------------------*- C++ -*-===//
2254721Semaste//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6254721Semaste//
7254721Semaste//===----------------------------------------------------------------------===//
8254721Semaste
9254721Semaste#ifndef liblldb_SymbolFileSymtab_h_
10254721Semaste#define liblldb_SymbolFileSymtab_h_
11254721Semaste
12321369Sdim#include <map>
13296417Sdim#include <vector>
14296417Sdim
15254721Semaste#include "lldb/Symbol/SymbolFile.h"
16254721Semaste#include "lldb/Symbol/Symtab.h"
17254721Semaste
18314564Sdimclass SymbolFileSymtab : public lldb_private::SymbolFile {
19360784Sdim  /// LLVM RTTI support.
20360784Sdim  static char ID;
21360784Sdim
22254721Semastepublic:
23360784Sdim  /// LLVM RTTI support.
24360784Sdim  /// \{
25360784Sdim  bool isA(const void *ClassID) const override {
26360784Sdim    return ClassID == &ID || SymbolFile::isA(ClassID);
27360784Sdim  }
28360784Sdim  static bool classof(const SymbolFile *obj) { return obj->isA(&ID); }
29360784Sdim  /// \}
30360784Sdim
31314564Sdim  // Constructors and Destructors
32360784Sdim  SymbolFileSymtab(lldb::ObjectFileSP objfile_sp);
33296417Sdim
34314564Sdim  ~SymbolFileSymtab() override;
35296417Sdim
36314564Sdim  // Static Functions
37314564Sdim  static void Initialize();
38254721Semaste
39314564Sdim  static void Terminate();
40254721Semaste
41314564Sdim  static lldb_private::ConstString GetPluginNameStatic();
42254721Semaste
43314564Sdim  static const char *GetPluginDescriptionStatic();
44254721Semaste
45314564Sdim  static lldb_private::SymbolFile *
46360784Sdim  CreateInstance(lldb::ObjectFileSP objfile_sp);
47254721Semaste
48314564Sdim  uint32_t CalculateAbilities() override;
49254721Semaste
50314564Sdim  // Compile Unit function calls
51314564Sdim  lldb::LanguageType
52344779Sdim  ParseLanguage(lldb_private::CompileUnit &comp_unit) override;
53254721Semaste
54344779Sdim  size_t ParseFunctions(lldb_private::CompileUnit &comp_unit) override;
55254721Semaste
56344779Sdim  bool ParseLineTable(lldb_private::CompileUnit &comp_unit) override;
57254721Semaste
58344779Sdim  bool ParseDebugMacros(lldb_private::CompileUnit &comp_unit) override;
59296417Sdim
60344779Sdim  bool ParseSupportFiles(lldb_private::CompileUnit &comp_unit,
61344779Sdim                         lldb_private::FileSpecList &support_files) override;
62254721Semaste
63344779Sdim  size_t ParseTypes(lldb_private::CompileUnit &comp_unit) override;
64344779Sdim
65314564Sdim  bool ParseImportedModules(
66314564Sdim      const lldb_private::SymbolContext &sc,
67353358Sdim      std::vector<lldb_private::SourceModule> &imported_modules) override;
68254721Semaste
69344779Sdim  size_t ParseBlocksRecursive(lldb_private::Function &func) override;
70254721Semaste
71314564Sdim  size_t
72314564Sdim  ParseVariablesForContext(const lldb_private::SymbolContext &sc) override;
73254721Semaste
74314564Sdim  lldb_private::Type *ResolveTypeUID(lldb::user_id_t type_uid) override;
75344779Sdim  llvm::Optional<ArrayInfo> GetDynamicArrayInfoForUID(
76344779Sdim      lldb::user_id_t type_uid,
77344779Sdim      const lldb_private::ExecutionContext *exe_ctx) override;
78254721Semaste
79314564Sdim  bool CompleteType(lldb_private::CompilerType &compiler_type) override;
80254721Semaste
81314564Sdim  uint32_t ResolveSymbolContext(const lldb_private::Address &so_addr,
82344779Sdim                                lldb::SymbolContextItem resolve_scope,
83314564Sdim                                lldb_private::SymbolContext &sc) override;
84254721Semaste
85360784Sdim  void GetTypes(lldb_private::SymbolContextScope *sc_scope,
86360784Sdim                lldb::TypeClass type_mask,
87360784Sdim                lldb_private::TypeList &type_list) override;
88254721Semaste
89314564Sdim  // PluginInterface protocol
90314564Sdim  lldb_private::ConstString GetPluginName() override;
91254721Semaste
92314564Sdim  uint32_t GetPluginVersion() override;
93314564Sdim
94254721Semasteprotected:
95360784Sdim  uint32_t CalculateNumCompileUnits() override;
96360784Sdim
97360784Sdim  lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) override;
98360784Sdim
99314564Sdim  typedef std::map<lldb_private::ConstString, lldb::TypeSP> TypeMap;
100254721Semaste
101314564Sdim  lldb_private::Symtab::IndexCollection m_source_indexes;
102314564Sdim  lldb_private::Symtab::IndexCollection m_func_indexes;
103314564Sdim  lldb_private::Symtab::IndexCollection m_code_indexes;
104314564Sdim  lldb_private::Symtab::IndexCollection m_data_indexes;
105314564Sdim  lldb_private::Symtab::NameToIndexMap m_objc_class_name_to_index;
106314564Sdim  TypeMap m_objc_class_types;
107314564Sdim
108254721Semasteprivate:
109314564Sdim  DISALLOW_COPY_AND_ASSIGN(SymbolFileSymtab);
110254721Semaste};
111254721Semaste
112296417Sdim#endif // liblldb_SymbolFileSymtab_h_
113