17fa27ce4SDimitry Andric //===-- SymbolFileJSON.h ----------------------------------------*- C++ -*-===// 27fa27ce4SDimitry Andric // 37fa27ce4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 47fa27ce4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 57fa27ce4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67fa27ce4SDimitry Andric // 77fa27ce4SDimitry Andric //===----------------------------------------------------------------------===// 87fa27ce4SDimitry Andric 97fa27ce4SDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_JSON_SYMBOLFILEJSON_H 107fa27ce4SDimitry Andric #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_JSON_SYMBOLFILEJSON_H 117fa27ce4SDimitry Andric 127fa27ce4SDimitry Andric #include <map> 137fa27ce4SDimitry Andric #include <optional> 147fa27ce4SDimitry Andric #include <vector> 157fa27ce4SDimitry Andric 167fa27ce4SDimitry Andric #include "lldb/Symbol/CompileUnit.h" 177fa27ce4SDimitry Andric #include "lldb/Symbol/SymbolFile.h" 187fa27ce4SDimitry Andric 197fa27ce4SDimitry Andric namespace lldb_private { 207fa27ce4SDimitry Andric 217fa27ce4SDimitry Andric class SymbolFileJSON : public lldb_private::SymbolFileCommon { 227fa27ce4SDimitry Andric /// LLVM RTTI support. 237fa27ce4SDimitry Andric static char ID; 247fa27ce4SDimitry Andric 257fa27ce4SDimitry Andric public: 267fa27ce4SDimitry Andric /// LLVM RTTI support. 277fa27ce4SDimitry Andric /// \{ isA(const void * ClassID)287fa27ce4SDimitry Andric bool isA(const void *ClassID) const override { 297fa27ce4SDimitry Andric return ClassID == &ID || SymbolFileCommon::isA(ClassID); 307fa27ce4SDimitry Andric } classof(const SymbolFile * obj)317fa27ce4SDimitry Andric static bool classof(const SymbolFile *obj) { return obj->isA(&ID); } 327fa27ce4SDimitry Andric /// \} 337fa27ce4SDimitry Andric 347fa27ce4SDimitry Andric SymbolFileJSON(lldb::ObjectFileSP objfile_sp); 357fa27ce4SDimitry Andric 367fa27ce4SDimitry Andric static void Initialize(); 377fa27ce4SDimitry Andric 387fa27ce4SDimitry Andric static void Terminate(); 397fa27ce4SDimitry Andric GetPluginNameStatic()407fa27ce4SDimitry Andric static llvm::StringRef GetPluginNameStatic() { return "JSON"; } 417fa27ce4SDimitry Andric 427fa27ce4SDimitry Andric static llvm::StringRef GetPluginDescriptionStatic(); 437fa27ce4SDimitry Andric 447fa27ce4SDimitry Andric static lldb_private::SymbolFile * 457fa27ce4SDimitry Andric CreateInstance(lldb::ObjectFileSP objfile_sp); 467fa27ce4SDimitry Andric GetPluginName()477fa27ce4SDimitry Andric llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 487fa27ce4SDimitry Andric 497fa27ce4SDimitry Andric uint32_t CalculateAbilities() override; 507fa27ce4SDimitry Andric ParseLanguage(CompileUnit & comp_unit)517fa27ce4SDimitry Andric lldb::LanguageType ParseLanguage(CompileUnit &comp_unit) override { 527fa27ce4SDimitry Andric return lldb::eLanguageTypeUnknown; 537fa27ce4SDimitry Andric } 547fa27ce4SDimitry Andric ParseFunctions(CompileUnit & comp_unit)557fa27ce4SDimitry Andric size_t ParseFunctions(CompileUnit &comp_unit) override { return 0; } 567fa27ce4SDimitry Andric ParseLineTable(CompileUnit & comp_unit)577fa27ce4SDimitry Andric bool ParseLineTable(CompileUnit &comp_unit) override { return false; } 587fa27ce4SDimitry Andric ParseDebugMacros(CompileUnit & comp_unit)597fa27ce4SDimitry Andric bool ParseDebugMacros(CompileUnit &comp_unit) override { return false; } 607fa27ce4SDimitry Andric ParseSupportFiles(CompileUnit & comp_unit,SupportFileList & support_files)617fa27ce4SDimitry Andric bool ParseSupportFiles(CompileUnit &comp_unit, 62aca2e42cSDimitry Andric SupportFileList &support_files) override { 637fa27ce4SDimitry Andric return false; 647fa27ce4SDimitry Andric } 657fa27ce4SDimitry Andric ParseTypes(CompileUnit & cu)667fa27ce4SDimitry Andric size_t ParseTypes(CompileUnit &cu) override { return 0; } 677fa27ce4SDimitry Andric ParseImportedModules(const SymbolContext & sc,std::vector<lldb_private::SourceModule> & imported_modules)687fa27ce4SDimitry Andric bool ParseImportedModules( 697fa27ce4SDimitry Andric const SymbolContext &sc, 707fa27ce4SDimitry Andric std::vector<lldb_private::SourceModule> &imported_modules) override { 717fa27ce4SDimitry Andric return false; 727fa27ce4SDimitry Andric } 737fa27ce4SDimitry Andric ParseBlocksRecursive(Function & func)747fa27ce4SDimitry Andric size_t ParseBlocksRecursive(Function &func) override { return 0; } 757fa27ce4SDimitry Andric ParseVariablesForContext(const SymbolContext & sc)767fa27ce4SDimitry Andric size_t ParseVariablesForContext(const SymbolContext &sc) override { 777fa27ce4SDimitry Andric return 0; 787fa27ce4SDimitry Andric } 797fa27ce4SDimitry Andric CalculateNumCompileUnits()807fa27ce4SDimitry Andric uint32_t CalculateNumCompileUnits() override { return 0; } 817fa27ce4SDimitry Andric 827fa27ce4SDimitry Andric lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) override; 837fa27ce4SDimitry Andric ResolveTypeUID(lldb::user_id_t type_uid)847fa27ce4SDimitry Andric Type *ResolveTypeUID(lldb::user_id_t type_uid) override { return nullptr; } GetDynamicArrayInfoForUID(lldb::user_id_t type_uid,const lldb_private::ExecutionContext * exe_ctx)857fa27ce4SDimitry Andric std::optional<ArrayInfo> GetDynamicArrayInfoForUID( 867fa27ce4SDimitry Andric lldb::user_id_t type_uid, 877fa27ce4SDimitry Andric const lldb_private::ExecutionContext *exe_ctx) override { 887fa27ce4SDimitry Andric return std::nullopt; 897fa27ce4SDimitry Andric } 907fa27ce4SDimitry Andric CompleteType(CompilerType & compiler_type)917fa27ce4SDimitry Andric bool CompleteType(CompilerType &compiler_type) override { return false; } 927fa27ce4SDimitry Andric 937fa27ce4SDimitry Andric uint32_t ResolveSymbolContext(const lldb_private::Address &so_addr, 947fa27ce4SDimitry Andric lldb::SymbolContextItem resolve_scope, 957fa27ce4SDimitry Andric lldb_private::SymbolContext &sc) override; 967fa27ce4SDimitry Andric 977fa27ce4SDimitry Andric void GetTypes(lldb_private::SymbolContextScope *sc_scope, 987fa27ce4SDimitry Andric lldb::TypeClass type_mask, 997fa27ce4SDimitry Andric lldb_private::TypeList &type_list) override; 1007fa27ce4SDimitry Andric 1017fa27ce4SDimitry Andric void AddSymbols(Symtab &symtab) override; 1027fa27ce4SDimitry Andric 1037fa27ce4SDimitry Andric private: 1047fa27ce4SDimitry Andric lldb::addr_t GetBaseFileAddress(); 1057fa27ce4SDimitry Andric 1067fa27ce4SDimitry Andric std::vector<std::pair<uint64_t, std::string>> m_symbols; 1077fa27ce4SDimitry Andric }; 1087fa27ce4SDimitry Andric } // namespace lldb_private 1097fa27ce4SDimitry Andric 1107fa27ce4SDimitry Andric #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_JSON_SYMBOLFILEJSON_H 111