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
17*0641ca1aSZachary Turner #include "lldb/Core/StructuredData.h"
18b3e77600SGreg Clayton #include "lldb/Target/OperatingSystem.h"
19b3e77600SGreg Clayton 
20b3e77600SGreg Clayton class DynamicRegisterInfo;
21b3e77600SGreg Clayton 
22*0641ca1aSZachary Turner namespace lldb_private
23*0641ca1aSZachary Turner {
24*0641ca1aSZachary Turner class ScriptInterpreter;
25*0641ca1aSZachary Turner }
26*0641ca1aSZachary Turner 
27b3e77600SGreg Clayton class OperatingSystemPython : public lldb_private::OperatingSystem
28b3e77600SGreg Clayton {
29b3e77600SGreg Clayton public:
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 
36b3e77600SGreg Clayton     static void
37b3e77600SGreg Clayton     Initialize();
38b3e77600SGreg Clayton 
39b3e77600SGreg Clayton     static void
40b3e77600SGreg Clayton     Terminate();
41b3e77600SGreg Clayton 
4257abc5d6SGreg Clayton     static lldb_private::ConstString
43b3e77600SGreg Clayton     GetPluginNameStatic();
44b3e77600SGreg Clayton 
45b3e77600SGreg Clayton     static const char *
46b3e77600SGreg Clayton     GetPluginDescriptionStatic();
47b3e77600SGreg Clayton 
48b3e77600SGreg Clayton     //------------------------------------------------------------------
49b3e77600SGreg Clayton     // Class Methods
50b3e77600SGreg Clayton     //------------------------------------------------------------------
51c9d645d3SGreg Clayton     OperatingSystemPython (lldb_private::Process *process,
52c9d645d3SGreg Clayton                            const lldb_private::FileSpec &python_module_path);
53b3e77600SGreg Clayton 
54b3e77600SGreg Clayton     virtual
55b3e77600SGreg Clayton     ~OperatingSystemPython ();
56b3e77600SGreg Clayton 
57b3e77600SGreg Clayton     //------------------------------------------------------------------
58b3e77600SGreg Clayton     // lldb_private::PluginInterface Methods
59b3e77600SGreg Clayton     //------------------------------------------------------------------
6057abc5d6SGreg Clayton     virtual lldb_private::ConstString
61b3e77600SGreg Clayton     GetPluginName();
62b3e77600SGreg Clayton 
63b3e77600SGreg Clayton     virtual uint32_t
64b3e77600SGreg Clayton     GetPluginVersion();
65b3e77600SGreg Clayton 
66b3e77600SGreg Clayton     //------------------------------------------------------------------
67b3e77600SGreg Clayton     // lldb_private::OperatingSystem Methods
68b3e77600SGreg Clayton     //------------------------------------------------------------------
69b3e77600SGreg Clayton     virtual bool
70b3e77600SGreg Clayton     UpdateThreadList (lldb_private::ThreadList &old_thread_list,
71ba4e61d3SAndrew Kaylor                       lldb_private::ThreadList &real_thread_list,
72b3e77600SGreg Clayton                       lldb_private::ThreadList &new_thread_list);
73b3e77600SGreg Clayton 
74b3e77600SGreg Clayton     virtual void
75b3e77600SGreg Clayton     ThreadWasSelected (lldb_private::Thread *thread);
76b3e77600SGreg Clayton 
77b3e77600SGreg Clayton     virtual lldb::RegisterContextSP
78ead45e01SGreg Clayton     CreateRegisterContextForThread (lldb_private::Thread *thread,
79ead45e01SGreg Clayton                                     lldb::addr_t reg_data_addr);
80b3e77600SGreg Clayton 
81b3e77600SGreg Clayton     virtual lldb::StopInfoSP
82b3e77600SGreg Clayton     CreateThreadStopReason (lldb_private::Thread *thread);
83b3e77600SGreg Clayton 
84a4d8747dSGreg Clayton     //------------------------------------------------------------------
85a4d8747dSGreg Clayton     // Method for lazy creation of threads on demand
86a4d8747dSGreg Clayton     //------------------------------------------------------------------
87a4d8747dSGreg Clayton     virtual lldb::ThreadSP
88a4d8747dSGreg Clayton     CreateThread (lldb::tid_t tid, lldb::addr_t context);
89a4d8747dSGreg Clayton 
90b3e77600SGreg Clayton protected:
91b3e77600SGreg Clayton 
92c9d645d3SGreg Clayton     bool IsValid() const
93c9d645d3SGreg Clayton     {
94*0641ca1aSZachary Turner         return m_python_object_sp && m_python_object_sp->IsValid();
95c9d645d3SGreg Clayton     }
96a4d8747dSGreg Clayton 
97*0641ca1aSZachary Turner     lldb::ThreadSP CreateThreadFromThreadInfo(lldb_private::StructuredData::Dictionary &thread_dict,
98*0641ca1aSZachary Turner                                               lldb_private::ThreadList &core_thread_list, lldb_private::ThreadList &old_thread_list,
99*0641ca1aSZachary Turner                                               std::vector<bool> &core_used_map, bool *did_create_ptr);
100a4d8747dSGreg Clayton 
101b3e77600SGreg Clayton     DynamicRegisterInfo *
102b3e77600SGreg Clayton     GetDynamicRegisterInfo ();
103b3e77600SGreg Clayton 
104b3e77600SGreg Clayton     lldb::ValueObjectSP m_thread_list_valobj_sp;
1057b0992d9SGreg Clayton     std::unique_ptr<DynamicRegisterInfo> m_register_info_ap;
1065790759aSEnrico Granata     lldb_private::ScriptInterpreter *m_interpreter;
107*0641ca1aSZachary Turner     lldb_private::StructuredData::ObjectSP m_python_object_sp;
108b3e77600SGreg Clayton };
109b3e77600SGreg Clayton 
110b3e77600SGreg Clayton #endif // #ifndef liblldb_OperatingSystemPython_h_
111b3e77600SGreg Clayton #endif // #ifndef LLDB_DISABLE_PYTHON
112