1 //===-- ScriptedPlatformPythonInterface.cpp -------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include "lldb/Host/Config.h"
10 #include "lldb/Utility/Log.h"
11 #include "lldb/Utility/Status.h"
12 #include "lldb/lldb-enumerations.h"
13
14 #if LLDB_ENABLE_PYTHON
15
16 // LLDB Python header must be included first
17 #include "../lldb-python.h"
18
19 #include "../SWIGPythonBridge.h"
20 #include "../ScriptInterpreterPythonImpl.h"
21 #include "ScriptedPlatformPythonInterface.h"
22
23 #include "lldb/Target/ExecutionContext.h"
24
25 using namespace lldb;
26 using namespace lldb_private;
27 using namespace lldb_private::python;
28 using Locker = ScriptInterpreterPythonImpl::Locker;
29
ScriptedPlatformPythonInterface(ScriptInterpreterPythonImpl & interpreter)30 ScriptedPlatformPythonInterface::ScriptedPlatformPythonInterface(
31 ScriptInterpreterPythonImpl &interpreter)
32 : ScriptedPlatformInterface(), ScriptedPythonInterface(interpreter) {}
33
34 llvm::Expected<StructuredData::GenericSP>
CreatePluginObject(llvm::StringRef class_name,ExecutionContext & exe_ctx,StructuredData::DictionarySP args_sp,StructuredData::Generic * script_obj)35 ScriptedPlatformPythonInterface::CreatePluginObject(
36 llvm::StringRef class_name, ExecutionContext &exe_ctx,
37 StructuredData::DictionarySP args_sp, StructuredData::Generic *script_obj) {
38 ExecutionContextRefSP exe_ctx_ref_sp =
39 std::make_shared<ExecutionContextRef>(exe_ctx);
40 StructuredDataImpl sd_impl(args_sp);
41 return ScriptedPythonInterface::CreatePluginObject(class_name, script_obj,
42 exe_ctx_ref_sp, sd_impl);
43 }
44
ListProcesses()45 StructuredData::DictionarySP ScriptedPlatformPythonInterface::ListProcesses() {
46 Status error;
47 StructuredData::DictionarySP dict_sp =
48 Dispatch<StructuredData::DictionarySP>("list_processes", error);
49
50 if (!dict_sp || !dict_sp->IsValid() || error.Fail()) {
51 return ScriptedInterface::ErrorWithMessage<StructuredData::DictionarySP>(
52 LLVM_PRETTY_FUNCTION,
53 llvm::Twine("Null or invalid object (" +
54 llvm::Twine(error.AsCString()) + llvm::Twine(")."))
55 .str(),
56 error);
57 }
58
59 return dict_sp;
60 }
61
62 StructuredData::DictionarySP
GetProcessInfo(lldb::pid_t pid)63 ScriptedPlatformPythonInterface::GetProcessInfo(lldb::pid_t pid) {
64 Status error;
65 StructuredData::DictionarySP dict_sp =
66 Dispatch<StructuredData::DictionarySP>("get_process_info", error, pid);
67
68 if (!dict_sp || !dict_sp->IsValid() || error.Fail()) {
69 return ScriptedInterface::ErrorWithMessage<StructuredData::DictionarySP>(
70 LLVM_PRETTY_FUNCTION,
71 llvm::Twine("Null or invalid object (" +
72 llvm::Twine(error.AsCString()) + llvm::Twine(")."))
73 .str(),
74 error);
75 }
76
77 return dict_sp;
78 }
79
AttachToProcess(ProcessAttachInfoSP attach_info)80 Status ScriptedPlatformPythonInterface::AttachToProcess(
81 ProcessAttachInfoSP attach_info) {
82 // FIXME: Pass `attach_info` to method call
83 return GetStatusFromMethod("attach_to_process");
84 }
85
LaunchProcess(ProcessLaunchInfoSP launch_info)86 Status ScriptedPlatformPythonInterface::LaunchProcess(
87 ProcessLaunchInfoSP launch_info) {
88 // FIXME: Pass `launch_info` to method call
89 return GetStatusFromMethod("launch_process");
90 }
91
KillProcess(lldb::pid_t pid)92 Status ScriptedPlatformPythonInterface::KillProcess(lldb::pid_t pid) {
93 return GetStatusFromMethod("kill_process", pid);
94 }
95
96 #endif // LLDB_ENABLE_PYTHON
97