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: ScriptedProcessInfo(const ProcessLaunchInfo & launch_info)26312b43daSMed Ismail Bennani ScriptedProcessInfo(const ProcessLaunchInfo &launch_info) { 27312b43daSMed Ismail Bennani m_class_name = launch_info.GetScriptedProcessClassName(); 28ad0f7d3dSMed Ismail Bennani m_args_sp = launch_info.GetScriptedProcessDictionarySP(); 29312b43daSMed Ismail Bennani } 30312b43daSMed Ismail Bennani GetClassName()31312b43daSMed Ismail Bennani std::string GetClassName() const { return m_class_name; } GetArgsSP()32ad0f7d3dSMed Ismail Bennani StructuredData::DictionarySP GetArgsSP() const { return m_args_sp; } 33312b43daSMed Ismail Bennani 34312b43daSMed Ismail Bennani private: 35312b43daSMed Ismail Bennani std::string m_class_name; 36ad0f7d3dSMed Ismail Bennani StructuredData::DictionarySP m_args_sp; 37312b43daSMed Ismail Bennani }; 38312b43daSMed Ismail Bennani 39312b43daSMed Ismail Bennani public: 40312b43daSMed Ismail Bennani static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp, 41312b43daSMed Ismail Bennani lldb::ListenerSP listener_sp, 42312b43daSMed Ismail Bennani const FileSpec *crash_file_path, 43312b43daSMed Ismail Bennani bool can_connect); 44312b43daSMed Ismail Bennani 45312b43daSMed Ismail Bennani static void Initialize(); 46312b43daSMed Ismail Bennani 47312b43daSMed Ismail Bennani static void Terminate(); 48312b43daSMed Ismail Bennani GetPluginNameStatic()495f4980f0SPavel Labath static llvm::StringRef GetPluginNameStatic() { return "ScriptedProcess"; } 50312b43daSMed Ismail Bennani 515f4980f0SPavel Labath static llvm::StringRef GetPluginDescriptionStatic(); 52312b43daSMed Ismail Bennani 53312b43daSMed Ismail Bennani ScriptedProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, 54312b43daSMed Ismail Bennani const ScriptedProcess::ScriptedProcessInfo &launch_info, 55312b43daSMed Ismail Bennani Status &error); 56312b43daSMed Ismail Bennani 57312b43daSMed Ismail Bennani ~ScriptedProcess() override; 58312b43daSMed Ismail Bennani 59312b43daSMed Ismail Bennani bool CanDebug(lldb::TargetSP target_sp, 60312b43daSMed Ismail Bennani bool plugin_specified_by_name) override; 61312b43daSMed Ismail Bennani GetDynamicLoader()62312b43daSMed Ismail Bennani DynamicLoader *GetDynamicLoader() override { return nullptr; } 63312b43daSMed Ismail Bennani GetPluginName()645f4980f0SPavel Labath llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 65312b43daSMed Ismail Bennani GetSystemRuntime()66312b43daSMed Ismail Bennani SystemRuntime *GetSystemRuntime() override { return nullptr; } 67312b43daSMed Ismail Bennani 68312b43daSMed Ismail Bennani Status DoLoadCore() override; 69312b43daSMed Ismail Bennani 70312b43daSMed Ismail Bennani Status DoLaunch(Module *exe_module, ProcessLaunchInfo &launch_info) override; 71312b43daSMed Ismail Bennani 72312b43daSMed Ismail Bennani void DidLaunch() override; 73312b43daSMed Ismail Bennani 74312b43daSMed Ismail Bennani Status DoResume() override; 75312b43daSMed Ismail Bennani 76312b43daSMed Ismail Bennani Status DoDestroy() override; 77312b43daSMed Ismail Bennani 78676576b6SMed Ismail Bennani void RefreshStateAfterStop() override; 79312b43daSMed Ismail Bennani 80312b43daSMed Ismail Bennani bool IsAlive() override; 81312b43daSMed Ismail Bennani 82312b43daSMed Ismail Bennani size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, 83312b43daSMed Ismail Bennani Status &error) override; 84312b43daSMed Ismail Bennani 85312b43daSMed Ismail Bennani ArchSpec GetArchitecture(); 86312b43daSMed Ismail Bennani 87312b43daSMed Ismail Bennani Status 88312b43daSMed Ismail Bennani GetMemoryRegions(lldb_private::MemoryRegionInfos ®ion_list) override; 89312b43daSMed Ismail Bennani 90312b43daSMed Ismail Bennani bool GetProcessInfo(ProcessInstanceInfo &info) override; 91312b43daSMed Ismail Bennani 92*680ca7f2SMed Ismail Bennani lldb_private::StructuredData::ObjectSP 93*680ca7f2SMed Ismail Bennani GetLoadedDynamicLibrariesInfos() override; 94*680ca7f2SMed Ismail Bennani 95312b43daSMed Ismail Bennani protected: 96312b43daSMed Ismail Bennani Status DoStop(); 97312b43daSMed Ismail Bennani 98312b43daSMed Ismail Bennani void Clear(); 99312b43daSMed Ismail Bennani 100312b43daSMed Ismail Bennani bool DoUpdateThreadList(ThreadList &old_thread_list, 101312b43daSMed Ismail Bennani ThreadList &new_thread_list) override; 102312b43daSMed Ismail Bennani 1032937b282SDavid Spickett Status DoGetMemoryRegionInfo(lldb::addr_t load_addr, 1042937b282SDavid Spickett MemoryRegionInfo &range_info) override; 1052937b282SDavid Spickett 106312b43daSMed Ismail Bennani private: 10759d8dd79SMed Ismail Bennani friend class ScriptedThread; 10859d8dd79SMed Ismail Bennani 109312b43daSMed Ismail Bennani void CheckInterpreterAndScriptObject() const; 110312b43daSMed Ismail Bennani ScriptedProcessInterface &GetInterface() const; 111312b43daSMed Ismail Bennani static bool IsScriptLanguageSupported(lldb::ScriptLanguage language); 112312b43daSMed Ismail Bennani 113312b43daSMed Ismail Bennani // Member variables. 114312b43daSMed Ismail Bennani const ScriptedProcessInfo m_scripted_process_info; 115312b43daSMed Ismail Bennani lldb_private::ScriptInterpreter *m_interpreter = nullptr; 116312b43daSMed Ismail Bennani lldb_private::StructuredData::ObjectSP m_script_object_sp = nullptr; 117312b43daSMed Ismail Bennani //@} 118312b43daSMed Ismail Bennani }; 119312b43daSMed Ismail Bennani 120312b43daSMed Ismail Bennani } // namespace lldb_private 121312b43daSMed Ismail Bennani 122312b43daSMed Ismail Bennani #endif // LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H 123