1ab7f6d04SEugene Zelenko //===-- OperatingSystemPython.h ---------------------------------*- C++ -*-===// 2b3e77600SGreg Clayton // 3b3e77600SGreg Clayton // The LLVM Compiler Infrastructure 4b3e77600SGreg Clayton // 5b3e77600SGreg Clayton // This file is distributed under the University of Illinois Open Source 6b3e77600SGreg Clayton // License. See LICENSE.TXT for details. 7b3e77600SGreg Clayton // 8b3e77600SGreg Clayton //===----------------------------------------------------------------------===// 9b3e77600SGreg Clayton 10b3e77600SGreg Clayton #ifndef liblldb_OperatingSystemPython_h_ 11b3e77600SGreg Clayton #define liblldb_OperatingSystemPython_h_ 12b3e77600SGreg Clayton 13ab7f6d04SEugene Zelenko #ifndef LLDB_DISABLE_PYTHON 14ab7f6d04SEugene Zelenko 15b3e77600SGreg Clayton // C Includes 16b3e77600SGreg Clayton // C++ Includes 17b3e77600SGreg Clayton // Other libraries and framework includes 18ab7f6d04SEugene Zelenko // Project includes 190641ca1aSZachary Turner #include "lldb/Core/StructuredData.h" 20b3e77600SGreg Clayton #include "lldb/Target/OperatingSystem.h" 21b3e77600SGreg Clayton 22b3e77600SGreg Clayton class DynamicRegisterInfo; 23b3e77600SGreg Clayton 24*b9c1b51eSKate Stone namespace lldb_private { 250641ca1aSZachary Turner class ScriptInterpreter; 260641ca1aSZachary Turner } 270641ca1aSZachary Turner 28*b9c1b51eSKate Stone class OperatingSystemPython : public lldb_private::OperatingSystem { 29b3e77600SGreg Clayton public: 30ab7f6d04SEugene Zelenko OperatingSystemPython(lldb_private::Process *process, 31ab7f6d04SEugene Zelenko const lldb_private::FileSpec &python_module_path); 32ab7f6d04SEugene Zelenko 33ab7f6d04SEugene Zelenko ~OperatingSystemPython() override; 34ab7f6d04SEugene Zelenko 35b3e77600SGreg Clayton //------------------------------------------------------------------ 36b3e77600SGreg Clayton // Static Functions 37b3e77600SGreg Clayton //------------------------------------------------------------------ 38b3e77600SGreg Clayton static lldb_private::OperatingSystem * 39b3e77600SGreg Clayton CreateInstance(lldb_private::Process *process, bool force); 40b3e77600SGreg Clayton 41*b9c1b51eSKate Stone static void Initialize(); 42b3e77600SGreg Clayton 43*b9c1b51eSKate Stone static void Terminate(); 44b3e77600SGreg Clayton 45*b9c1b51eSKate Stone static lldb_private::ConstString GetPluginNameStatic(); 46b3e77600SGreg Clayton 47*b9c1b51eSKate Stone static const char *GetPluginDescriptionStatic(); 48b3e77600SGreg Clayton 49b3e77600SGreg Clayton //------------------------------------------------------------------ 50b3e77600SGreg Clayton // lldb_private::PluginInterface Methods 51b3e77600SGreg Clayton //------------------------------------------------------------------ 52*b9c1b51eSKate Stone lldb_private::ConstString GetPluginName() override; 53b3e77600SGreg Clayton 54*b9c1b51eSKate Stone uint32_t GetPluginVersion() override; 55b3e77600SGreg Clayton 56b3e77600SGreg Clayton //------------------------------------------------------------------ 57b3e77600SGreg Clayton // lldb_private::OperatingSystem Methods 58b3e77600SGreg Clayton //------------------------------------------------------------------ 59*b9c1b51eSKate Stone bool UpdateThreadList(lldb_private::ThreadList &old_thread_list, 60ba4e61d3SAndrew Kaylor lldb_private::ThreadList &real_thread_list, 61ab7f6d04SEugene Zelenko lldb_private::ThreadList &new_thread_list) override; 62b3e77600SGreg Clayton 63*b9c1b51eSKate Stone void ThreadWasSelected(lldb_private::Thread *thread) override; 64b3e77600SGreg Clayton 65ab7f6d04SEugene Zelenko lldb::RegisterContextSP 66ead45e01SGreg Clayton CreateRegisterContextForThread(lldb_private::Thread *thread, 67ab7f6d04SEugene Zelenko lldb::addr_t reg_data_addr) override; 68b3e77600SGreg Clayton 69ab7f6d04SEugene Zelenko lldb::StopInfoSP 70ab7f6d04SEugene Zelenko CreateThreadStopReason(lldb_private::Thread *thread) override; 71b3e77600SGreg Clayton 72a4d8747dSGreg Clayton //------------------------------------------------------------------ 73a4d8747dSGreg Clayton // Method for lazy creation of threads on demand 74a4d8747dSGreg Clayton //------------------------------------------------------------------ 75*b9c1b51eSKate Stone lldb::ThreadSP CreateThread(lldb::tid_t tid, lldb::addr_t context) override; 76a4d8747dSGreg Clayton 77b3e77600SGreg Clayton protected: 78*b9c1b51eSKate Stone bool IsValid() const { 790641ca1aSZachary Turner return m_python_object_sp && m_python_object_sp->IsValid(); 80c9d645d3SGreg Clayton } 81a4d8747dSGreg Clayton 82*b9c1b51eSKate Stone lldb::ThreadSP CreateThreadFromThreadInfo( 83*b9c1b51eSKate Stone lldb_private::StructuredData::Dictionary &thread_dict, 84*b9c1b51eSKate Stone lldb_private::ThreadList &core_thread_list, 85*b9c1b51eSKate Stone lldb_private::ThreadList &old_thread_list, 860641ca1aSZachary Turner std::vector<bool> &core_used_map, bool *did_create_ptr); 87a4d8747dSGreg Clayton 88*b9c1b51eSKate Stone DynamicRegisterInfo *GetDynamicRegisterInfo(); 89b3e77600SGreg Clayton 90b3e77600SGreg Clayton lldb::ValueObjectSP m_thread_list_valobj_sp; 917b0992d9SGreg Clayton std::unique_ptr<DynamicRegisterInfo> m_register_info_ap; 925790759aSEnrico Granata lldb_private::ScriptInterpreter *m_interpreter; 930641ca1aSZachary Turner lldb_private::StructuredData::ObjectSP m_python_object_sp; 94b3e77600SGreg Clayton }; 95b3e77600SGreg Clayton 96ab7f6d04SEugene Zelenko #endif // LLDB_DISABLE_PYTHON 97ab7f6d04SEugene Zelenko 98ab7f6d04SEugene Zelenko #endif // liblldb_OperatingSystemPython_h_ 99