10b57cec5SDimitry Andric //===-- OperatingSystemPython.h ---------------------------------*- C++ -*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 90b57cec5SDimitry Andric #ifndef liblldb_OperatingSystemPython_h_ 100b57cec5SDimitry Andric #define liblldb_OperatingSystemPython_h_ 110b57cec5SDimitry Andric 12480093f4SDimitry Andric #include "lldb/Host/Config.h" 13480093f4SDimitry Andric 14480093f4SDimitry Andric #if LLDB_ENABLE_PYTHON 150b57cec5SDimitry Andric 16349cc55cSDimitry Andric #include "lldb/Target/DynamicRegisterInfo.h" 170b57cec5SDimitry Andric #include "lldb/Target/OperatingSystem.h" 180b57cec5SDimitry Andric #include "lldb/Utility/StructuredData.h" 190b57cec5SDimitry Andric 200b57cec5SDimitry Andric namespace lldb_private { 210b57cec5SDimitry Andric class ScriptInterpreter; 220b57cec5SDimitry Andric } 230b57cec5SDimitry Andric 240b57cec5SDimitry Andric class OperatingSystemPython : public lldb_private::OperatingSystem { 250b57cec5SDimitry Andric public: 260b57cec5SDimitry Andric OperatingSystemPython(lldb_private::Process *process, 270b57cec5SDimitry Andric const lldb_private::FileSpec &python_module_path); 280b57cec5SDimitry Andric 290b57cec5SDimitry Andric ~OperatingSystemPython() override; 300b57cec5SDimitry Andric 310b57cec5SDimitry Andric // Static Functions 320b57cec5SDimitry Andric static lldb_private::OperatingSystem * 330b57cec5SDimitry Andric CreateInstance(lldb_private::Process *process, bool force); 340b57cec5SDimitry Andric 350b57cec5SDimitry Andric static void Initialize(); 360b57cec5SDimitry Andric 370b57cec5SDimitry Andric static void Terminate(); 380b57cec5SDimitry Andric GetPluginNameStatic()39349cc55cSDimitry Andric static llvm::StringRef GetPluginNameStatic() { return "python"; } 400b57cec5SDimitry Andric 41349cc55cSDimitry Andric static llvm::StringRef GetPluginDescriptionStatic(); 420b57cec5SDimitry Andric 430b57cec5SDimitry Andric // lldb_private::PluginInterface Methods GetPluginName()44349cc55cSDimitry Andric llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 450b57cec5SDimitry Andric 460b57cec5SDimitry Andric // lldb_private::OperatingSystem Methods 470b57cec5SDimitry Andric bool UpdateThreadList(lldb_private::ThreadList &old_thread_list, 480b57cec5SDimitry Andric lldb_private::ThreadList &real_thread_list, 490b57cec5SDimitry Andric lldb_private::ThreadList &new_thread_list) override; 500b57cec5SDimitry Andric 510b57cec5SDimitry Andric void ThreadWasSelected(lldb_private::Thread *thread) override; 520b57cec5SDimitry Andric 530b57cec5SDimitry Andric lldb::RegisterContextSP 540b57cec5SDimitry Andric CreateRegisterContextForThread(lldb_private::Thread *thread, 550b57cec5SDimitry Andric lldb::addr_t reg_data_addr) override; 560b57cec5SDimitry Andric 570b57cec5SDimitry Andric lldb::StopInfoSP 580b57cec5SDimitry Andric CreateThreadStopReason(lldb_private::Thread *thread) override; 590b57cec5SDimitry Andric 600b57cec5SDimitry Andric // Method for lazy creation of threads on demand 610b57cec5SDimitry Andric lldb::ThreadSP CreateThread(lldb::tid_t tid, lldb::addr_t context) override; 620b57cec5SDimitry Andric 630b57cec5SDimitry Andric protected: IsValid()640b57cec5SDimitry Andric bool IsValid() const { 655f757f3fSDimitry Andric return m_script_object_sp && m_script_object_sp->IsValid(); 660b57cec5SDimitry Andric } 670b57cec5SDimitry Andric 680b57cec5SDimitry Andric lldb::ThreadSP CreateThreadFromThreadInfo( 690b57cec5SDimitry Andric lldb_private::StructuredData::Dictionary &thread_dict, 700b57cec5SDimitry Andric lldb_private::ThreadList &core_thread_list, 710b57cec5SDimitry Andric lldb_private::ThreadList &old_thread_list, 720b57cec5SDimitry Andric std::vector<bool> &core_used_map, bool *did_create_ptr); 730b57cec5SDimitry Andric 74349cc55cSDimitry Andric lldb_private::DynamicRegisterInfo *GetDynamicRegisterInfo(); 750b57cec5SDimitry Andric 760b57cec5SDimitry Andric lldb::ValueObjectSP m_thread_list_valobj_sp; 77349cc55cSDimitry Andric std::unique_ptr<lldb_private::DynamicRegisterInfo> m_register_info_up; 785f757f3fSDimitry Andric lldb_private::ScriptInterpreter *m_interpreter = nullptr; 795f757f3fSDimitry Andric lldb::OperatingSystemInterfaceSP m_operating_system_interface_sp = nullptr; 805f757f3fSDimitry Andric lldb_private::StructuredData::GenericSP m_script_object_sp = nullptr; 810b57cec5SDimitry Andric }; 820b57cec5SDimitry Andric 83349cc55cSDimitry Andric #endif // LLDB_ENABLE_PYTHON 840b57cec5SDimitry Andric 850b57cec5SDimitry Andric #endif // liblldb_OperatingSystemPython_h_ 86