1312b43daSMed Ismail Bennani //===-- ScriptedProcess.h ------------------------------------- -*- C++ -*-===// 2312b43daSMed Ismail Bennani // 3312b43daSMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4312b43daSMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information. 5312b43daSMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6312b43daSMed Ismail Bennani // 7312b43daSMed Ismail Bennani //===----------------------------------------------------------------------===// 8312b43daSMed Ismail Bennani 9312b43daSMed Ismail Bennani #ifndef LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H 10312b43daSMed Ismail Bennani #define LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H 11312b43daSMed Ismail Bennani 12312b43daSMed Ismail Bennani #include "lldb/Target/Process.h" 13312b43daSMed Ismail Bennani #include "lldb/Utility/ConstString.h" 14312b43daSMed Ismail Bennani #include "lldb/Utility/Status.h" 15312b43daSMed Ismail Bennani 1659d8dd79SMed Ismail Bennani #include "ScriptedThread.h" 1759d8dd79SMed Ismail Bennani 18312b43daSMed Ismail Bennani #include <mutex> 19312b43daSMed Ismail Bennani 20312b43daSMed Ismail Bennani namespace lldb_private { 21312b43daSMed Ismail Bennani 22312b43daSMed Ismail Bennani class ScriptedProcess : public Process { 23312b43daSMed Ismail Bennani protected: 24312b43daSMed Ismail Bennani class ScriptedProcessInfo { 25312b43daSMed Ismail Bennani public: 26312b43daSMed Ismail Bennani ScriptedProcessInfo(const ProcessLaunchInfo &launch_info) { 27312b43daSMed Ismail Bennani m_class_name = launch_info.GetScriptedProcessClassName(); 28312b43daSMed Ismail Bennani m_dictionary_sp = launch_info.GetScriptedProcessDictionarySP(); 29312b43daSMed Ismail Bennani } 30312b43daSMed Ismail Bennani 31312b43daSMed Ismail Bennani std::string GetClassName() const { return m_class_name; } 32312b43daSMed Ismail Bennani StructuredData::DictionarySP GetDictionarySP() const { 33312b43daSMed Ismail Bennani return m_dictionary_sp; 34312b43daSMed Ismail Bennani } 35312b43daSMed Ismail Bennani 36312b43daSMed Ismail Bennani private: 37312b43daSMed Ismail Bennani std::string m_class_name; 38312b43daSMed Ismail Bennani StructuredData::DictionarySP m_dictionary_sp; 39312b43daSMed Ismail Bennani }; 40312b43daSMed Ismail Bennani 41312b43daSMed Ismail Bennani public: 42312b43daSMed Ismail Bennani static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp, 43312b43daSMed Ismail Bennani lldb::ListenerSP listener_sp, 44312b43daSMed Ismail Bennani const FileSpec *crash_file_path, 45312b43daSMed Ismail Bennani bool can_connect); 46312b43daSMed Ismail Bennani 47312b43daSMed Ismail Bennani static void Initialize(); 48312b43daSMed Ismail Bennani 49312b43daSMed Ismail Bennani static void Terminate(); 50312b43daSMed Ismail Bennani 515f4980f0SPavel Labath static llvm::StringRef GetPluginNameStatic() { return "ScriptedProcess"; } 52312b43daSMed Ismail Bennani 535f4980f0SPavel Labath static llvm::StringRef GetPluginDescriptionStatic(); 54312b43daSMed Ismail Bennani 55312b43daSMed Ismail Bennani ScriptedProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, 56312b43daSMed Ismail Bennani const ScriptedProcess::ScriptedProcessInfo &launch_info, 57312b43daSMed Ismail Bennani Status &error); 58312b43daSMed Ismail Bennani 59312b43daSMed Ismail Bennani ~ScriptedProcess() override; 60312b43daSMed Ismail Bennani 61312b43daSMed Ismail Bennani bool CanDebug(lldb::TargetSP target_sp, 62312b43daSMed Ismail Bennani bool plugin_specified_by_name) override; 63312b43daSMed Ismail Bennani 64312b43daSMed Ismail Bennani DynamicLoader *GetDynamicLoader() override { return nullptr; } 65312b43daSMed Ismail Bennani 665f4980f0SPavel Labath llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 67312b43daSMed Ismail Bennani 68312b43daSMed Ismail Bennani SystemRuntime *GetSystemRuntime() override { return nullptr; } 69312b43daSMed Ismail Bennani 70312b43daSMed Ismail Bennani Status DoLoadCore() override; 71312b43daSMed Ismail Bennani 72312b43daSMed Ismail Bennani Status DoLaunch(Module *exe_module, ProcessLaunchInfo &launch_info) override; 73312b43daSMed Ismail Bennani 74312b43daSMed Ismail Bennani void DidLaunch() override; 75312b43daSMed Ismail Bennani 76312b43daSMed Ismail Bennani Status DoResume() override; 77312b43daSMed Ismail Bennani 78312b43daSMed Ismail Bennani Status DoDestroy() override; 79312b43daSMed Ismail Bennani 80312b43daSMed Ismail Bennani void RefreshStateAfterStop() override{}; 81312b43daSMed Ismail Bennani 82312b43daSMed Ismail Bennani bool IsAlive() override; 83312b43daSMed Ismail Bennani 84312b43daSMed Ismail Bennani size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, 85312b43daSMed Ismail Bennani Status &error) override; 86312b43daSMed Ismail Bennani 87312b43daSMed Ismail Bennani ArchSpec GetArchitecture(); 88312b43daSMed Ismail Bennani 89312b43daSMed Ismail Bennani Status 90312b43daSMed Ismail Bennani GetMemoryRegions(lldb_private::MemoryRegionInfos ®ion_list) override; 91312b43daSMed Ismail Bennani 92312b43daSMed Ismail Bennani bool GetProcessInfo(ProcessInstanceInfo &info) override; 93312b43daSMed Ismail Bennani 94312b43daSMed Ismail Bennani protected: 95312b43daSMed Ismail Bennani Status DoStop(); 96312b43daSMed Ismail Bennani 97312b43daSMed Ismail Bennani void Clear(); 98312b43daSMed Ismail Bennani 99312b43daSMed Ismail Bennani bool DoUpdateThreadList(ThreadList &old_thread_list, 100312b43daSMed Ismail Bennani ThreadList &new_thread_list) override; 101312b43daSMed Ismail Bennani 102*fac3f20dSDavid Spickett Status DoGetMemoryRegionInfo(lldb::addr_t load_addr, 103*fac3f20dSDavid Spickett MemoryRegionInfo &range_info) override; 104*fac3f20dSDavid Spickett 105312b43daSMed Ismail Bennani private: 10659d8dd79SMed Ismail Bennani friend class ScriptedThread; 10759d8dd79SMed Ismail Bennani 108312b43daSMed Ismail Bennani void CheckInterpreterAndScriptObject() const; 109312b43daSMed Ismail Bennani ScriptedProcessInterface &GetInterface() const; 110312b43daSMed Ismail Bennani static bool IsScriptLanguageSupported(lldb::ScriptLanguage language); 111312b43daSMed Ismail Bennani 112312b43daSMed Ismail Bennani // Member variables. 113312b43daSMed Ismail Bennani const ScriptedProcessInfo m_scripted_process_info; 114312b43daSMed Ismail Bennani lldb_private::ScriptInterpreter *m_interpreter = nullptr; 115312b43daSMed Ismail Bennani lldb_private::StructuredData::ObjectSP m_script_object_sp = nullptr; 116312b43daSMed Ismail Bennani //@} 117312b43daSMed Ismail Bennani }; 118312b43daSMed Ismail Bennani 119312b43daSMed Ismail Bennani } // namespace lldb_private 120312b43daSMed Ismail Bennani 121312b43daSMed Ismail Bennani #endif // LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H 122