//===-- GsymContext.h --------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===/ #ifndef LLVM_DEBUGINFO_GSYM_GSYMCONTEXT_H #define LLVM_DEBUGINFO_GSYM_GSYMCONTEXT_H #include "llvm/DebugInfo/DIContext.h" #include #include namespace llvm { namespace gsym { class GsymReader; /// GSYM DI Context /// This data structure is the top level entity that deals with GSYM /// symbolication. /// This data structure exists only when there is a need for a transparent /// interface to different symbolication formats (e.g. GSYM, PDB and DWARF). /// More control and power over the debug information access can be had by using /// the GSYM interfaces directly. class GsymContext : public DIContext { public: GsymContext(std::unique_ptr Reader); ~GsymContext() override; GsymContext(GsymContext &) = delete; GsymContext &operator=(GsymContext &) = delete; static bool classof(const DIContext *DICtx) { return DICtx->getKind() == CK_GSYM; } void dump(raw_ostream &OS, DIDumpOptions DIDumpOpts) override; std::optional getLineInfoForAddress( object::SectionedAddress Address, DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override; std::optional getLineInfoForDataAddress(object::SectionedAddress Address) override; DILineInfoTable getLineInfoForAddressRange( object::SectionedAddress Address, uint64_t Size, DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override; DIInliningInfo getInliningInfoForAddress( object::SectionedAddress Address, DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override; std::vector getLocalsForAddress(object::SectionedAddress Address) override; private: const std::unique_ptr Reader; }; } // end namespace gsym } // end namespace llvm #endif // LLVM_DEBUGINFO_GSYM_GSYMCONTEXT_H