blob: d5c46be97352e8ef4b2af9aaedbed97782a17579 [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
58 DynamicLoader *GetDynamicLoader() override;
59
60 ConstString GetPluginName() override;
61
62 uint32_t GetPluginVersion() override;
63
Zachary Turner97206d52017-05-12 04:51:55 +000064 Status DoDestroy() override;
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000065
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,
Zachary Turner97206d52017-05-12 04:51:55 +000073 Status &error) override;
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000074
75 size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,
Zachary Turner97206d52017-05-12 04:51:55 +000076 Status &error) override;
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000077
78 ArchSpec GetArchitecture();
79
Zachary Turner97206d52017-05-12 04:51:55 +000080 Status GetMemoryRegionInfo(lldb::addr_t load_addr,
81 MemoryRegionInfo &range_info) override;
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000082
Dimitar Vlahovski5a19c0c2016-11-01 15:48:24 +000083 bool GetProcessInfo(ProcessInstanceInfo &info) override;
84
Dimitar Vlahovski7b18dd42016-10-31 15:35:18 +000085 MinidumpParser m_minidump_parser;
86
87protected:
88 void Clear();
89
90 bool UpdateThreadList(ThreadList &old_thread_list,
91 ThreadList &new_thread_list) override;
92
93 void ReadModuleList();
94
95private:
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_