1 //===-- NativeProcessNetBSD.h --------------------------------- -*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef liblldb_NativeProcessNetBSD_H_
10 #define liblldb_NativeProcessNetBSD_H_
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"
17 #include "NativeThreadNetBSD.h"
19 namespace lldb_private {
20 namespace process_netbsd {
21 /// \class NativeProcessNetBSD
22 /// Manages communication with the inferior (debugee) process.
24 /// Upon construction, this class prepares and launches an inferior process
27 /// Changes in the inferior process state are broadcasted.
28 class NativeProcessNetBSD : public NativeProcessELF {
30 class Factory : public NativeProcessProtocol::Factory {
32 llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
33 Launch(ProcessLaunchInfo &launch_info, NativeDelegate &native_delegate,
34 MainLoop &mainloop) const override;
36 llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
37 Attach(lldb::pid_t pid, NativeDelegate &native_delegate,
38 MainLoop &mainloop) const override;
41 // NativeProcessProtocol Interface
42 Status Resume(const ResumeActionList &resume_actions) override;
44 Status Halt() override;
46 Status Detach() override;
48 Status Signal(int signo) override;
50 Status Interrupt() override;
52 Status Kill() override;
54 Status GetMemoryRegionInfo(lldb::addr_t load_addr,
55 MemoryRegionInfo &range_info) override;
57 Status ReadMemory(lldb::addr_t addr, void *buf, size_t size,
58 size_t &bytes_read) override;
60 Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size,
61 size_t &bytes_written) override;
63 Status AllocateMemory(size_t size, uint32_t permissions,
64 lldb::addr_t &addr) override;
66 Status DeallocateMemory(lldb::addr_t addr) override;
68 lldb::addr_t GetSharedLibraryInfoAddress() override;
70 size_t UpdateThreads() override;
72 const ArchSpec &GetArchitecture() const override { return m_arch; }
74 Status SetBreakpoint(lldb::addr_t addr, uint32_t size,
75 bool hardware) override;
77 Status GetLoadedModuleFileSpec(const char *module_path,
78 FileSpec &file_spec) override;
80 Status GetFileLoadAddress(const llvm::StringRef &file_name,
81 lldb::addr_t &load_addr) override;
83 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
84 GetAuxvData() const override;
86 // Interface used by NativeRegisterContext-derived classes.
87 static Status PtraceWrapper(int req, lldb::pid_t pid, void *addr = nullptr,
88 int data = 0, int *result = nullptr);
91 MainLoop::SignalHandleUP m_sigchld_handle;
93 LazyBool m_supports_mem_region = eLazyBoolCalculate;
94 std::vector<std::pair<MemoryRegionInfo, FileSpec>> m_mem_region_cache;
96 // Private Instance Methods
97 NativeProcessNetBSD(::pid_t pid, int terminal_fd, NativeDelegate &delegate,
98 const ArchSpec &arch, MainLoop &mainloop);
100 bool HasThreadNoLock(lldb::tid_t thread_id);
102 NativeThreadNetBSD &AddThread(lldb::tid_t thread_id);
103 void RemoveThread(lldb::tid_t thread_id);
105 void MonitorCallback(lldb::pid_t pid, int signal);
106 void MonitorExited(lldb::pid_t pid, WaitStatus status);
107 void MonitorSIGSTOP(lldb::pid_t pid);
108 void MonitorSIGTRAP(lldb::pid_t pid);
109 void MonitorSignal(lldb::pid_t pid, int signal);
111 Status PopulateMemoryRegionCache();
112 void SigchldHandler();
115 Status ReinitializeThreads();
118 } // namespace process_netbsd
119 } // namespace lldb_private
121 #endif // #ifndef liblldb_NativeProcessNetBSD_H_