Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Process/minidump/ProcessMinidump.h
39645 views
//===-- ProcessMinidump.h ---------------------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H9#define LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H1011#include "MinidumpParser.h"12#include "MinidumpTypes.h"1314#include "lldb/Target/PostMortemProcess.h"15#include "lldb/Target/StopInfo.h"16#include "lldb/Target/Target.h"17#include "lldb/Utility/ConstString.h"18#include "lldb/Utility/Status.h"1920#include "llvm/Support/Format.h"21#include "llvm/Support/raw_ostream.h"22#include <optional>2324namespace lldb_private {2526namespace minidump {2728class ProcessMinidump : public PostMortemProcess {29public:30static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp,31lldb::ListenerSP listener_sp,32const FileSpec *crash_file_path,33bool can_connect);3435static void Initialize();3637static void Terminate();3839static llvm::StringRef GetPluginNameStatic() { return "minidump"; }4041static llvm::StringRef GetPluginDescriptionStatic();4243ProcessMinidump(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp,44const FileSpec &core_file, lldb::DataBufferSP code_data);4546~ProcessMinidump() override;4748bool CanDebug(lldb::TargetSP target_sp,49bool plugin_specified_by_name) override;5051CommandObject *GetPluginCommandObject() override;5253Status DoLoadCore() override;5455DynamicLoader *GetDynamicLoader() override { return nullptr; }5657llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }5859SystemRuntime *GetSystemRuntime() override { return nullptr; }6061Status DoDestroy() override;6263void RefreshStateAfterStop() override;6465bool IsAlive() override;6667bool WarnBeforeDetach() const override;6869size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size,70Status &error) override;7172size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,73Status &error) override;7475ArchSpec GetArchitecture();7677Status GetMemoryRegions(78lldb_private::MemoryRegionInfos ®ion_list) override;7980bool GetProcessInfo(ProcessInstanceInfo &info) override;8182Status WillResume() override {83Status error;84error.SetErrorStringWithFormatv(85"error: {0} does not support resuming processes", GetPluginName());86return error;87}8889std::optional<MinidumpParser> m_minidump_parser;9091protected:92void Clear();9394bool DoUpdateThreadList(ThreadList &old_thread_list,95ThreadList &new_thread_list) override;9697Status DoGetMemoryRegionInfo(lldb::addr_t load_addr,98MemoryRegionInfo &range_info) override;99100void ReadModuleList();101102lldb::ModuleSP GetOrCreateModule(lldb_private::UUID minidump_uuid,103llvm::StringRef name,104lldb_private::ModuleSpec module_spec);105106JITLoaderList &GetJITLoaders() override;107108private:109lldb::DataBufferSP m_core_data;110llvm::ArrayRef<minidump::Thread> m_thread_list;111const minidump::ExceptionStream *m_active_exception;112lldb::CommandObjectSP m_command_sp;113bool m_is_wow64;114std::optional<MemoryRegionInfos> m_memory_regions;115116void BuildMemoryRegions();117};118119} // namespace minidump120} // namespace lldb_private121122#endif // LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H123124125