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