xref: /llvm-project/lldb/source/Plugins/Process/FreeBSD/NativeThreadFreeBSD.h (revision ea4cf923edf441897c31edd59a0d7bc8c6f380ff)
1bee4d6efSMichał Górny //===-- NativeThreadFreeBSD.h --------------------------------- -*- C++ -*-===//
2bee4d6efSMichał Górny //
3bee4d6efSMichał Górny // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4bee4d6efSMichał Górny // See https://llvm.org/LICENSE.txt for license information.
5bee4d6efSMichał Górny // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6bee4d6efSMichał Górny //
7bee4d6efSMichał Górny //===----------------------------------------------------------------------===//
8bee4d6efSMichał Górny 
9bee4d6efSMichał Górny #ifndef liblldb_NativeThreadFreeBSD_H_
10bee4d6efSMichał Górny #define liblldb_NativeThreadFreeBSD_H_
11bee4d6efSMichał Górny 
12bee4d6efSMichał Górny #include "lldb/Host/common/NativeThreadProtocol.h"
13bee4d6efSMichał Górny 
14bee4d6efSMichał Górny #include "Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD.h"
15bee4d6efSMichał Górny 
16bee4d6efSMichał Górny #include <csignal>
17bee4d6efSMichał Górny #include <map>
18bee4d6efSMichał Górny #include <string>
19bee4d6efSMichał Górny 
20bee4d6efSMichał Górny namespace lldb_private {
21bee4d6efSMichał Górny namespace process_freebsd {
22bee4d6efSMichał Górny 
23bee4d6efSMichał Górny class NativeProcessFreeBSD;
24bee4d6efSMichał Górny 
25bee4d6efSMichał Górny class NativeThreadFreeBSD : public NativeThreadProtocol {
26bee4d6efSMichał Górny   friend class NativeProcessFreeBSD;
27bee4d6efSMichał Górny 
28bee4d6efSMichał Górny public:
29bee4d6efSMichał Górny   NativeThreadFreeBSD(NativeProcessFreeBSD &process, lldb::tid_t tid);
30bee4d6efSMichał Górny 
31bee4d6efSMichał Górny   // NativeThreadProtocol Interface
32bee4d6efSMichał Górny   std::string GetName() override;
33bee4d6efSMichał Górny 
34bee4d6efSMichał Górny   lldb::StateType GetState() override;
35bee4d6efSMichał Górny 
36bee4d6efSMichał Górny   bool GetStopReason(ThreadStopInfo &stop_info,
37bee4d6efSMichał Górny                      std::string &description) override;
38bee4d6efSMichał Górny 
39bee4d6efSMichał Górny   NativeRegisterContextFreeBSD &GetRegisterContext() override;
40bee4d6efSMichał Górny 
41bee4d6efSMichał Górny   Status SetWatchpoint(lldb::addr_t addr, size_t size, uint32_t watch_flags,
42bee4d6efSMichał Górny                        bool hardware) override;
43bee4d6efSMichał Górny 
44bee4d6efSMichał Górny   Status RemoveWatchpoint(lldb::addr_t addr) override;
45bee4d6efSMichał Górny 
46bee4d6efSMichał Górny   Status SetHardwareBreakpoint(lldb::addr_t addr, size_t size) override;
47bee4d6efSMichał Górny 
48bee4d6efSMichał Górny   Status RemoveHardwareBreakpoint(lldb::addr_t addr) override;
49bee4d6efSMichał Górny 
50*ea4cf923SDavid Spickett   NativeProcessFreeBSD &GetProcess();
51*ea4cf923SDavid Spickett 
521e74e5e9SMichał Górny   llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
531e74e5e9SMichał Górny   GetSiginfo() const override;
541e74e5e9SMichał Górny 
55bee4d6efSMichał Górny private:
56bee4d6efSMichał Górny   // Interface for friend classes
57bee4d6efSMichał Górny 
58bee4d6efSMichał Górny   Status Resume();
59bee4d6efSMichał Górny   Status SingleStep();
60bee4d6efSMichał Górny   Status Suspend();
61bee4d6efSMichał Górny 
62bee4d6efSMichał Górny   void SetStoppedBySignal(uint32_t signo, const siginfo_t *info = nullptr);
63bee4d6efSMichał Górny   void SetStoppedByBreakpoint();
64bee4d6efSMichał Górny   void SetStoppedByTrace();
65bee4d6efSMichał Górny   void SetStoppedByExec();
66bee4d6efSMichał Górny   void SetStoppedByWatchpoint(uint32_t wp_index);
6765f2a757SMichał Górny   void SetStoppedByFork(lldb::pid_t child_pid, lldb::tid_t child_tid);
6865f2a757SMichał Górny   void SetStoppedByVFork(lldb::pid_t child_pid, lldb::tid_t child_tid);
6965f2a757SMichał Górny   void SetStoppedByVForkDone();
70bee4d6efSMichał Górny   void SetStoppedWithNoReason();
71bee4d6efSMichał Górny   void SetStopped();
72bee4d6efSMichał Górny   void SetRunning();
73bee4d6efSMichał Górny   void SetStepping();
74bee4d6efSMichał Górny 
75bee4d6efSMichał Górny   llvm::Error CopyWatchpointsFrom(NativeThreadFreeBSD &source);
76bee4d6efSMichał Górny 
77bee4d6efSMichał Górny   // Member Variables
78bee4d6efSMichał Górny   lldb::StateType m_state;
79bee4d6efSMichał Górny   ThreadStopInfo m_stop_info;
80bee4d6efSMichał Górny   std::unique_ptr<NativeRegisterContextFreeBSD> m_reg_context_up;
81bee4d6efSMichał Górny   std::string m_stop_description;
82bee4d6efSMichał Górny   using WatchpointIndexMap = std::map<lldb::addr_t, uint32_t>;
83bee4d6efSMichał Górny   WatchpointIndexMap m_watchpoint_index_map;
84bee4d6efSMichał Górny   WatchpointIndexMap m_hw_break_index_map;
85bee4d6efSMichał Górny };
86bee4d6efSMichał Górny 
87bee4d6efSMichał Górny typedef std::shared_ptr<NativeThreadFreeBSD> NativeThreadFreeBSDSP;
88bee4d6efSMichał Górny } // namespace process_freebsd
89bee4d6efSMichał Górny } // namespace lldb_private
90bee4d6efSMichał Górny 
91bee4d6efSMichał Górny #endif // #ifndef liblldb_NativeThreadFreeBSD_H_
92