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/Target/Process.h" 19 #include "lldb/Target/StopInfo.h" 20 #include "lldb/Target/Target.h" 21 #include "lldb/Utility/ConstString.h" 22 #include "lldb/Utility/Status.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 Status DoLoadCore() override; 57 58 DynamicLoader *GetDynamicLoader() override { return nullptr; } 59 60 ConstString GetPluginName() override; 61 62 uint32_t GetPluginVersion() override; 63 64 SystemRuntime *GetSystemRuntime() override { return nullptr; } 65 66 Status DoDestroy() override; 67 68 void RefreshStateAfterStop() override; 69 70 bool IsAlive() override; 71 72 bool WarnBeforeDetach() const override; 73 74 size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size, 75 Status &error) override; 76 77 size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, 78 Status &error) override; 79 80 ArchSpec GetArchitecture(); 81 82 Status GetMemoryRegionInfo(lldb::addr_t load_addr, 83 MemoryRegionInfo &range_info) override; 84 85 bool GetProcessInfo(ProcessInstanceInfo &info) override; 86 87 Status WillResume() override { 88 Status error; 89 error.SetErrorStringWithFormat( 90 "error: %s does not support resuming processes", 91 GetPluginName().GetCString()); 92 return error; 93 } 94 95 MinidumpParser m_minidump_parser; 96 97 protected: 98 void Clear(); 99 100 bool UpdateThreadList(ThreadList &old_thread_list, 101 ThreadList &new_thread_list) override; 102 103 void ReadModuleList(); 104 105 JITLoaderList &GetJITLoaders() override; 106 107 private: 108 FileSpec m_core_file; 109 llvm::ArrayRef<MinidumpThread> m_thread_list; 110 const MinidumpExceptionStream *m_active_exception; 111 bool m_is_wow64; 112 }; 113 114 } // namespace minidump 115 } // namespace lldb_private 116 117 #endif // liblldb_ProcessMinidump_h_ 118