1b3e77600SGreg Clayton //===-- 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 #ifndef LLDB_DISABLE_PYTHON
10b3e77600SGreg Clayton 
11b3e77600SGreg Clayton #ifndef liblldb_OperatingSystemPython_h_
12b3e77600SGreg Clayton #define liblldb_OperatingSystemPython_h_
13b3e77600SGreg Clayton 
14b3e77600SGreg Clayton // C Includes
15b3e77600SGreg Clayton // C++ Includes
16b3e77600SGreg Clayton // Other libraries and framework includes
175790759aSEnrico Granata #include "lldb/Interpreter/ScriptInterpreter.h"
18b3e77600SGreg Clayton #include "lldb/Target/OperatingSystem.h"
19b3e77600SGreg Clayton 
20b3e77600SGreg Clayton class DynamicRegisterInfo;
21b3e77600SGreg Clayton 
22b3e77600SGreg Clayton class OperatingSystemPython : public lldb_private::OperatingSystem
23b3e77600SGreg Clayton {
24b3e77600SGreg Clayton public:
25b3e77600SGreg Clayton     //------------------------------------------------------------------
26b3e77600SGreg Clayton     // Static Functions
27b3e77600SGreg Clayton     //------------------------------------------------------------------
28b3e77600SGreg Clayton     static lldb_private::OperatingSystem *
29b3e77600SGreg Clayton     CreateInstance (lldb_private::Process *process, bool force);
30b3e77600SGreg Clayton 
31b3e77600SGreg Clayton     static void
32b3e77600SGreg Clayton     Initialize();
33b3e77600SGreg Clayton 
34b3e77600SGreg Clayton     static void
35b3e77600SGreg Clayton     Terminate();
36b3e77600SGreg Clayton 
37*57abc5d6SGreg Clayton     static lldb_private::ConstString
38b3e77600SGreg Clayton     GetPluginNameStatic();
39b3e77600SGreg Clayton 
40b3e77600SGreg Clayton     static const char *
41b3e77600SGreg Clayton     GetPluginDescriptionStatic();
42b3e77600SGreg Clayton 
43b3e77600SGreg Clayton     //------------------------------------------------------------------
44b3e77600SGreg Clayton     // Class Methods
45b3e77600SGreg Clayton     //------------------------------------------------------------------
46c9d645d3SGreg Clayton     OperatingSystemPython (lldb_private::Process *process,
47c9d645d3SGreg Clayton                            const lldb_private::FileSpec &python_module_path);
48b3e77600SGreg Clayton 
49b3e77600SGreg Clayton     virtual
50b3e77600SGreg Clayton     ~OperatingSystemPython ();
51b3e77600SGreg Clayton 
52b3e77600SGreg Clayton     //------------------------------------------------------------------
53b3e77600SGreg Clayton     // lldb_private::PluginInterface Methods
54b3e77600SGreg Clayton     //------------------------------------------------------------------
55*57abc5d6SGreg Clayton     virtual lldb_private::ConstString
56b3e77600SGreg Clayton     GetPluginName();
57b3e77600SGreg Clayton 
58b3e77600SGreg Clayton     virtual uint32_t
59b3e77600SGreg Clayton     GetPluginVersion();
60b3e77600SGreg Clayton 
61b3e77600SGreg Clayton     //------------------------------------------------------------------
62b3e77600SGreg Clayton     // lldb_private::OperatingSystem Methods
63b3e77600SGreg Clayton     //------------------------------------------------------------------
64b3e77600SGreg Clayton     virtual bool
65b3e77600SGreg Clayton     UpdateThreadList (lldb_private::ThreadList &old_thread_list,
66ba4e61d3SAndrew Kaylor                       lldb_private::ThreadList &real_thread_list,
67b3e77600SGreg Clayton                       lldb_private::ThreadList &new_thread_list);
68b3e77600SGreg Clayton 
69b3e77600SGreg Clayton     virtual void
70b3e77600SGreg Clayton     ThreadWasSelected (lldb_private::Thread *thread);
71b3e77600SGreg Clayton 
72b3e77600SGreg Clayton     virtual lldb::RegisterContextSP
73ead45e01SGreg Clayton     CreateRegisterContextForThread (lldb_private::Thread *thread,
74ead45e01SGreg Clayton                                     lldb::addr_t reg_data_addr);
75b3e77600SGreg Clayton 
76b3e77600SGreg Clayton     virtual lldb::StopInfoSP
77b3e77600SGreg Clayton     CreateThreadStopReason (lldb_private::Thread *thread);
78b3e77600SGreg Clayton 
79a4d8747dSGreg Clayton     //------------------------------------------------------------------
80a4d8747dSGreg Clayton     // Method for lazy creation of threads on demand
81a4d8747dSGreg Clayton     //------------------------------------------------------------------
82a4d8747dSGreg Clayton     virtual lldb::ThreadSP
83a4d8747dSGreg Clayton     CreateThread (lldb::tid_t tid, lldb::addr_t context);
84a4d8747dSGreg Clayton 
85b3e77600SGreg Clayton protected:
86b3e77600SGreg Clayton 
87c9d645d3SGreg Clayton     bool IsValid() const
88c9d645d3SGreg Clayton     {
89a4d8747dSGreg Clayton         return m_python_object_sp && m_python_object_sp->GetObject() != NULL;
90c9d645d3SGreg Clayton     }
91a4d8747dSGreg Clayton 
92a4d8747dSGreg Clayton     lldb::ThreadSP
93a4d8747dSGreg Clayton     CreateThreadFromThreadInfo (lldb_private::PythonDictionary &thread_dict,
94b3ae8761SGreg Clayton                                 lldb_private::ThreadList &core_thread_list,
95b3ae8761SGreg Clayton                                 lldb_private::ThreadList &old_thread_list,
96a4d8747dSGreg Clayton                                 bool *did_create_ptr);
97a4d8747dSGreg Clayton 
98b3e77600SGreg Clayton     DynamicRegisterInfo *
99b3e77600SGreg Clayton     GetDynamicRegisterInfo ();
100b3e77600SGreg Clayton 
101b3e77600SGreg Clayton     lldb::ValueObjectSP m_thread_list_valobj_sp;
1027b0992d9SGreg Clayton     std::unique_ptr<DynamicRegisterInfo> m_register_info_ap;
1035790759aSEnrico Granata     lldb_private::ScriptInterpreter *m_interpreter;
104a4d8747dSGreg Clayton     lldb::ScriptInterpreterObjectSP m_python_object_sp;
105b3e77600SGreg Clayton 
106b3e77600SGreg Clayton };
107b3e77600SGreg Clayton 
108b3e77600SGreg Clayton #endif // #ifndef liblldb_OperatingSystemPython_h_
109b3e77600SGreg Clayton #endif // #ifndef LLDB_DISABLE_PYTHON
110