xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Process/scripted/ScriptedThread.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1*f6aab3d8Srobert //===-- ScriptedThread.h ----------------------------------------*- C++ -*-===//
2*f6aab3d8Srobert //
3*f6aab3d8Srobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*f6aab3d8Srobert // See https://llvm.org/LICENSE.txt for license information.
5*f6aab3d8Srobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*f6aab3d8Srobert //
7*f6aab3d8Srobert //===----------------------------------------------------------------------===//
8*f6aab3d8Srobert 
9*f6aab3d8Srobert #ifndef LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H
10*f6aab3d8Srobert #define LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H
11*f6aab3d8Srobert 
12*f6aab3d8Srobert #include <string>
13*f6aab3d8Srobert 
14*f6aab3d8Srobert #include "ScriptedProcess.h"
15*f6aab3d8Srobert 
16*f6aab3d8Srobert #include "Plugins/Process/Utility/RegisterContextMemory.h"
17*f6aab3d8Srobert #include "lldb/Interpreter/ScriptInterpreter.h"
18*f6aab3d8Srobert #include "lldb/Target/DynamicRegisterInfo.h"
19*f6aab3d8Srobert #include "lldb/Target/Thread.h"
20*f6aab3d8Srobert 
21*f6aab3d8Srobert namespace lldb_private {
22*f6aab3d8Srobert class ScriptedProcess;
23*f6aab3d8Srobert }
24*f6aab3d8Srobert 
25*f6aab3d8Srobert namespace lldb_private {
26*f6aab3d8Srobert 
27*f6aab3d8Srobert class ScriptedThread : public lldb_private::Thread {
28*f6aab3d8Srobert 
29*f6aab3d8Srobert public:
30*f6aab3d8Srobert   ScriptedThread(ScriptedProcess &process,
31*f6aab3d8Srobert                  lldb::ScriptedThreadInterfaceSP interface_sp, lldb::tid_t tid,
32*f6aab3d8Srobert                  StructuredData::GenericSP script_object_sp = nullptr);
33*f6aab3d8Srobert 
34*f6aab3d8Srobert   ~ScriptedThread() override;
35*f6aab3d8Srobert 
36*f6aab3d8Srobert   static llvm::Expected<std::shared_ptr<ScriptedThread>>
37*f6aab3d8Srobert   Create(ScriptedProcess &process,
38*f6aab3d8Srobert          StructuredData::Generic *script_object = nullptr);
39*f6aab3d8Srobert 
40*f6aab3d8Srobert   lldb::RegisterContextSP GetRegisterContext() override;
41*f6aab3d8Srobert 
42*f6aab3d8Srobert   lldb::RegisterContextSP
43*f6aab3d8Srobert   CreateRegisterContextForFrame(lldb_private::StackFrame *frame) override;
44*f6aab3d8Srobert 
45*f6aab3d8Srobert   bool LoadArtificialStackFrames();
46*f6aab3d8Srobert 
47*f6aab3d8Srobert   bool CalculateStopInfo() override;
48*f6aab3d8Srobert 
GetInfo()49*f6aab3d8Srobert   const char *GetInfo() override { return nullptr; }
50*f6aab3d8Srobert 
51*f6aab3d8Srobert   const char *GetName() override;
52*f6aab3d8Srobert 
53*f6aab3d8Srobert   const char *GetQueueName() override;
54*f6aab3d8Srobert 
55*f6aab3d8Srobert   void WillResume(lldb::StateType resume_state) override;
56*f6aab3d8Srobert 
57*f6aab3d8Srobert   void RefreshStateAfterStop() override;
58*f6aab3d8Srobert 
59*f6aab3d8Srobert   void ClearStackFrames() override;
60*f6aab3d8Srobert 
61*f6aab3d8Srobert   StructuredData::ObjectSP FetchThreadExtendedInfo() override;
62*f6aab3d8Srobert 
63*f6aab3d8Srobert private:
64*f6aab3d8Srobert   void CheckInterpreterAndScriptObject() const;
65*f6aab3d8Srobert   lldb::ScriptedThreadInterfaceSP GetInterface() const;
66*f6aab3d8Srobert 
67*f6aab3d8Srobert   ScriptedThread(const ScriptedThread &) = delete;
68*f6aab3d8Srobert   const ScriptedThread &operator=(const ScriptedThread &) = delete;
69*f6aab3d8Srobert 
70*f6aab3d8Srobert   std::shared_ptr<DynamicRegisterInfo> GetDynamicRegisterInfo();
71*f6aab3d8Srobert 
72*f6aab3d8Srobert   const ScriptedProcess &m_scripted_process;
73*f6aab3d8Srobert   lldb::ScriptedThreadInterfaceSP m_scripted_thread_interface_sp = nullptr;
74*f6aab3d8Srobert   lldb_private::StructuredData::GenericSP m_script_object_sp = nullptr;
75*f6aab3d8Srobert   std::shared_ptr<DynamicRegisterInfo> m_register_info_sp = nullptr;
76*f6aab3d8Srobert };
77*f6aab3d8Srobert 
78*f6aab3d8Srobert } // namespace lldb_private
79*f6aab3d8Srobert 
80*f6aab3d8Srobert #endif // LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H
81