| //===-- ScriptedPlatformPythonInterface.cpp -------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "../lldb-python.h" |
| |
| #include "lldb/Core/PluginManager.h" |
| #include "lldb/Target/ExecutionContext.h" |
| #include "lldb/Utility/Log.h" |
| #include "lldb/Utility/Status.h" |
| #include "lldb/lldb-enumerations.h" |
| |
| #include "../SWIGPythonBridge.h" |
| #include "../ScriptInterpreterPythonImpl.h" |
| #include "ScriptedPlatformPythonInterface.h" |
| |
| using namespace lldb; |
| using namespace lldb_private; |
| using namespace lldb_private::python; |
| using Locker = ScriptInterpreterPythonImpl::Locker; |
| |
| ScriptedPlatformPythonInterface::ScriptedPlatformPythonInterface( |
| ScriptInterpreterPythonImpl &interpreter) |
| : ScriptedPlatformInterface(), ScriptedPythonInterface(interpreter) {} |
| |
| llvm::Expected<StructuredData::GenericSP> |
| ScriptedPlatformPythonInterface::CreatePluginObject( |
| llvm::StringRef class_name, ExecutionContext &exe_ctx, |
| StructuredData::DictionarySP args_sp, StructuredData::Generic *script_obj) { |
| ExecutionContextRefSP exe_ctx_ref_sp = |
| std::make_shared<ExecutionContextRef>(exe_ctx); |
| ScriptedMetadata scripted_metadata(class_name, args_sp); |
| return ScriptedPythonInterface::CreatePluginObject( |
| scripted_metadata, script_obj, exe_ctx_ref_sp, args_sp); |
| } |
| |
| StructuredData::DictionarySP ScriptedPlatformPythonInterface::ListProcesses() { |
| StructuredData::DictionarySP dict_sp = |
| LogAndDefault(Dispatch<StructuredData::DictionarySP>("list_processes"), |
| LLVM_PRETTY_FUNCTION); |
| if (!dict_sp || !dict_sp->IsValid()) |
| return {}; |
| |
| return dict_sp; |
| } |
| |
| StructuredData::DictionarySP |
| ScriptedPlatformPythonInterface::GetProcessInfo(lldb::pid_t pid) { |
| StructuredData::DictionarySP dict_sp = LogAndDefault( |
| Dispatch<StructuredData::DictionarySP>("get_process_info", pid), |
| LLVM_PRETTY_FUNCTION); |
| if (!dict_sp || !dict_sp->IsValid()) |
| return {}; |
| |
| return dict_sp; |
| } |
| |
| Status ScriptedPlatformPythonInterface::AttachToProcess( |
| ProcessAttachInfoSP attach_info) { |
| // FIXME: Pass `attach_info` to method call |
| return GetStatusFromMethod("attach_to_process"); |
| } |
| |
| Status ScriptedPlatformPythonInterface::LaunchProcess( |
| ProcessLaunchInfoSP launch_info) { |
| // FIXME: Pass `launch_info` to method call |
| return GetStatusFromMethod("launch_process"); |
| } |
| |
| Status ScriptedPlatformPythonInterface::KillProcess(lldb::pid_t pid) { |
| return GetStatusFromMethod("kill_process", pid); |
| } |
| |
| void ScriptedPlatformPythonInterface::Initialize() { |
| PluginManager::RegisterPlugin( |
| GetPluginNameStatic(), "Mock platform and interact with its processes.", |
| CreateInstance, eScriptedExtensionScriptedPlatform, eScriptLanguagePython, |
| {}); |
| } |
| |
| void ScriptedPlatformPythonInterface::Terminate() { |
| PluginManager::UnregisterPlugin(CreateInstance); |
| } |