Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Process/minidump/ProcessMinidump.h
39645 views
1
//===-- ProcessMinidump.h ---------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H
10
#define LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H
11
12
#include "MinidumpParser.h"
13
#include "MinidumpTypes.h"
14
15
#include "lldb/Target/PostMortemProcess.h"
16
#include "lldb/Target/StopInfo.h"
17
#include "lldb/Target/Target.h"
18
#include "lldb/Utility/ConstString.h"
19
#include "lldb/Utility/Status.h"
20
21
#include "llvm/Support/Format.h"
22
#include "llvm/Support/raw_ostream.h"
23
#include <optional>
24
25
namespace lldb_private {
26
27
namespace minidump {
28
29
class ProcessMinidump : public PostMortemProcess {
30
public:
31
static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp,
32
lldb::ListenerSP listener_sp,
33
const FileSpec *crash_file_path,
34
bool can_connect);
35
36
static void Initialize();
37
38
static void Terminate();
39
40
static llvm::StringRef GetPluginNameStatic() { return "minidump"; }
41
42
static llvm::StringRef GetPluginDescriptionStatic();
43
44
ProcessMinidump(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp,
45
const FileSpec &core_file, lldb::DataBufferSP code_data);
46
47
~ProcessMinidump() override;
48
49
bool CanDebug(lldb::TargetSP target_sp,
50
bool plugin_specified_by_name) override;
51
52
CommandObject *GetPluginCommandObject() override;
53
54
Status DoLoadCore() override;
55
56
DynamicLoader *GetDynamicLoader() override { return nullptr; }
57
58
llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
59
60
SystemRuntime *GetSystemRuntime() override { return nullptr; }
61
62
Status DoDestroy() override;
63
64
void RefreshStateAfterStop() override;
65
66
bool IsAlive() override;
67
68
bool WarnBeforeDetach() const override;
69
70
size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size,
71
Status &error) override;
72
73
size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,
74
Status &error) override;
75
76
ArchSpec GetArchitecture();
77
78
Status GetMemoryRegions(
79
lldb_private::MemoryRegionInfos &region_list) override;
80
81
bool GetProcessInfo(ProcessInstanceInfo &info) override;
82
83
Status WillResume() override {
84
Status error;
85
error.SetErrorStringWithFormatv(
86
"error: {0} does not support resuming processes", GetPluginName());
87
return error;
88
}
89
90
std::optional<MinidumpParser> m_minidump_parser;
91
92
protected:
93
void Clear();
94
95
bool DoUpdateThreadList(ThreadList &old_thread_list,
96
ThreadList &new_thread_list) override;
97
98
Status DoGetMemoryRegionInfo(lldb::addr_t load_addr,
99
MemoryRegionInfo &range_info) override;
100
101
void ReadModuleList();
102
103
lldb::ModuleSP GetOrCreateModule(lldb_private::UUID minidump_uuid,
104
llvm::StringRef name,
105
lldb_private::ModuleSpec module_spec);
106
107
JITLoaderList &GetJITLoaders() override;
108
109
private:
110
lldb::DataBufferSP m_core_data;
111
llvm::ArrayRef<minidump::Thread> m_thread_list;
112
const minidump::ExceptionStream *m_active_exception;
113
lldb::CommandObjectSP m_command_sp;
114
bool m_is_wow64;
115
std::optional<MemoryRegionInfos> m_memory_regions;
116
117
void BuildMemoryRegions();
118
};
119
120
} // namespace minidump
121
} // namespace lldb_private
122
123
#endif // LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H
124
125