xref: /llvm-project/lldb/source/Plugins/Process/scripted/ScriptedThread.h (revision 78d6e1d1d4b3b5c6bdd779256c915a8ac7148174)
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