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