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