blob: b9e8d0ffbcff07f31d9ba4566646fc27c4a1de6b [file] [log] [blame]
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +00001//===-- 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
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000018#include "lldb/Target/Process.h"
19#include "lldb/Target/StopInfo.h"
20#include "lldb/Target/Target.h"
Zachary Turnerbf9a7732017-02-02 21:39:50 +000021#include "lldb/Utility/ConstString.h"
Zachary Turner97206d52017-05-12 04:51:55 +000022#include "lldb/Utility/Status.h"
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000023
24#include "llvm/Support/Format.h"
25#include "llvm/Support/raw_ostream.h"
26
27// C Includes
28// C++ Includes
29
30namespace lldb_private {
31
32namespace minidump {
33
34class ProcessMinidump : public Process {
35public:
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,
Dimitar Vlahovski5a19c0c2016-11-01 15:48:24 +000049 const FileSpec &core_file, MinidumpParser minidump_parser);
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000050
51 ~ProcessMinidump() override;
52
53 bool CanDebug(lldb::TargetSP target_sp,
54 bool plugin_specified_by_name) override;
55
Zachary Turner97206d52017-05-12 04:51:55 +000056 Status DoLoadCore() override;
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000057
Leonard Mosescu40b832e2018-08-23 21:34:33 +000058 DynamicLoader *GetDynamicLoader() override { return nullptr; }
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000059
60 ConstString GetPluginName() override;
61
62 uint32_t GetPluginVersion() override;
63
Leonard Mosescu47196a22018-04-18 23:10:46 +000064 SystemRuntime *GetSystemRuntime() override { return nullptr; }
65
Zachary Turner97206d52017-05-12 04:51:55 +000066 Status DoDestroy() override;
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000067
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,
Zachary Turner97206d52017-05-12 04:51:55 +000075 Status &error) override;
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000076
77 size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,
Zachary Turner97206d52017-05-12 04:51:55 +000078 Status &error) override;
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000079
80 ArchSpec GetArchitecture();
81
Zachary Turner97206d52017-05-12 04:51:55 +000082 Status GetMemoryRegionInfo(lldb::addr_t load_addr,
83 MemoryRegionInfo &range_info) override;
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000084
Dimitar Vlahovski5a19c0c2016-11-01 15:48:24 +000085 bool GetProcessInfo(ProcessInstanceInfo &info) override;
86
Adrian McCarthy3887ba82017-09-19 18:07:33 +000087 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
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000095 MinidumpParser m_minidump_parser;
96
97protected:
98 void Clear();
99
100 bool UpdateThreadList(ThreadList &old_thread_list,
101 ThreadList &new_thread_list) override;
102
103 void ReadModuleList();
104
Leonard Mosescu40b832e2018-08-23 21:34:33 +0000105 JITLoaderList &GetJITLoaders() override;
106
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +0000107private:
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_