1*1f6a57c1SMed Ismail Bennani //===-- ScriptedProcessPythonInterface.h ------------------------*- C++ -*-===//
2*1f6a57c1SMed Ismail Bennani //
3*1f6a57c1SMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*1f6a57c1SMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information.
5*1f6a57c1SMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*1f6a57c1SMed Ismail Bennani //
7*1f6a57c1SMed Ismail Bennani //===----------------------------------------------------------------------===//
8*1f6a57c1SMed Ismail Bennani 
9*1f6a57c1SMed Ismail Bennani #ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SCRIPTEDPROCESSPYTHONINTERFACE_H
10*1f6a57c1SMed Ismail Bennani #define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SCRIPTEDPROCESSPYTHONINTERFACE_H
11*1f6a57c1SMed Ismail Bennani 
12*1f6a57c1SMed Ismail Bennani #include "lldb/Host/Config.h"
13*1f6a57c1SMed Ismail Bennani 
14*1f6a57c1SMed Ismail Bennani #if LLDB_ENABLE_PYTHON
15*1f6a57c1SMed Ismail Bennani 
16*1f6a57c1SMed Ismail Bennani #include "lldb/Interpreter/ScriptedProcessInterface.h"
17*1f6a57c1SMed Ismail Bennani 
18*1f6a57c1SMed Ismail Bennani namespace lldb_private {
19*1f6a57c1SMed Ismail Bennani class ScriptInterpreterPythonImpl;
20*1f6a57c1SMed Ismail Bennani class ScriptedProcessPythonInterface : public ScriptedProcessInterface {
21*1f6a57c1SMed Ismail Bennani public:
22*1f6a57c1SMed Ismail Bennani   ScriptedProcessPythonInterface(ScriptInterpreterPythonImpl &interpreter)
23*1f6a57c1SMed Ismail Bennani       : ScriptedProcessInterface(), m_interpreter(interpreter) {}
24*1f6a57c1SMed Ismail Bennani 
25*1f6a57c1SMed Ismail Bennani   StructuredData::GenericSP
26*1f6a57c1SMed Ismail Bennani   CreatePluginObject(const llvm::StringRef class_name, lldb::TargetSP target_sp,
27*1f6a57c1SMed Ismail Bennani                      StructuredData::DictionarySP args_sp) override;
28*1f6a57c1SMed Ismail Bennani 
29*1f6a57c1SMed Ismail Bennani   Status Launch() override;
30*1f6a57c1SMed Ismail Bennani 
31*1f6a57c1SMed Ismail Bennani   Status Resume() override;
32*1f6a57c1SMed Ismail Bennani 
33*1f6a57c1SMed Ismail Bennani   lldb::MemoryRegionInfoSP
34*1f6a57c1SMed Ismail Bennani   GetMemoryRegionContainingAddress(lldb::addr_t address) override;
35*1f6a57c1SMed Ismail Bennani 
36*1f6a57c1SMed Ismail Bennani   StructuredData::DictionarySP GetThreadWithID(lldb::tid_t tid) override;
37*1f6a57c1SMed Ismail Bennani 
38*1f6a57c1SMed Ismail Bennani   StructuredData::DictionarySP GetRegistersForThread(lldb::tid_t tid) override;
39*1f6a57c1SMed Ismail Bennani 
40*1f6a57c1SMed Ismail Bennani   lldb::DataExtractorSP ReadMemoryAtAddress(lldb::addr_t address, size_t size,
41*1f6a57c1SMed Ismail Bennani                                             Status &error) override;
42*1f6a57c1SMed Ismail Bennani 
43*1f6a57c1SMed Ismail Bennani   StructuredData::DictionarySP GetLoadedImages() override;
44*1f6a57c1SMed Ismail Bennani 
45*1f6a57c1SMed Ismail Bennani   lldb::pid_t GetProcessID() override;
46*1f6a57c1SMed Ismail Bennani 
47*1f6a57c1SMed Ismail Bennani   bool IsAlive() override;
48*1f6a57c1SMed Ismail Bennani 
49*1f6a57c1SMed Ismail Bennani protected:
50*1f6a57c1SMed Ismail Bennani   size_t GetGenericInteger(llvm::StringRef method_name);
51*1f6a57c1SMed Ismail Bennani   Status LaunchOrResume(llvm::StringRef method_name);
52*1f6a57c1SMed Ismail Bennani 
53*1f6a57c1SMed Ismail Bennani private:
54*1f6a57c1SMed Ismail Bennani   // The lifetime is managed by the ScriptInterpreter
55*1f6a57c1SMed Ismail Bennani   ScriptInterpreterPythonImpl &m_interpreter;
56*1f6a57c1SMed Ismail Bennani   StructuredData::GenericSP m_object_instance_sp;
57*1f6a57c1SMed Ismail Bennani };
58*1f6a57c1SMed Ismail Bennani } // namespace lldb_private
59*1f6a57c1SMed Ismail Bennani 
60*1f6a57c1SMed Ismail Bennani #endif // LLDB_ENABLE_PYTHON
61*1f6a57c1SMed Ismail Bennani #endif // LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SCRIPTEDPROCESSPYTHONINTERFACE_H
62