Index: lldb/examples/python/scripted_process/scripted_process.py =================================================================== --- lldb/examples/python/scripted_process/scripted_process.py +++ lldb/examples/python/scripted_process/scripted_process.py @@ -14,6 +14,7 @@ THE METHODS EXPOSED MIGHT CHANGE IN THE FUTURE. """ + capabilities = None memory_regions = None loaded_images = None threads = None @@ -45,6 +46,11 @@ self.threads = {} self.loaded_images = [] self.metadata = {} + self.capabilities = {} + + @abstractmethod + def get_capabilities(self): + return self.capabilities @abstractmethod def get_memory_region_containing_address(self, addr): Index: lldb/include/lldb/Interpreter/ScriptedProcessInterface.h =================================================================== --- lldb/include/lldb/Interpreter/ScriptedProcessInterface.h +++ lldb/include/lldb/Interpreter/ScriptedProcessInterface.h @@ -28,6 +28,8 @@ return {}; } + virtual StructuredData::ArraySP GetCapabilities() { return {}; } + virtual Status Launch() { return Status("ScriptedProcess did not launch"); } virtual Status Resume() { return Status("ScriptedProcess did not resume"); } Index: lldb/source/Plugins/ScriptInterpreter/Python/ScriptedProcessPythonInterface.h =================================================================== --- lldb/source/Plugins/ScriptInterpreter/Python/ScriptedProcessPythonInterface.h +++ lldb/source/Plugins/ScriptInterpreter/Python/ScriptedProcessPythonInterface.h @@ -29,6 +29,8 @@ StructuredData::DictionarySP args_sp, StructuredData::Generic *script_obj = nullptr) override; + StructuredData::ArraySP GetCapabilities() override; + Status Launch() override; Status Resume() override; Index: lldb/source/Plugins/ScriptInterpreter/Python/ScriptedProcessPythonInterface.cpp =================================================================== --- lldb/source/Plugins/ScriptInterpreter/Python/ScriptedProcessPythonInterface.cpp +++ lldb/source/Plugins/ScriptInterpreter/Python/ScriptedProcessPythonInterface.cpp @@ -56,6 +56,23 @@ return m_object_instance_sp; } +StructuredData::ArraySP ScriptedProcessPythonInterface::GetCapabilities() { + Status error; + StructuredData::ArraySP array = + Dispatch("get_capabilities", error); + + if (!array || !array->IsValid() || error.Fail()) { + return ScriptedInterface::ErrorWithMessage( + LLVM_PRETTY_FUNCTION, + llvm::Twine("Null or invalid object (" + + llvm::Twine(error.AsCString()) + llvm::Twine(").")) + .str(), + error); + } + + return array; +} + Status ScriptedProcessPythonInterface::Launch() { return GetStatusFromMethod("launch"); }