1*06c3fb27SDimitry Andric //===-- SymbolFileJSON.h ----------------------------------------*- C++ -*-===// 2*06c3fb27SDimitry Andric // 3*06c3fb27SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*06c3fb27SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*06c3fb27SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*06c3fb27SDimitry Andric // 7*06c3fb27SDimitry Andric //===----------------------------------------------------------------------===// 8*06c3fb27SDimitry Andric 9*06c3fb27SDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_JSON_SYMBOLFILEJSON_H 10*06c3fb27SDimitry Andric #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_JSON_SYMBOLFILEJSON_H 11*06c3fb27SDimitry Andric 12*06c3fb27SDimitry Andric #include <map> 13*06c3fb27SDimitry Andric #include <optional> 14*06c3fb27SDimitry Andric #include <vector> 15*06c3fb27SDimitry Andric 16*06c3fb27SDimitry Andric #include "lldb/Symbol/CompileUnit.h" 17*06c3fb27SDimitry Andric #include "lldb/Symbol/SymbolFile.h" 18*06c3fb27SDimitry Andric 19*06c3fb27SDimitry Andric namespace lldb_private { 20*06c3fb27SDimitry Andric 21*06c3fb27SDimitry Andric class SymbolFileJSON : public lldb_private::SymbolFileCommon { 22*06c3fb27SDimitry Andric /// LLVM RTTI support. 23*06c3fb27SDimitry Andric static char ID; 24*06c3fb27SDimitry Andric 25*06c3fb27SDimitry Andric public: 26*06c3fb27SDimitry Andric /// LLVM RTTI support. 27*06c3fb27SDimitry Andric /// \{ 28*06c3fb27SDimitry Andric bool isA(const void *ClassID) const override { 29*06c3fb27SDimitry Andric return ClassID == &ID || SymbolFileCommon::isA(ClassID); 30*06c3fb27SDimitry Andric } 31*06c3fb27SDimitry Andric static bool classof(const SymbolFile *obj) { return obj->isA(&ID); } 32*06c3fb27SDimitry Andric /// \} 33*06c3fb27SDimitry Andric 34*06c3fb27SDimitry Andric SymbolFileJSON(lldb::ObjectFileSP objfile_sp); 35*06c3fb27SDimitry Andric 36*06c3fb27SDimitry Andric static void Initialize(); 37*06c3fb27SDimitry Andric 38*06c3fb27SDimitry Andric static void Terminate(); 39*06c3fb27SDimitry Andric 40*06c3fb27SDimitry Andric static llvm::StringRef GetPluginNameStatic() { return "JSON"; } 41*06c3fb27SDimitry Andric 42*06c3fb27SDimitry Andric static llvm::StringRef GetPluginDescriptionStatic(); 43*06c3fb27SDimitry Andric 44*06c3fb27SDimitry Andric static lldb_private::SymbolFile * 45*06c3fb27SDimitry Andric CreateInstance(lldb::ObjectFileSP objfile_sp); 46*06c3fb27SDimitry Andric 47*06c3fb27SDimitry Andric llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 48*06c3fb27SDimitry Andric 49*06c3fb27SDimitry Andric uint32_t CalculateAbilities() override; 50*06c3fb27SDimitry Andric 51*06c3fb27SDimitry Andric lldb::LanguageType ParseLanguage(CompileUnit &comp_unit) override { 52*06c3fb27SDimitry Andric return lldb::eLanguageTypeUnknown; 53*06c3fb27SDimitry Andric } 54*06c3fb27SDimitry Andric 55*06c3fb27SDimitry Andric size_t ParseFunctions(CompileUnit &comp_unit) override { return 0; } 56*06c3fb27SDimitry Andric 57*06c3fb27SDimitry Andric bool ParseLineTable(CompileUnit &comp_unit) override { return false; } 58*06c3fb27SDimitry Andric 59*06c3fb27SDimitry Andric bool ParseDebugMacros(CompileUnit &comp_unit) override { return false; } 60*06c3fb27SDimitry Andric 61*06c3fb27SDimitry Andric bool ParseSupportFiles(CompileUnit &comp_unit, 62*06c3fb27SDimitry Andric FileSpecList &support_files) override { 63*06c3fb27SDimitry Andric return false; 64*06c3fb27SDimitry Andric } 65*06c3fb27SDimitry Andric 66*06c3fb27SDimitry Andric size_t ParseTypes(CompileUnit &cu) override { return 0; } 67*06c3fb27SDimitry Andric 68*06c3fb27SDimitry Andric bool ParseImportedModules( 69*06c3fb27SDimitry Andric const SymbolContext &sc, 70*06c3fb27SDimitry Andric std::vector<lldb_private::SourceModule> &imported_modules) override { 71*06c3fb27SDimitry Andric return false; 72*06c3fb27SDimitry Andric } 73*06c3fb27SDimitry Andric 74*06c3fb27SDimitry Andric size_t ParseBlocksRecursive(Function &func) override { return 0; } 75*06c3fb27SDimitry Andric 76*06c3fb27SDimitry Andric size_t ParseVariablesForContext(const SymbolContext &sc) override { 77*06c3fb27SDimitry Andric return 0; 78*06c3fb27SDimitry Andric } 79*06c3fb27SDimitry Andric 80*06c3fb27SDimitry Andric uint32_t CalculateNumCompileUnits() override { return 0; } 81*06c3fb27SDimitry Andric 82*06c3fb27SDimitry Andric lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) override; 83*06c3fb27SDimitry Andric 84*06c3fb27SDimitry Andric Type *ResolveTypeUID(lldb::user_id_t type_uid) override { return nullptr; } 85*06c3fb27SDimitry Andric std::optional<ArrayInfo> GetDynamicArrayInfoForUID( 86*06c3fb27SDimitry Andric lldb::user_id_t type_uid, 87*06c3fb27SDimitry Andric const lldb_private::ExecutionContext *exe_ctx) override { 88*06c3fb27SDimitry Andric return std::nullopt; 89*06c3fb27SDimitry Andric } 90*06c3fb27SDimitry Andric 91*06c3fb27SDimitry Andric bool CompleteType(CompilerType &compiler_type) override { return false; } 92*06c3fb27SDimitry Andric 93*06c3fb27SDimitry Andric uint32_t ResolveSymbolContext(const lldb_private::Address &so_addr, 94*06c3fb27SDimitry Andric lldb::SymbolContextItem resolve_scope, 95*06c3fb27SDimitry Andric lldb_private::SymbolContext &sc) override; 96*06c3fb27SDimitry Andric 97*06c3fb27SDimitry Andric void GetTypes(lldb_private::SymbolContextScope *sc_scope, 98*06c3fb27SDimitry Andric lldb::TypeClass type_mask, 99*06c3fb27SDimitry Andric lldb_private::TypeList &type_list) override; 100*06c3fb27SDimitry Andric 101*06c3fb27SDimitry Andric void AddSymbols(Symtab &symtab) override; 102*06c3fb27SDimitry Andric 103*06c3fb27SDimitry Andric private: 104*06c3fb27SDimitry Andric lldb::addr_t GetBaseFileAddress(); 105*06c3fb27SDimitry Andric 106*06c3fb27SDimitry Andric std::vector<std::pair<uint64_t, std::string>> m_symbols; 107*06c3fb27SDimitry Andric }; 108*06c3fb27SDimitry Andric } // namespace lldb_private 109*06c3fb27SDimitry Andric 110*06c3fb27SDimitry Andric #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_JSON_SYMBOLFILEJSON_H 111