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