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 &region_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