diff options
Diffstat (limited to 'lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp')
| -rw-r--r-- | lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp | 56 |
1 files changed, 40 insertions, 16 deletions
diff --git a/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp b/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp index cd2d4fe4fd23..58629a5406f6 100644 --- a/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp +++ b/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp @@ -18,7 +18,9 @@ #include "lldb/Interpreter/OptionArgParser.h" #include "lldb/Interpreter/OptionGroupBoolean.h" #include "lldb/Interpreter/ScriptInterpreter.h" +#include "lldb/Interpreter/ScriptedMetadata.h" #include "lldb/Target/MemoryRegionInfo.h" +#include "lldb/Target/Queue.h" #include "lldb/Target/RegisterContext.h" #include "lldb/Utility/LLDBLog.h" #include "lldb/Utility/State.h" @@ -40,7 +42,7 @@ static constexpr lldb::ScriptLanguage g_supported_script_languages[] = { bool ScriptedProcess::IsScriptLanguageSupported(lldb::ScriptLanguage language) { llvm::ArrayRef<lldb::ScriptLanguage> supported_languages = - llvm::makeArrayRef(g_supported_script_languages); + llvm::ArrayRef(g_supported_script_languages); return llvm::is_contained(supported_languages, language); } @@ -58,12 +60,11 @@ lldb::ProcessSP ScriptedProcess::CreateInstance(lldb::TargetSP target_sp, !IsScriptLanguageSupported(target_sp->GetDebugger().GetScriptLanguage())) return nullptr; - Status error; - ScriptedProcess::ScriptedProcessInfo scripted_process_info( - target_sp->GetProcessLaunchInfo()); + ScriptedMetadata scripted_metadata(target_sp->GetProcessLaunchInfo()); - auto process_sp = std::make_shared<ScriptedProcess>( - target_sp, listener_sp, scripted_process_info, error); + Status error; + auto process_sp = std::shared_ptr<ScriptedProcess>( + new ScriptedProcess(target_sp, listener_sp, scripted_metadata, error)); if (error.Fail() || !process_sp || !process_sp->m_script_object_sp || !process_sp->m_script_object_sp->IsValid()) { @@ -79,12 +80,11 @@ bool ScriptedProcess::CanDebug(lldb::TargetSP target_sp, return true; } -ScriptedProcess::ScriptedProcess( - lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, - const ScriptedProcess::ScriptedProcessInfo &scripted_process_info, - Status &error) - : Process(target_sp, listener_sp), - m_scripted_process_info(scripted_process_info) { +ScriptedProcess::ScriptedProcess(lldb::TargetSP target_sp, + lldb::ListenerSP listener_sp, + const ScriptedMetadata &scripted_metadata, + Status &error) + : Process(target_sp, listener_sp), m_scripted_metadata(scripted_metadata) { if (!target_sp) { error.SetErrorStringWithFormat("ScriptedProcess::%s () - ERROR: %s", @@ -104,8 +104,8 @@ ScriptedProcess::ScriptedProcess( ExecutionContext exe_ctx(target_sp, /*get_process=*/false); StructuredData::GenericSP object_sp = GetInterface().CreatePluginObject( - m_scripted_process_info.GetClassName().c_str(), exe_ctx, - m_scripted_process_info.GetArgsSP()); + m_scripted_metadata.GetClassName(), exe_ctx, + m_scripted_metadata.GetArgsSP()); if (!object_sp || !object_sp->IsValid()) { error.SetErrorStringWithFormat("ScriptedProcess::%s () - ERROR: %s", @@ -411,7 +411,7 @@ ScriptedProcess::GetLoadedDynamicLibrariesInfos() { StructuredData::ArraySP loaded_images_sp = GetInterface().GetLoadedImages(); if (!loaded_images_sp || !loaded_images_sp->GetSize()) - return GetInterface().ErrorWithMessage<StructuredData::ObjectSP>( + return ScriptedInterface::ErrorWithMessage<StructuredData::ObjectSP>( LLVM_PRETTY_FUNCTION, "No loaded images.", error); ModuleList module_list; @@ -477,7 +477,7 @@ ScriptedProcess::GetLoadedDynamicLibrariesInfos() { }; if (!loaded_images_sp->ForEach(reload_image)) - return GetInterface().ErrorWithMessage<StructuredData::ObjectSP>( + return ScriptedInterface::ErrorWithMessage<StructuredData::ObjectSP>( LLVM_PRETTY_FUNCTION, "Couldn't reload all images.", error); target.ModulesDidLoad(module_list); @@ -485,6 +485,30 @@ ScriptedProcess::GetLoadedDynamicLibrariesInfos() { return loaded_images_sp; } +lldb_private::StructuredData::DictionarySP ScriptedProcess::GetMetadata() { + CheckInterpreterAndScriptObject(); + + StructuredData::DictionarySP metadata_sp = GetInterface().GetMetadata(); + + Status error; + if (!metadata_sp || !metadata_sp->GetSize()) + return ScriptedInterface::ErrorWithMessage<StructuredData::DictionarySP>( + LLVM_PRETTY_FUNCTION, "No metadata.", error); + + return metadata_sp; +} + +void ScriptedProcess::UpdateQueueListIfNeeded() { + CheckInterpreterAndScriptObject(); + for (ThreadSP thread_sp : Threads()) { + if (const char *queue_name = thread_sp->GetQueueName()) { + QueueSP queue_sp = std::make_shared<Queue>( + m_process->shared_from_this(), thread_sp->GetQueueID(), queue_name); + m_queue_list.AddQueue(queue_sp); + } + } +} + ScriptedProcessInterface &ScriptedProcess::GetInterface() const { return m_interpreter->GetScriptedProcessInterface(); } |
