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