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/NetBSD/NativeProcessNetBSD.h
39654 views
1
//===-- NativeProcessNetBSD.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 liblldb_NativeProcessNetBSD_H_
10
#define liblldb_NativeProcessNetBSD_H_
11
12
#include "Plugins/Process/POSIX/NativeProcessELF.h"
13
#include "lldb/Target/MemoryRegionInfo.h"
14
#include "lldb/Utility/ArchSpec.h"
15
#include "lldb/Utility/FileSpec.h"
16
17
#include "NativeThreadNetBSD.h"
18
19
namespace lldb_private {
20
namespace process_netbsd {
21
/// \class NativeProcessNetBSD
22
/// Manages communication with the inferior (debugee) process.
23
///
24
/// Upon construction, this class prepares and launches an inferior process
25
/// for debugging.
26
///
27
/// Changes in the inferior process state are broadcasted.
28
class NativeProcessNetBSD : public NativeProcessELF {
29
public:
30
class Manager : public NativeProcessProtocol::Manager {
31
public:
32
using NativeProcessProtocol::Manager::Manager;
33
34
llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
35
Launch(ProcessLaunchInfo &launch_info,
36
NativeDelegate &native_delegate) override;
37
38
llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
39
Attach(lldb::pid_t pid, NativeDelegate &native_delegate) override;
40
41
Extension GetSupportedExtensions() const override;
42
};
43
44
// NativeProcessProtocol Interface
45
Status Resume(const ResumeActionList &resume_actions) override;
46
47
Status Halt() override;
48
49
Status Detach() override;
50
51
Status Signal(int signo) override;
52
53
Status Interrupt() override;
54
55
Status Kill() override;
56
57
Status GetMemoryRegionInfo(lldb::addr_t load_addr,
58
MemoryRegionInfo &range_info) override;
59
60
Status ReadMemory(lldb::addr_t addr, void *buf, size_t size,
61
size_t &bytes_read) override;
62
63
Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size,
64
size_t &bytes_written) override;
65
66
lldb::addr_t GetSharedLibraryInfoAddress() override;
67
68
size_t UpdateThreads() override;
69
70
const ArchSpec &GetArchitecture() const override { return m_arch; }
71
72
Status SetBreakpoint(lldb::addr_t addr, uint32_t size,
73
bool hardware) override;
74
75
// The two following methods are probably not necessary and probably
76
// will never be called. Nevertheless, we implement them right now
77
// to reduce the differences between different platforms and reduce
78
// the risk of the lack of implementation actually breaking something,
79
// at least for the time being.
80
Status GetLoadedModuleFileSpec(const char *module_path,
81
FileSpec &file_spec) override;
82
Status GetFileLoadAddress(const llvm::StringRef &file_name,
83
lldb::addr_t &load_addr) override;
84
85
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
86
GetAuxvData() const override;
87
88
// Interface used by NativeRegisterContext-derived classes.
89
static Status PtraceWrapper(int req, lldb::pid_t pid, void *addr = nullptr,
90
int data = 0, int *result = nullptr);
91
static Status StopProcess(lldb::pid_t pid);
92
93
llvm::Expected<std::string> SaveCore(llvm::StringRef path_hint) override;
94
95
private:
96
MainLoop::SignalHandleUP m_sigchld_handle;
97
ArchSpec m_arch;
98
MainLoop& m_main_loop;
99
LazyBool m_supports_mem_region = eLazyBoolCalculate;
100
std::vector<std::pair<MemoryRegionInfo, FileSpec>> m_mem_region_cache;
101
102
// Private Instance Methods
103
NativeProcessNetBSD(::pid_t pid, int terminal_fd, NativeDelegate &delegate,
104
const ArchSpec &arch, MainLoop &mainloop);
105
106
bool HasThreadNoLock(lldb::tid_t thread_id);
107
108
NativeThreadNetBSD &AddThread(lldb::tid_t thread_id);
109
void RemoveThread(lldb::tid_t thread_id);
110
111
void MonitorCallback(lldb::pid_t pid, int signal);
112
void MonitorExited(lldb::pid_t pid, WaitStatus status);
113
void MonitorSIGSTOP(lldb::pid_t pid);
114
void MonitorSIGTRAP(lldb::pid_t pid);
115
void MonitorSignal(lldb::pid_t pid, int signal);
116
void MonitorClone(::pid_t child_pid, bool is_vfork,
117
NativeThreadNetBSD &parent_thread);
118
119
Status PopulateMemoryRegionCache();
120
void SigchldHandler();
121
122
Status Attach();
123
Status SetupTrace();
124
Status ReinitializeThreads();
125
};
126
127
} // namespace process_netbsd
128
} // namespace lldb_private
129
130
#endif // #ifndef liblldb_NativeProcessNetBSD_H_
131
132