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