1*ab7f6d04SEugene 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 
13*ab7f6d04SEugene Zelenko #ifndef LLDB_DISABLE_PYTHON
14*ab7f6d04SEugene Zelenko 
15b3e77600SGreg Clayton // C Includes
16b3e77600SGreg Clayton // C++ Includes
17b3e77600SGreg Clayton // Other libraries and framework includes
18*ab7f6d04SEugene 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 
240641ca1aSZachary Turner namespace lldb_private
250641ca1aSZachary Turner {
260641ca1aSZachary Turner class ScriptInterpreter;
270641ca1aSZachary Turner }
280641ca1aSZachary Turner 
29b3e77600SGreg Clayton class OperatingSystemPython : public lldb_private::OperatingSystem
30b3e77600SGreg Clayton {
31b3e77600SGreg Clayton public:
32*ab7f6d04SEugene Zelenko     OperatingSystemPython(lldb_private::Process *process,
33*ab7f6d04SEugene Zelenko                           const lldb_private::FileSpec &python_module_path);
34*ab7f6d04SEugene Zelenko 
35*ab7f6d04SEugene Zelenko     ~OperatingSystemPython() override;
36*ab7f6d04SEugene Zelenko 
37b3e77600SGreg Clayton     //------------------------------------------------------------------
38b3e77600SGreg Clayton     // Static Functions
39b3e77600SGreg Clayton     //------------------------------------------------------------------
40b3e77600SGreg Clayton     static lldb_private::OperatingSystem *
41b3e77600SGreg Clayton     CreateInstance (lldb_private::Process *process, bool force);
42b3e77600SGreg Clayton 
43b3e77600SGreg Clayton     static void
44b3e77600SGreg Clayton     Initialize();
45b3e77600SGreg Clayton 
46b3e77600SGreg Clayton     static void
47b3e77600SGreg Clayton     Terminate();
48b3e77600SGreg Clayton 
4957abc5d6SGreg Clayton     static lldb_private::ConstString
50b3e77600SGreg Clayton     GetPluginNameStatic();
51b3e77600SGreg Clayton 
52b3e77600SGreg Clayton     static const char *
53b3e77600SGreg Clayton     GetPluginDescriptionStatic();
54b3e77600SGreg Clayton 
55b3e77600SGreg Clayton     //------------------------------------------------------------------
56b3e77600SGreg Clayton     // lldb_private::PluginInterface Methods
57b3e77600SGreg Clayton     //------------------------------------------------------------------
58*ab7f6d04SEugene Zelenko     lldb_private::ConstString
59*ab7f6d04SEugene Zelenko     GetPluginName() override;
60b3e77600SGreg Clayton 
61*ab7f6d04SEugene Zelenko     uint32_t
62*ab7f6d04SEugene Zelenko     GetPluginVersion() override;
63b3e77600SGreg Clayton 
64b3e77600SGreg Clayton     //------------------------------------------------------------------
65b3e77600SGreg Clayton     // lldb_private::OperatingSystem Methods
66b3e77600SGreg Clayton     //------------------------------------------------------------------
67*ab7f6d04SEugene Zelenko     bool
68b3e77600SGreg Clayton     UpdateThreadList(lldb_private::ThreadList &old_thread_list,
69ba4e61d3SAndrew Kaylor                      lldb_private::ThreadList &real_thread_list,
70*ab7f6d04SEugene Zelenko                      lldb_private::ThreadList &new_thread_list) override;
71b3e77600SGreg Clayton 
72*ab7f6d04SEugene Zelenko     void
73*ab7f6d04SEugene Zelenko     ThreadWasSelected(lldb_private::Thread *thread) override;
74b3e77600SGreg Clayton 
75*ab7f6d04SEugene Zelenko     lldb::RegisterContextSP
76ead45e01SGreg Clayton     CreateRegisterContextForThread(lldb_private::Thread *thread,
77*ab7f6d04SEugene Zelenko                                    lldb::addr_t reg_data_addr) override;
78b3e77600SGreg Clayton 
79*ab7f6d04SEugene Zelenko     lldb::StopInfoSP
80*ab7f6d04SEugene Zelenko     CreateThreadStopReason(lldb_private::Thread *thread) override;
81b3e77600SGreg Clayton 
82a4d8747dSGreg Clayton     //------------------------------------------------------------------
83a4d8747dSGreg Clayton     // Method for lazy creation of threads on demand
84a4d8747dSGreg Clayton     //------------------------------------------------------------------
85*ab7f6d04SEugene Zelenko     lldb::ThreadSP
86*ab7f6d04SEugene Zelenko     CreateThread(lldb::tid_t tid, lldb::addr_t context) override;
87a4d8747dSGreg Clayton 
88b3e77600SGreg Clayton protected:
89c9d645d3SGreg Clayton     bool IsValid() const
90c9d645d3SGreg Clayton     {
910641ca1aSZachary Turner         return m_python_object_sp && m_python_object_sp->IsValid();
92c9d645d3SGreg Clayton     }
93a4d8747dSGreg Clayton 
940641ca1aSZachary Turner     lldb::ThreadSP CreateThreadFromThreadInfo(lldb_private::StructuredData::Dictionary &thread_dict,
950641ca1aSZachary Turner                                               lldb_private::ThreadList &core_thread_list, lldb_private::ThreadList &old_thread_list,
960641ca1aSZachary Turner                                               std::vector<bool> &core_used_map, 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;
1040641ca1aSZachary Turner     lldb_private::StructuredData::ObjectSP m_python_object_sp;
105b3e77600SGreg Clayton };
106b3e77600SGreg Clayton 
107*ab7f6d04SEugene Zelenko #endif // LLDB_DISABLE_PYTHON
108*ab7f6d04SEugene Zelenko 
109*ab7f6d04SEugene Zelenko #endif // liblldb_OperatingSystemPython_h_
110