1d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton//===-- OperatingSystemPython.h ---------------------------*- C++ -*-===// 2d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton// 3d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton// The LLVM Compiler Infrastructure 4d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton// 5d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton// This file is distributed under the University of Illinois Open Source 6d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton// License. See LICENSE.TXT for details. 7d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton// 8d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton//===----------------------------------------------------------------------===// 9d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton#ifndef LLDB_DISABLE_PYTHON 10d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 11d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton#ifndef liblldb_OperatingSystemPython_h_ 12d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton#define liblldb_OperatingSystemPython_h_ 13d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 14d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton// C Includes 15d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton// C++ Includes 16d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton// Other libraries and framework includes 17155ee91cc315888c26de1bfebd876bf35b857329Enrico Granata#include "lldb/Interpreter/ScriptInterpreter.h" 18d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton#include "lldb/Target/OperatingSystem.h" 19d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 20d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Claytonclass DynamicRegisterInfo; 21d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 22d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Claytonclass OperatingSystemPython : public lldb_private::OperatingSystem 23d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton{ 24d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Claytonpublic: 25d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton //------------------------------------------------------------------ 26d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton // Static Functions 27d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton //------------------------------------------------------------------ 28d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton static lldb_private::OperatingSystem * 29d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton CreateInstance (lldb_private::Process *process, bool force); 30d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 31d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton static void 32d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton Initialize(); 33d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 34d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton static void 35d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton Terminate(); 36d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 370e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton static lldb_private::ConstString 38d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton GetPluginNameStatic(); 39d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 40d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton static const char * 41d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton GetPluginDescriptionStatic(); 42d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 43d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton //------------------------------------------------------------------ 44d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton // Class Methods 45d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton //------------------------------------------------------------------ 462e7f313dc473b036788319690116b324cb44b765Greg Clayton OperatingSystemPython (lldb_private::Process *process, 472e7f313dc473b036788319690116b324cb44b765Greg Clayton const lldb_private::FileSpec &python_module_path); 48d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 49d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton virtual 50d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton ~OperatingSystemPython (); 51d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 52d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton //------------------------------------------------------------------ 53d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton // lldb_private::PluginInterface Methods 54d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton //------------------------------------------------------------------ 550e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton virtual lldb_private::ConstString 56d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton GetPluginName(); 57d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 58d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton virtual uint32_t 59d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton GetPluginVersion(); 60d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 61d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton //------------------------------------------------------------------ 62d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton // lldb_private::OperatingSystem Methods 63d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton //------------------------------------------------------------------ 64d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton virtual bool 654e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor UpdateThreadList (lldb_private::ThreadList &old_thread_list, 664e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor lldb_private::ThreadList &real_thread_list, 67d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton lldb_private::ThreadList &new_thread_list); 68d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 69d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton virtual void 70d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton ThreadWasSelected (lldb_private::Thread *thread); 71d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 72d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton virtual lldb::RegisterContextSP 7391a9f2127fa8b8e90f6ea1676d11f97f44ce22ddGreg Clayton CreateRegisterContextForThread (lldb_private::Thread *thread, 7491a9f2127fa8b8e90f6ea1676d11f97f44ce22ddGreg Clayton lldb::addr_t reg_data_addr); 75d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 76d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton virtual lldb::StopInfoSP 77d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton CreateThreadStopReason (lldb_private::Thread *thread); 78d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 7952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton //------------------------------------------------------------------ 8052ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton // Method for lazy creation of threads on demand 8152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton //------------------------------------------------------------------ 8252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton virtual lldb::ThreadSP 8352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton CreateThread (lldb::tid_t tid, lldb::addr_t context); 8452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 85d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Claytonprotected: 86d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 872e7f313dc473b036788319690116b324cb44b765Greg Clayton bool IsValid() const 882e7f313dc473b036788319690116b324cb44b765Greg Clayton { 8952ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton return m_python_object_sp && m_python_object_sp->GetObject() != NULL; 902e7f313dc473b036788319690116b324cb44b765Greg Clayton } 9152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 9252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton lldb::ThreadSP 9352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton CreateThreadFromThreadInfo (lldb_private::PythonDictionary &thread_dict, 949acf3699d2bea583b45c762f4cd82b2a4af6131bGreg Clayton lldb_private::ThreadList &core_thread_list, 959acf3699d2bea583b45c762f4cd82b2a4af6131bGreg Clayton lldb_private::ThreadList &old_thread_list, 9652ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton bool *did_create_ptr); 9752ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton 98d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton DynamicRegisterInfo * 99d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton GetDynamicRegisterInfo (); 100d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 101d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton lldb::ValueObjectSP m_thread_list_valobj_sp; 102102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<DynamicRegisterInfo> m_register_info_ap; 103155ee91cc315888c26de1bfebd876bf35b857329Enrico Granata lldb_private::ScriptInterpreter *m_interpreter; 10452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton lldb::ScriptInterpreterObjectSP m_python_object_sp; 105d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 106d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton}; 107d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton 108d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton#endif // #ifndef liblldb_OperatingSystemPython_h_ 109d815ded12b0c9fea2c8a38cc241d3609b3fe228aGreg Clayton#endif // #ifndef LLDB_DISABLE_PYTHON 110