159d8dd79SMed Ismail Bennani //===-- ScriptedThread.h ----------------------------------------*- C++ -*-===// 259d8dd79SMed Ismail Bennani // 359d8dd79SMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 459d8dd79SMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information. 559d8dd79SMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 659d8dd79SMed Ismail Bennani // 759d8dd79SMed Ismail Bennani //===----------------------------------------------------------------------===// 859d8dd79SMed Ismail Bennani 959d8dd79SMed Ismail Bennani #ifndef LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H 1059d8dd79SMed Ismail Bennani #define LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H 1159d8dd79SMed Ismail Bennani 1259d8dd79SMed Ismail Bennani #include <string> 1359d8dd79SMed Ismail Bennani 1459d8dd79SMed Ismail Bennani #include "ScriptedProcess.h" 1559d8dd79SMed Ismail Bennani 1659d8dd79SMed Ismail Bennani #include "Plugins/Process/Utility/RegisterContextMemory.h" 1759d8dd79SMed Ismail Bennani #include "lldb/Interpreter/ScriptInterpreter.h" 1859d8dd79SMed Ismail Bennani #include "lldb/Target/DynamicRegisterInfo.h" 1959d8dd79SMed Ismail Bennani #include "lldb/Target/Thread.h" 2059d8dd79SMed Ismail Bennani 2159d8dd79SMed Ismail Bennani namespace lldb_private { 2259d8dd79SMed Ismail Bennani class ScriptedProcess; 2359d8dd79SMed Ismail Bennani } 2459d8dd79SMed Ismail Bennani 2559d8dd79SMed Ismail Bennani namespace lldb_private { 2659d8dd79SMed Ismail Bennani 2759d8dd79SMed Ismail Bennani class ScriptedThread : public lldb_private::Thread { 2845148bfeSMed Ismail Bennani 2959d8dd79SMed Ismail Bennani public: 3045148bfeSMed Ismail Bennani ScriptedThread(ScriptedProcess &process, 3145148bfeSMed Ismail Bennani lldb::ScriptedThreadInterfaceSP interface_sp, lldb::tid_t tid, 3245148bfeSMed Ismail Bennani StructuredData::GenericSP script_object_sp = nullptr); 3359d8dd79SMed Ismail Bennani 3459d8dd79SMed Ismail Bennani ~ScriptedThread() override; 3559d8dd79SMed Ismail Bennani 3645148bfeSMed Ismail Bennani static llvm::Expected<std::shared_ptr<ScriptedThread>> 3745148bfeSMed Ismail Bennani Create(ScriptedProcess &process, 3845148bfeSMed Ismail Bennani StructuredData::Generic *script_object = nullptr); 3945148bfeSMed Ismail Bennani 4059d8dd79SMed Ismail Bennani lldb::RegisterContextSP GetRegisterContext() override; 4159d8dd79SMed Ismail Bennani 4259d8dd79SMed Ismail Bennani lldb::RegisterContextSP 4359d8dd79SMed Ismail Bennani CreateRegisterContextForFrame(lldb_private::StackFrame *frame) override; 4459d8dd79SMed Ismail Bennani 4570665844SMed Ismail Bennani bool LoadArtificialStackFrames(); 4670665844SMed Ismail Bennani 4759d8dd79SMed Ismail Bennani bool CalculateStopInfo() override; 4859d8dd79SMed Ismail Bennani GetInfo()4959d8dd79SMed Ismail Bennani const char *GetInfo() override { return nullptr; } 5059d8dd79SMed Ismail Bennani 5159d8dd79SMed Ismail Bennani const char *GetName() override; 5259d8dd79SMed Ismail Bennani 5359d8dd79SMed Ismail Bennani const char *GetQueueName() override; 5459d8dd79SMed Ismail Bennani 5559d8dd79SMed Ismail Bennani void WillResume(lldb::StateType resume_state) override; 5659d8dd79SMed Ismail Bennani 5759d8dd79SMed Ismail Bennani void RefreshStateAfterStop() override; 5859d8dd79SMed Ismail Bennani 5959d8dd79SMed Ismail Bennani void ClearStackFrames() override; 6059d8dd79SMed Ismail Bennani 61*78d6e1d1SMed Ismail Bennani StructuredData::ObjectSP FetchThreadExtendedInfo() override; 62*78d6e1d1SMed Ismail Bennani 6359d8dd79SMed Ismail Bennani private: 6459d8dd79SMed Ismail Bennani void CheckInterpreterAndScriptObject() const; 6559d8dd79SMed Ismail Bennani lldb::ScriptedThreadInterfaceSP GetInterface() const; 6659d8dd79SMed Ismail Bennani 6759d8dd79SMed Ismail Bennani ScriptedThread(const ScriptedThread &) = delete; 6859d8dd79SMed Ismail Bennani const ScriptedThread &operator=(const ScriptedThread &) = delete; 6959d8dd79SMed Ismail Bennani 7059d8dd79SMed Ismail Bennani std::shared_ptr<DynamicRegisterInfo> GetDynamicRegisterInfo(); 7159d8dd79SMed Ismail Bennani 7259d8dd79SMed Ismail Bennani const ScriptedProcess &m_scripted_process; 731b86344fSMed Ismail Bennani lldb::ScriptedThreadInterfaceSP m_scripted_thread_interface_sp = nullptr; 7445148bfeSMed Ismail Bennani lldb_private::StructuredData::GenericSP m_script_object_sp = nullptr; 7559d8dd79SMed Ismail Bennani std::shared_ptr<DynamicRegisterInfo> m_register_info_sp = nullptr; 7659d8dd79SMed Ismail Bennani }; 7759d8dd79SMed Ismail Bennani 7859d8dd79SMed Ismail Bennani } // namespace lldb_private 7959d8dd79SMed Ismail Bennani 8059d8dd79SMed Ismail Bennani #endif // LLDB_SOURCE_PLUGINS_SCRIPTED_THREAD_H 81