1 //===-- ScriptedThread.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 LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H
10 #define LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H
14 #include "ScriptedProcess.h"
16 #include "Plugins/Process/Utility/RegisterContextMemory.h"
17 #include "lldb/Interpreter/ScriptInterpreter.h"
18 #include "lldb/Target//DynamicRegisterInfo.h"
19 #include "lldb/Target/Thread.h"
21 namespace lldb_private
{
22 class ScriptedProcess
;
25 namespace lldb_private
{
27 class ScriptedThread
: public lldb_private::Thread
{
30 ScriptedThread(ScriptedProcess
&process
,
31 lldb::ScriptedThreadInterfaceSP interface_sp
, lldb::tid_t tid
,
32 StructuredData::GenericSP script_object_sp
= nullptr);
34 ~ScriptedThread() override
;
36 static llvm::Expected
<std::shared_ptr
<ScriptedThread
>>
37 Create(ScriptedProcess
&process
,
38 StructuredData::Generic
*script_object
= nullptr);
40 lldb::RegisterContextSP
GetRegisterContext() override
;
42 lldb::RegisterContextSP
43 CreateRegisterContextForFrame(lldb_private::StackFrame
*frame
) override
;
45 bool LoadArtificialStackFrames();
47 bool CalculateStopInfo() override
;
49 const char *GetInfo() override
{ return nullptr; }
51 const char *GetName() override
;
53 const char *GetQueueName() override
;
55 void WillResume(lldb::StateType resume_state
) override
;
57 void RefreshStateAfterStop() override
;
59 void ClearStackFrames() override
;
61 StructuredData::ObjectSP
FetchThreadExtendedInfo() override
;
64 void CheckInterpreterAndScriptObject() const;
65 lldb::ScriptedThreadInterfaceSP
GetInterface() const;
67 ScriptedThread(const ScriptedThread
&) = delete;
68 const ScriptedThread
&operator=(const ScriptedThread
&) = delete;
70 std::shared_ptr
<DynamicRegisterInfo
> GetDynamicRegisterInfo();
72 const ScriptedProcess
&m_scripted_process
;
73 lldb::ScriptedThreadInterfaceSP m_scripted_thread_interface_sp
= nullptr;
74 lldb_private::StructuredData::GenericSP m_script_object_sp
= nullptr;
75 std::shared_ptr
<DynamicRegisterInfo
> m_register_info_sp
= nullptr;
78 } // namespace lldb_private
80 #endif // LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H