| //===-- ProcessMinidump.h ---------------------------------------*- C++ -*-===// | |
| // | |
| // 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 LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H | |
| #define LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H | |
| #include "MinidumpParser.h" | |
| #include "MinidumpTypes.h" | |
| #include "lldb/Target/PostMortemProcess.h" | |
| #include "lldb/Target/StopInfo.h" | |
| #include "lldb/Target/Target.h" | |
| #include "lldb/Utility/ConstString.h" | |
| #include "lldb/Utility/Status.h" | |
| #include "llvm/Support/Format.h" | |
| #include "llvm/Support/raw_ostream.h" | |
| #include <optional> | |
| namespace lldb_private { | |
| namespace minidump { | |
| class ProcessMinidump : public PostMortemProcess { | |
| public: | |
| static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp, | |
| lldb::ListenerSP listener_sp, | |
| const FileSpec *crash_file_path, | |
| bool can_connect); | |
| static void Initialize(); | |
| static void Terminate(); | |
| static llvm::StringRef GetPluginNameStatic() { return "minidump"; } | |
| static llvm::StringRef GetPluginDescriptionStatic(); | |
| ProcessMinidump(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, | |
| const FileSpec &core_file, lldb::DataBufferSP code_data); | |
| ~ProcessMinidump() override; | |
| bool CanDebug(lldb::TargetSP target_sp, | |
| bool plugin_specified_by_name) override; | |
| CommandObject *GetPluginCommandObject() override; | |
| Status DoLoadCore() override; | |
| DynamicLoader *GetDynamicLoader() override; | |
| // Returns AUXV structure found in the core file | |
| lldb_private::DataExtractor GetAuxvData() override; | |
| llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } | |
| Status DoDestroy() override; | |
| void RefreshStateAfterStop() override; | |
| bool IsAlive() override; | |
| bool WarnBeforeDetach() const override; | |
| size_t ReadMemory(const ProcessAddress &addr, void *buf, size_t size, | |
| Status &error) override; | |
| size_t DoReadMemory(const ProcessAddress &addr, void *buf, size_t size, | |
| Status &error) override; | |
| ArchSpec GetArchitecture(); | |
| Status | |
| GetMemoryRegions(lldb_private::MemoryRegionInfos ®ion_list) override; | |
| bool GetProcessInfo(ProcessInstanceInfo &info) override; | |
| Status WillResume() override { | |
| return Status::FromErrorStringWithFormatv( | |
| "error: {0} does not support resuming processes", GetPluginName()); | |
| } | |
| std::optional<MinidumpParser> m_minidump_parser; | |
| protected: | |
| void Clear(); | |
| bool DoUpdateThreadList(ThreadList &old_thread_list, | |
| ThreadList &new_thread_list) override; | |
| Status DoGetMemoryRegionInfo(lldb::addr_t load_addr, | |
| MemoryRegionInfo &range_info) override; | |
| void ReadModuleList(); | |
| lldb::ModuleSP GetOrCreateModule(lldb_private::UUID minidump_uuid, | |
| llvm::StringRef name, | |
| lldb_private::ModuleSpec module_spec); | |
| JITLoaderList &GetJITLoaders() override; | |
| private: | |
| lldb::DataBufferSP m_core_data; | |
| llvm::ArrayRef<minidump::Thread> m_thread_list; | |
| std::unordered_map<uint32_t, const minidump::ExceptionStream> | |
| m_exceptions_by_tid; | |
| lldb::CommandObjectSP m_command_sp; | |
| bool m_is_wow64; | |
| std::optional<MemoryRegionInfos> m_memory_regions; | |
| void BuildMemoryRegions(); | |
| bool IsLLDBMinidump(); | |
| }; | |
| } // namespace minidump | |
| } // namespace lldb_private | |
| #endif // LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H |