diff options
Diffstat (limited to 'contrib/llvm-project/lldb/source/Plugins/Process/minidump/ProcessMinidump.h')
-rw-r--r-- | contrib/llvm-project/lldb/source/Plugins/Process/minidump/ProcessMinidump.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/contrib/llvm-project/lldb/source/Plugins/Process/minidump/ProcessMinidump.h b/contrib/llvm-project/lldb/source/Plugins/Process/minidump/ProcessMinidump.h new file mode 100644 index 000000000000..3f3123a0a8b5 --- /dev/null +++ b/contrib/llvm-project/lldb/source/Plugins/Process/minidump/ProcessMinidump.h @@ -0,0 +1,123 @@ +//===-- 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 { return nullptr; } + + llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } + + SystemRuntime *GetSystemRuntime() override { return nullptr; } + + Status DoDestroy() override; + + void RefreshStateAfterStop() override; + + bool IsAlive() override; + + bool WarnBeforeDetach() const override; + + size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size, + Status &error) override; + + size_t DoReadMemory(lldb::addr_t 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 { + Status error; + error.SetErrorStringWithFormatv( + "error: {0} does not support resuming processes", GetPluginName()); + return error; + } + + 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; + const minidump::ExceptionStream *m_active_exception; + lldb::CommandObjectSP m_command_sp; + bool m_is_wow64; + std::optional<MemoryRegionInfos> m_memory_regions; + + void BuildMemoryRegions(); +}; + +} // namespace minidump +} // namespace lldb_private + +#endif // LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H |