135653324SMed Ismail Bennani //===-- ScriptedProcessPythonInterface.h ------------------------*- C++ -*-===// 235653324SMed Ismail Bennani // 335653324SMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 435653324SMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information. 535653324SMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 635653324SMed Ismail Bennani // 735653324SMed Ismail Bennani //===----------------------------------------------------------------------===// 835653324SMed Ismail Bennani 935653324SMed Ismail Bennani #ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDPROCESSPYTHONINTERFACE_H 1035653324SMed Ismail Bennani #define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDPROCESSPYTHONINTERFACE_H 1135653324SMed Ismail Bennani 1235653324SMed Ismail Bennani #include "lldb/Host/Config.h" 1335653324SMed Ismail Bennani #include "lldb/Interpreter/Interfaces/ScriptedProcessInterface.h" 1435653324SMed Ismail Bennani 1535653324SMed Ismail Bennani #if LLDB_ENABLE_PYTHON 1635653324SMed Ismail Bennani 1735653324SMed Ismail Bennani #include "ScriptedPythonInterface.h" 1835653324SMed Ismail Bennani 1935653324SMed Ismail Bennani #include <optional> 2035653324SMed Ismail Bennani 2135653324SMed Ismail Bennani namespace lldb_private { 2235653324SMed Ismail Bennani class ScriptedProcessPythonInterface : public ScriptedProcessInterface, 2335653324SMed Ismail Bennani public ScriptedPythonInterface, 2435653324SMed Ismail Bennani public PluginInterface { 2535653324SMed Ismail Bennani public: 2635653324SMed Ismail Bennani ScriptedProcessPythonInterface(ScriptInterpreterPythonImpl &interpreter); 2735653324SMed Ismail Bennani 2835653324SMed Ismail Bennani llvm::Expected<StructuredData::GenericSP> 2935653324SMed Ismail Bennani CreatePluginObject(const llvm::StringRef class_name, 3035653324SMed Ismail Bennani ExecutionContext &exe_ctx, 3135653324SMed Ismail Bennani StructuredData::DictionarySP args_sp, 3235653324SMed Ismail Bennani StructuredData::Generic *script_obj = nullptr) override; 3335653324SMed Ismail Bennani 34*21026073SMed Ismail Bennani llvm::SmallVector<AbstractMethodRequirement> 35*21026073SMed Ismail Bennani GetAbstractMethodRequirements() const override { 36*21026073SMed Ismail Bennani return llvm::SmallVector<AbstractMethodRequirement>( 37*21026073SMed Ismail Bennani {{"read_memory_at_address", 4}, 38*21026073SMed Ismail Bennani {"is_alive"}, 39*21026073SMed Ismail Bennani {"get_scripted_thread_plugin"}}); 4035653324SMed Ismail Bennani } 4135653324SMed Ismail Bennani 4235653324SMed Ismail Bennani StructuredData::DictionarySP GetCapabilities() override; 4335653324SMed Ismail Bennani 4435653324SMed Ismail Bennani Status Attach(const ProcessAttachInfo &attach_info) override; 4535653324SMed Ismail Bennani 4635653324SMed Ismail Bennani Status Launch() override; 4735653324SMed Ismail Bennani 4835653324SMed Ismail Bennani Status Resume() override; 4935653324SMed Ismail Bennani 5035653324SMed Ismail Bennani std::optional<MemoryRegionInfo> 5135653324SMed Ismail Bennani GetMemoryRegionContainingAddress(lldb::addr_t address, 5235653324SMed Ismail Bennani Status &error) override; 5335653324SMed Ismail Bennani 5435653324SMed Ismail Bennani StructuredData::DictionarySP GetThreadsInfo() override; 5535653324SMed Ismail Bennani 5635653324SMed Ismail Bennani bool CreateBreakpoint(lldb::addr_t addr, Status &error) override; 5735653324SMed Ismail Bennani 5835653324SMed Ismail Bennani lldb::DataExtractorSP ReadMemoryAtAddress(lldb::addr_t address, size_t size, 5935653324SMed Ismail Bennani Status &error) override; 6035653324SMed Ismail Bennani 6135653324SMed Ismail Bennani lldb::offset_t WriteMemoryAtAddress(lldb::addr_t addr, 6235653324SMed Ismail Bennani lldb::DataExtractorSP data_sp, 6335653324SMed Ismail Bennani Status &error) override; 6435653324SMed Ismail Bennani 6535653324SMed Ismail Bennani StructuredData::ArraySP GetLoadedImages() override; 6635653324SMed Ismail Bennani 6735653324SMed Ismail Bennani lldb::pid_t GetProcessID() override; 6835653324SMed Ismail Bennani 6935653324SMed Ismail Bennani bool IsAlive() override; 7035653324SMed Ismail Bennani 7135653324SMed Ismail Bennani std::optional<std::string> GetScriptedThreadPluginName() override; 7235653324SMed Ismail Bennani 7335653324SMed Ismail Bennani StructuredData::DictionarySP GetMetadata() override; 7435653324SMed Ismail Bennani 7535653324SMed Ismail Bennani static void Initialize(); 7635653324SMed Ismail Bennani 7735653324SMed Ismail Bennani static void Terminate(); 7835653324SMed Ismail Bennani 7935653324SMed Ismail Bennani static llvm::StringRef GetPluginNameStatic() { 8035653324SMed Ismail Bennani return "ScriptedProcessPythonInterface"; 8135653324SMed Ismail Bennani } 8235653324SMed Ismail Bennani 8335653324SMed Ismail Bennani llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 8435653324SMed Ismail Bennani 8535653324SMed Ismail Bennani private: 8635653324SMed Ismail Bennani lldb::ScriptedThreadInterfaceSP CreateScriptedThreadInterface() override; 8735653324SMed Ismail Bennani }; 8835653324SMed Ismail Bennani } // namespace lldb_private 8935653324SMed Ismail Bennani 9035653324SMed Ismail Bennani #endif // LLDB_ENABLE_PYTHON 9135653324SMed Ismail Bennani #endif // LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_SCRIPTEDPROCESSPYTHONINTERFACE_H 92