xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Process/OpenBSD/NativeThreadOpenBSD.h (revision a119297bd5e44b38d77070a02315a6e337fde1cb)
1061da546Spatrick //===-- NativeThreadOpenBSD.h ---------------------------------- -*- C++ -*-===//
2061da546Spatrick //
3061da546Spatrick //                     The LLVM Compiler Infrastructure
4061da546Spatrick //
5061da546Spatrick // This file is distributed under the University of Illinois Open Source
6061da546Spatrick // License. See LICENSE.TXT for details.
7061da546Spatrick //
8061da546Spatrick //===----------------------------------------------------------------------===//
9061da546Spatrick 
10061da546Spatrick #ifndef liblldb_NativeThreadOpenBSD_H_
11061da546Spatrick #define liblldb_NativeThreadOpenBSD_H_
12061da546Spatrick 
13061da546Spatrick #include "lldb/Host/common/NativeThreadProtocol.h"
14061da546Spatrick 
15061da546Spatrick #include <csignal>
16061da546Spatrick #include <map>
17061da546Spatrick #include <string>
18061da546Spatrick 
19061da546Spatrick namespace lldb_private {
20061da546Spatrick namespace process_openbsd {
21061da546Spatrick 
22061da546Spatrick class NativeProcessOpenBSD;
23061da546Spatrick 
24061da546Spatrick class NativeThreadOpenBSD : public NativeThreadProtocol {
25061da546Spatrick   friend class NativeProcessOpenBSD;
26061da546Spatrick 
27061da546Spatrick public:
28061da546Spatrick   NativeThreadOpenBSD(NativeProcessOpenBSD &process, lldb::tid_t tid);
29061da546Spatrick 
30061da546Spatrick   // ---------------------------------------------------------------------
31061da546Spatrick   // NativeThreadProtocol Interface
32061da546Spatrick   // ---------------------------------------------------------------------
33061da546Spatrick   std::string GetName() override;
34061da546Spatrick 
35061da546Spatrick   lldb::StateType GetState() override;
36061da546Spatrick 
37061da546Spatrick   bool GetStopReason(ThreadStopInfo &stop_info,
38061da546Spatrick                      std::string &description) override;
39061da546Spatrick 
40061da546Spatrick   NativeRegisterContext& GetRegisterContext() override;
41061da546Spatrick 
42*a119297bSmortimer   // OpenBSD does not expose hardware debug registers to userland
43*a119297bSmortimer   // so these functions will just return a Status error.
44*a119297bSmortimer   Status SetHardwareBreakpoint(lldb::addr_t addr, size_t size) override;
45*a119297bSmortimer   Status RemoveHardwareBreakpoint(lldb::addr_t addr) override;
46*a119297bSmortimer 
47*a119297bSmortimer   // Similarly, until software watchpoints are implemented in lldb,
48*a119297bSmortimer   // these functions will just return a Status error.
49061da546Spatrick   Status SetWatchpoint(lldb::addr_t addr, size_t size, uint32_t watch_flags,
50061da546Spatrick                        bool hardware) override;
51061da546Spatrick   Status RemoveWatchpoint(lldb::addr_t addr) override;
52061da546Spatrick 
53061da546Spatrick private:
54061da546Spatrick   // ---------------------------------------------------------------------
55061da546Spatrick   // Interface for friend classes
56061da546Spatrick   // ---------------------------------------------------------------------
57061da546Spatrick 
58061da546Spatrick   void SetStoppedBySignal(uint32_t signo, const siginfo_t *info = nullptr);
59061da546Spatrick   void SetStoppedByBreakpoint();
60061da546Spatrick   void SetStoppedByTrace();
61061da546Spatrick   void SetStoppedByExec();
62061da546Spatrick   void SetStopped();
63061da546Spatrick   void SetRunning();
64061da546Spatrick   void SetStepping();
65061da546Spatrick 
66061da546Spatrick   // ---------------------------------------------------------------------
67061da546Spatrick   // Member Variables
68061da546Spatrick   // ---------------------------------------------------------------------
69061da546Spatrick   lldb::StateType m_state;
70061da546Spatrick   ThreadStopInfo m_stop_info;
71061da546Spatrick   std::unique_ptr<NativeRegisterContext> m_reg_context_up;
72061da546Spatrick   std::string m_stop_description;
73061da546Spatrick };
74061da546Spatrick 
75061da546Spatrick typedef std::shared_ptr<NativeThreadOpenBSD> NativeThreadOpenBSDSP;
76061da546Spatrick } // namespace process_openbsd
77061da546Spatrick } // namespace lldb_private
78061da546Spatrick 
79061da546Spatrick #endif // #ifndef liblldb_NativeThreadOpenBSD_H_
80