11f6a57c1SMed Ismail Bennani //===-- ScriptedProcessPythonInterface.h ------------------------*- C++ -*-===//
21f6a57c1SMed Ismail Bennani //
31f6a57c1SMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
41f6a57c1SMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information.
51f6a57c1SMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
61f6a57c1SMed Ismail Bennani //
71f6a57c1SMed Ismail Bennani //===----------------------------------------------------------------------===//
81f6a57c1SMed Ismail Bennani 
91f6a57c1SMed Ismail Bennani #ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SCRIPTEDPROCESSPYTHONINTERFACE_H
101f6a57c1SMed Ismail Bennani #define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SCRIPTEDPROCESSPYTHONINTERFACE_H
111f6a57c1SMed Ismail Bennani 
121f6a57c1SMed Ismail Bennani #include "lldb/Host/Config.h"
131f6a57c1SMed Ismail Bennani 
141f6a57c1SMed Ismail Bennani #if LLDB_ENABLE_PYTHON
151f6a57c1SMed Ismail Bennani 
161f6a57c1SMed Ismail Bennani #include "lldb/Interpreter/ScriptedProcessInterface.h"
171f6a57c1SMed Ismail Bennani 
181f6a57c1SMed Ismail Bennani namespace lldb_private {
191f6a57c1SMed Ismail Bennani class ScriptInterpreterPythonImpl;
201f6a57c1SMed Ismail Bennani class ScriptedProcessPythonInterface : public ScriptedProcessInterface {
211f6a57c1SMed Ismail Bennani public:
221f6a57c1SMed Ismail Bennani   ScriptedProcessPythonInterface(ScriptInterpreterPythonImpl &interpreter)
231f6a57c1SMed Ismail Bennani       : ScriptedProcessInterface(), m_interpreter(interpreter) {}
241f6a57c1SMed Ismail Bennani 
251f6a57c1SMed Ismail Bennani   StructuredData::GenericSP
261f6a57c1SMed Ismail Bennani   CreatePluginObject(const llvm::StringRef class_name, lldb::TargetSP target_sp,
271f6a57c1SMed Ismail Bennani                      StructuredData::DictionarySP args_sp) override;
281f6a57c1SMed Ismail Bennani 
291f6a57c1SMed Ismail Bennani   Status Launch() override;
301f6a57c1SMed Ismail Bennani 
311f6a57c1SMed Ismail Bennani   Status Resume() override;
321f6a57c1SMed Ismail Bennani 
33*312b43daSMed Ismail Bennani   bool ShouldStop() override;
34*312b43daSMed Ismail Bennani 
35*312b43daSMed Ismail Bennani   Status Stop() override;
36*312b43daSMed Ismail Bennani 
371f6a57c1SMed Ismail Bennani   lldb::MemoryRegionInfoSP
381f6a57c1SMed Ismail Bennani   GetMemoryRegionContainingAddress(lldb::addr_t address) override;
391f6a57c1SMed Ismail Bennani 
401f6a57c1SMed Ismail Bennani   StructuredData::DictionarySP GetThreadWithID(lldb::tid_t tid) override;
411f6a57c1SMed Ismail Bennani 
421f6a57c1SMed Ismail Bennani   StructuredData::DictionarySP GetRegistersForThread(lldb::tid_t tid) override;
431f6a57c1SMed Ismail Bennani 
441f6a57c1SMed Ismail Bennani   lldb::DataExtractorSP ReadMemoryAtAddress(lldb::addr_t address, size_t size,
451f6a57c1SMed Ismail Bennani                                             Status &error) override;
461f6a57c1SMed Ismail Bennani 
471f6a57c1SMed Ismail Bennani   StructuredData::DictionarySP GetLoadedImages() override;
481f6a57c1SMed Ismail Bennani 
491f6a57c1SMed Ismail Bennani   lldb::pid_t GetProcessID() override;
501f6a57c1SMed Ismail Bennani 
511f6a57c1SMed Ismail Bennani   bool IsAlive() override;
521f6a57c1SMed Ismail Bennani 
531f6a57c1SMed Ismail Bennani protected:
541f6a57c1SMed Ismail Bennani   size_t GetGenericInteger(llvm::StringRef method_name);
55*312b43daSMed Ismail Bennani   Status GetStatusFromMethod(llvm::StringRef method_name);
561f6a57c1SMed Ismail Bennani 
571f6a57c1SMed Ismail Bennani private:
581f6a57c1SMed Ismail Bennani   // The lifetime is managed by the ScriptInterpreter
591f6a57c1SMed Ismail Bennani   ScriptInterpreterPythonImpl &m_interpreter;
601f6a57c1SMed Ismail Bennani   StructuredData::GenericSP m_object_instance_sp;
611f6a57c1SMed Ismail Bennani };
621f6a57c1SMed Ismail Bennani } // namespace lldb_private
631f6a57c1SMed Ismail Bennani 
641f6a57c1SMed Ismail Bennani #endif // LLDB_ENABLE_PYTHON
651f6a57c1SMed Ismail Bennani #endif // LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SCRIPTEDPROCESSPYTHONINTERFACE_H
66