1061da546Spatrick //===-- OperatingSystemPython.h ---------------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9061da546Spatrick #ifndef liblldb_OperatingSystemPython_h_ 10061da546Spatrick #define liblldb_OperatingSystemPython_h_ 11061da546Spatrick 12061da546Spatrick #include "lldb/Host/Config.h" 13061da546Spatrick 14061da546Spatrick #if LLDB_ENABLE_PYTHON 15061da546Spatrick 16*f6aab3d8Srobert #include "lldb/Target/DynamicRegisterInfo.h" 17061da546Spatrick #include "lldb/Target/OperatingSystem.h" 18061da546Spatrick #include "lldb/Utility/StructuredData.h" 19061da546Spatrick 20061da546Spatrick namespace lldb_private { 21061da546Spatrick class ScriptInterpreter; 22061da546Spatrick } 23061da546Spatrick 24061da546Spatrick class OperatingSystemPython : public lldb_private::OperatingSystem { 25061da546Spatrick public: 26061da546Spatrick OperatingSystemPython(lldb_private::Process *process, 27061da546Spatrick const lldb_private::FileSpec &python_module_path); 28061da546Spatrick 29061da546Spatrick ~OperatingSystemPython() override; 30061da546Spatrick 31061da546Spatrick // Static Functions 32061da546Spatrick static lldb_private::OperatingSystem * 33061da546Spatrick CreateInstance(lldb_private::Process *process, bool force); 34061da546Spatrick 35061da546Spatrick static void Initialize(); 36061da546Spatrick 37061da546Spatrick static void Terminate(); 38061da546Spatrick GetPluginNameStatic()39*f6aab3d8Srobert static llvm::StringRef GetPluginNameStatic() { return "python"; } 40061da546Spatrick 41*f6aab3d8Srobert static llvm::StringRef GetPluginDescriptionStatic(); 42061da546Spatrick 43061da546Spatrick // lldb_private::PluginInterface Methods GetPluginName()44*f6aab3d8Srobert llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 45061da546Spatrick 46061da546Spatrick // lldb_private::OperatingSystem Methods 47061da546Spatrick bool UpdateThreadList(lldb_private::ThreadList &old_thread_list, 48061da546Spatrick lldb_private::ThreadList &real_thread_list, 49061da546Spatrick lldb_private::ThreadList &new_thread_list) override; 50061da546Spatrick 51061da546Spatrick void ThreadWasSelected(lldb_private::Thread *thread) override; 52061da546Spatrick 53061da546Spatrick lldb::RegisterContextSP 54061da546Spatrick CreateRegisterContextForThread(lldb_private::Thread *thread, 55061da546Spatrick lldb::addr_t reg_data_addr) override; 56061da546Spatrick 57061da546Spatrick lldb::StopInfoSP 58061da546Spatrick CreateThreadStopReason(lldb_private::Thread *thread) override; 59061da546Spatrick 60061da546Spatrick // Method for lazy creation of threads on demand 61061da546Spatrick lldb::ThreadSP CreateThread(lldb::tid_t tid, lldb::addr_t context) override; 62061da546Spatrick 63061da546Spatrick protected: IsValid()64061da546Spatrick bool IsValid() const { 65061da546Spatrick return m_python_object_sp && m_python_object_sp->IsValid(); 66061da546Spatrick } 67061da546Spatrick 68061da546Spatrick lldb::ThreadSP CreateThreadFromThreadInfo( 69061da546Spatrick lldb_private::StructuredData::Dictionary &thread_dict, 70061da546Spatrick lldb_private::ThreadList &core_thread_list, 71061da546Spatrick lldb_private::ThreadList &old_thread_list, 72061da546Spatrick std::vector<bool> &core_used_map, bool *did_create_ptr); 73061da546Spatrick 74*f6aab3d8Srobert lldb_private::DynamicRegisterInfo *GetDynamicRegisterInfo(); 75061da546Spatrick 76061da546Spatrick lldb::ValueObjectSP m_thread_list_valobj_sp; 77*f6aab3d8Srobert std::unique_ptr<lldb_private::DynamicRegisterInfo> m_register_info_up; 78061da546Spatrick lldb_private::ScriptInterpreter *m_interpreter; 79061da546Spatrick lldb_private::StructuredData::ObjectSP m_python_object_sp; 80061da546Spatrick }; 81061da546Spatrick 82*f6aab3d8Srobert #endif // LLDB_ENABLE_PYTHON 83061da546Spatrick 84061da546Spatrick #endif // liblldb_OperatingSystemPython_h_ 85