1ab7f6d04SEugene Zelenko //===-- OperatingSystemPython.h ---------------------------------*- C++ -*-===// 2b3e77600SGreg Clayton // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6b3e77600SGreg Clayton // 7b3e77600SGreg Clayton //===----------------------------------------------------------------------===// 8b3e77600SGreg Clayton 9b3e77600SGreg Clayton #ifndef liblldb_OperatingSystemPython_h_ 10b3e77600SGreg Clayton #define liblldb_OperatingSystemPython_h_ 11b3e77600SGreg Clayton 12ab7f6d04SEugene Zelenko #ifndef LLDB_DISABLE_PYTHON 13ab7f6d04SEugene Zelenko 14b3e77600SGreg Clayton #include "lldb/Target/OperatingSystem.h" 15f2a8bccfSPavel Labath #include "lldb/Utility/StructuredData.h" 16b3e77600SGreg Clayton 17b3e77600SGreg Clayton class DynamicRegisterInfo; 18b3e77600SGreg Clayton 19b9c1b51eSKate Stone namespace lldb_private { 200641ca1aSZachary Turner class ScriptInterpreter; 210641ca1aSZachary Turner } 220641ca1aSZachary Turner 23b9c1b51eSKate Stone class OperatingSystemPython : public lldb_private::OperatingSystem { 24b3e77600SGreg Clayton public: 25ab7f6d04SEugene Zelenko OperatingSystemPython(lldb_private::Process *process, 26ab7f6d04SEugene Zelenko const lldb_private::FileSpec &python_module_path); 27ab7f6d04SEugene Zelenko 28ab7f6d04SEugene Zelenko ~OperatingSystemPython() override; 29ab7f6d04SEugene Zelenko 30b3e77600SGreg Clayton //------------------------------------------------------------------ 31b3e77600SGreg Clayton // Static Functions 32b3e77600SGreg Clayton //------------------------------------------------------------------ 33b3e77600SGreg Clayton static lldb_private::OperatingSystem * 34b3e77600SGreg Clayton CreateInstance(lldb_private::Process *process, bool force); 35b3e77600SGreg Clayton 36b9c1b51eSKate Stone static void Initialize(); 37b3e77600SGreg Clayton 38b9c1b51eSKate Stone static void Terminate(); 39b3e77600SGreg Clayton 40b9c1b51eSKate Stone static lldb_private::ConstString GetPluginNameStatic(); 41b3e77600SGreg Clayton 42b9c1b51eSKate Stone static const char *GetPluginDescriptionStatic(); 43b3e77600SGreg Clayton 44b3e77600SGreg Clayton //------------------------------------------------------------------ 45b3e77600SGreg Clayton // lldb_private::PluginInterface Methods 46b3e77600SGreg Clayton //------------------------------------------------------------------ 47b9c1b51eSKate Stone lldb_private::ConstString GetPluginName() override; 48b3e77600SGreg Clayton 49b9c1b51eSKate Stone uint32_t GetPluginVersion() override; 50b3e77600SGreg Clayton 51b3e77600SGreg Clayton //------------------------------------------------------------------ 52b3e77600SGreg Clayton // lldb_private::OperatingSystem Methods 53b3e77600SGreg Clayton //------------------------------------------------------------------ 54b9c1b51eSKate Stone bool UpdateThreadList(lldb_private::ThreadList &old_thread_list, 55ba4e61d3SAndrew Kaylor lldb_private::ThreadList &real_thread_list, 56ab7f6d04SEugene Zelenko lldb_private::ThreadList &new_thread_list) override; 57b3e77600SGreg Clayton 58b9c1b51eSKate Stone void ThreadWasSelected(lldb_private::Thread *thread) override; 59b3e77600SGreg Clayton 60ab7f6d04SEugene Zelenko lldb::RegisterContextSP 61ead45e01SGreg Clayton CreateRegisterContextForThread(lldb_private::Thread *thread, 62ab7f6d04SEugene Zelenko lldb::addr_t reg_data_addr) override; 63b3e77600SGreg Clayton 64ab7f6d04SEugene Zelenko lldb::StopInfoSP 65ab7f6d04SEugene Zelenko CreateThreadStopReason(lldb_private::Thread *thread) override; 66b3e77600SGreg Clayton 67a4d8747dSGreg Clayton //------------------------------------------------------------------ 68a4d8747dSGreg Clayton // Method for lazy creation of threads on demand 69a4d8747dSGreg Clayton //------------------------------------------------------------------ 70b9c1b51eSKate Stone lldb::ThreadSP CreateThread(lldb::tid_t tid, lldb::addr_t context) override; 71a4d8747dSGreg Clayton 72b3e77600SGreg Clayton protected: 73b9c1b51eSKate Stone bool IsValid() const { 740641ca1aSZachary Turner return m_python_object_sp && m_python_object_sp->IsValid(); 75c9d645d3SGreg Clayton } 76a4d8747dSGreg Clayton 77b9c1b51eSKate Stone lldb::ThreadSP CreateThreadFromThreadInfo( 78b9c1b51eSKate Stone lldb_private::StructuredData::Dictionary &thread_dict, 79b9c1b51eSKate Stone lldb_private::ThreadList &core_thread_list, 80b9c1b51eSKate Stone lldb_private::ThreadList &old_thread_list, 810641ca1aSZachary Turner std::vector<bool> &core_used_map, bool *did_create_ptr); 82a4d8747dSGreg Clayton 83b9c1b51eSKate Stone DynamicRegisterInfo *GetDynamicRegisterInfo(); 84b3e77600SGreg Clayton 85b3e77600SGreg Clayton lldb::ValueObjectSP m_thread_list_valobj_sp; 86*d5b44036SJonas Devlieghere std::unique_ptr<DynamicRegisterInfo> m_register_info_up; 875790759aSEnrico Granata lldb_private::ScriptInterpreter *m_interpreter; 880641ca1aSZachary Turner lldb_private::StructuredData::ObjectSP m_python_object_sp; 89b3e77600SGreg Clayton }; 90b3e77600SGreg Clayton 91ab7f6d04SEugene Zelenko #endif // LLDB_DISABLE_PYTHON 92ab7f6d04SEugene Zelenko 93ab7f6d04SEugene Zelenko #endif // liblldb_OperatingSystemPython_h_ 94