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