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