1 //===-- ProcessMinidump.h ---------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_ProcessMinidump_h_ 11 #define liblldb_ProcessMinidump_h_ 12 13 // Project includes 14 #include "MinidumpParser.h" 15 #include "MinidumpTypes.h" 16 17 // Other libraries and framework includes 18 #include "lldb/Core/ConstString.h" 19 #include "lldb/Core/Error.h" 20 #include "lldb/Target/Process.h" 21 #include "lldb/Target/StopInfo.h" 22 #include "lldb/Target/Target.h" 23 24 #include "llvm/Support/Format.h" 25 #include "llvm/Support/raw_ostream.h" 26 27 // C Includes 28 // C++ Includes 29 30 namespace lldb_private { 31 32 namespace minidump { 33 34 class ProcessMinidump : public Process { 35 public: 36 static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp, 37 lldb::ListenerSP listener_sp, 38 const FileSpec *crash_file_path); 39 40 static void Initialize(); 41 42 static void Terminate(); 43 44 static ConstString GetPluginNameStatic(); 45 46 static const char *GetPluginDescriptionStatic(); 47 48 ProcessMinidump(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, 49 const FileSpec &core_file, MinidumpParser minidump_parser); 50 51 ~ProcessMinidump() override; 52 53 bool CanDebug(lldb::TargetSP target_sp, 54 bool plugin_specified_by_name) override; 55 56 Error DoLoadCore() override; 57 58 DynamicLoader *GetDynamicLoader() override; 59 60 ConstString GetPluginName() override; 61 62 uint32_t GetPluginVersion() override; 63 64 Error DoDestroy() override; 65 66 void RefreshStateAfterStop() override; 67 68 bool IsAlive() override; 69 70 bool WarnBeforeDetach() const override; 71 72 size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size, 73 Error &error) override; 74 75 size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, 76 Error &error) override; 77 78 ArchSpec GetArchitecture(); 79 80 Error GetMemoryRegionInfo(lldb::addr_t load_addr, 81 MemoryRegionInfo &range_info) override; 82 83 bool GetProcessInfo(ProcessInstanceInfo &info) override; 84 85 MinidumpParser m_minidump_parser; 86 87 protected: 88 void Clear(); 89 90 bool UpdateThreadList(ThreadList &old_thread_list, 91 ThreadList &new_thread_list) override; 92 93 void ReadModuleList(); 94 95 private: 96 FileSpec m_core_file; 97 llvm::ArrayRef<MinidumpThread> m_thread_list; 98 const MinidumpExceptionStream *m_active_exception; 99 bool m_is_wow64; 100 }; 101 102 } // namespace minidump 103 } // namespace lldb_private 104 105 #endif // liblldb_ProcessMinidump_h_ 106