1fe6060f1SDimitry Andric //===-- ScriptedProcess.h ------------------------------------- -*- C++ -*-===// 2fe6060f1SDimitry Andric // 3fe6060f1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4fe6060f1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5fe6060f1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6fe6060f1SDimitry Andric // 7fe6060f1SDimitry Andric //===----------------------------------------------------------------------===// 8fe6060f1SDimitry Andric 9fe6060f1SDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H 10fe6060f1SDimitry Andric #define LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H 11fe6060f1SDimitry Andric 12fe6060f1SDimitry Andric #include "lldb/Target/Process.h" 13fe6060f1SDimitry Andric #include "lldb/Utility/ConstString.h" 14fe6060f1SDimitry Andric #include "lldb/Utility/Status.h" 15fe6060f1SDimitry Andric 16349cc55cSDimitry Andric #include "ScriptedThread.h" 17349cc55cSDimitry Andric 18fe6060f1SDimitry Andric #include <mutex> 19fe6060f1SDimitry Andric 20fe6060f1SDimitry Andric namespace lldb_private { 21fe6060f1SDimitry Andric 22fe6060f1SDimitry Andric class ScriptedProcess : public Process { 23fe6060f1SDimitry Andric protected: 24fe6060f1SDimitry Andric class ScriptedProcessInfo { 25fe6060f1SDimitry Andric public: 26fe6060f1SDimitry Andric ScriptedProcessInfo(const ProcessLaunchInfo &launch_info) { 27fe6060f1SDimitry Andric m_class_name = launch_info.GetScriptedProcessClassName(); 28349cc55cSDimitry Andric m_args_sp = launch_info.GetScriptedProcessDictionarySP(); 29fe6060f1SDimitry Andric } 30fe6060f1SDimitry Andric 31fe6060f1SDimitry Andric std::string GetClassName() const { return m_class_name; } 32349cc55cSDimitry Andric StructuredData::DictionarySP GetArgsSP() const { return m_args_sp; } 33fe6060f1SDimitry Andric 34fe6060f1SDimitry Andric private: 35fe6060f1SDimitry Andric std::string m_class_name; 36349cc55cSDimitry Andric StructuredData::DictionarySP m_args_sp; 37fe6060f1SDimitry Andric }; 38fe6060f1SDimitry Andric 39fe6060f1SDimitry Andric public: 40fe6060f1SDimitry Andric static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp, 41fe6060f1SDimitry Andric lldb::ListenerSP listener_sp, 42fe6060f1SDimitry Andric const FileSpec *crash_file_path, 43fe6060f1SDimitry Andric bool can_connect); 44fe6060f1SDimitry Andric 45fe6060f1SDimitry Andric static void Initialize(); 46fe6060f1SDimitry Andric 47fe6060f1SDimitry Andric static void Terminate(); 48fe6060f1SDimitry Andric 49349cc55cSDimitry Andric static llvm::StringRef GetPluginNameStatic() { return "ScriptedProcess"; } 50fe6060f1SDimitry Andric 51349cc55cSDimitry Andric static llvm::StringRef GetPluginDescriptionStatic(); 52fe6060f1SDimitry Andric 53fe6060f1SDimitry Andric ScriptedProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, 54fe6060f1SDimitry Andric const ScriptedProcess::ScriptedProcessInfo &launch_info, 55fe6060f1SDimitry Andric Status &error); 56fe6060f1SDimitry Andric 57fe6060f1SDimitry Andric ~ScriptedProcess() override; 58fe6060f1SDimitry Andric 59fe6060f1SDimitry Andric bool CanDebug(lldb::TargetSP target_sp, 60fe6060f1SDimitry Andric bool plugin_specified_by_name) override; 61fe6060f1SDimitry Andric 62fe6060f1SDimitry Andric DynamicLoader *GetDynamicLoader() override { return nullptr; } 63fe6060f1SDimitry Andric 64349cc55cSDimitry Andric llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 65fe6060f1SDimitry Andric 66fe6060f1SDimitry Andric SystemRuntime *GetSystemRuntime() override { return nullptr; } 67fe6060f1SDimitry Andric 68fe6060f1SDimitry Andric Status DoLoadCore() override; 69fe6060f1SDimitry Andric 70fe6060f1SDimitry Andric Status DoLaunch(Module *exe_module, ProcessLaunchInfo &launch_info) override; 71fe6060f1SDimitry Andric 72fe6060f1SDimitry Andric void DidLaunch() override; 73fe6060f1SDimitry Andric 74fe6060f1SDimitry Andric Status DoResume() override; 75fe6060f1SDimitry Andric 76fe6060f1SDimitry Andric Status DoDestroy() override; 77fe6060f1SDimitry Andric 78349cc55cSDimitry Andric void RefreshStateAfterStop() override; 79fe6060f1SDimitry Andric 80fe6060f1SDimitry Andric bool IsAlive() override; 81fe6060f1SDimitry Andric 82fe6060f1SDimitry Andric size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, 83fe6060f1SDimitry Andric Status &error) override; 84fe6060f1SDimitry Andric 85fe6060f1SDimitry Andric ArchSpec GetArchitecture(); 86fe6060f1SDimitry Andric 87fe6060f1SDimitry Andric Status 88fe6060f1SDimitry Andric GetMemoryRegions(lldb_private::MemoryRegionInfos ®ion_list) override; 89fe6060f1SDimitry Andric 90fe6060f1SDimitry Andric bool GetProcessInfo(ProcessInstanceInfo &info) override; 91fe6060f1SDimitry Andric 92*81ad6265SDimitry Andric lldb_private::StructuredData::ObjectSP 93*81ad6265SDimitry Andric GetLoadedDynamicLibrariesInfos() override; 94*81ad6265SDimitry Andric 95fe6060f1SDimitry Andric protected: 96fe6060f1SDimitry Andric Status DoStop(); 97fe6060f1SDimitry Andric 98fe6060f1SDimitry Andric void Clear(); 99fe6060f1SDimitry Andric 100fe6060f1SDimitry Andric bool DoUpdateThreadList(ThreadList &old_thread_list, 101fe6060f1SDimitry Andric ThreadList &new_thread_list) override; 102fe6060f1SDimitry Andric 103d56accc7SDimitry Andric Status DoGetMemoryRegionInfo(lldb::addr_t load_addr, 104d56accc7SDimitry Andric MemoryRegionInfo &range_info) override; 105d56accc7SDimitry Andric 106fe6060f1SDimitry Andric private: 107349cc55cSDimitry Andric friend class ScriptedThread; 108349cc55cSDimitry Andric 109fe6060f1SDimitry Andric void CheckInterpreterAndScriptObject() const; 110fe6060f1SDimitry Andric ScriptedProcessInterface &GetInterface() const; 111fe6060f1SDimitry Andric static bool IsScriptLanguageSupported(lldb::ScriptLanguage language); 112fe6060f1SDimitry Andric 113fe6060f1SDimitry Andric // Member variables. 114fe6060f1SDimitry Andric const ScriptedProcessInfo m_scripted_process_info; 115fe6060f1SDimitry Andric lldb_private::ScriptInterpreter *m_interpreter = nullptr; 116fe6060f1SDimitry Andric lldb_private::StructuredData::ObjectSP m_script_object_sp = nullptr; 117fe6060f1SDimitry Andric //@} 118fe6060f1SDimitry Andric }; 119fe6060f1SDimitry Andric 120fe6060f1SDimitry Andric } // namespace lldb_private 121fe6060f1SDimitry Andric 122fe6060f1SDimitry Andric #endif // LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H 123