brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 8ebe4ca Raw
137 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H10#define LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H11 12#include "lldb/Target/Process.h"13#include "lldb/Utility/ConstString.h"14#include "lldb/Utility/ScriptedMetadata.h"15#include "lldb/Utility/State.h"16#include "lldb/Utility/Status.h"17 18#include "ScriptedThread.h"19 20#include <mutex>21 22namespace lldb_private {23class ScriptedProcess : public Process {24public:25  static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp,26                                        lldb::ListenerSP listener_sp,27                                        const FileSpec *crash_file_path,28                                        bool can_connect);29 30  static void Initialize();31 32  static void Terminate();33 34  static llvm::StringRef GetPluginNameStatic() { return "ScriptedProcess"; }35 36  static llvm::StringRef GetPluginDescriptionStatic();37 38  ~ScriptedProcess() override;39 40  bool CanDebug(lldb::TargetSP target_sp,41                bool plugin_specified_by_name) override;42 43  DynamicLoader *GetDynamicLoader() override { return nullptr; }44 45  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }46 47  Status DoLoadCore() override;48 49  Status DoLaunch(Module *exe_module, ProcessLaunchInfo &launch_info) override;50 51  void DidLaunch() override;52 53  void DidResume() override;54 55  Status DoResume(lldb::RunDirection direction) override;56 57  Status DoAttachToProcessWithID(lldb::pid_t pid,58                                 const ProcessAttachInfo &attach_info) override;59 60  Status61  DoAttachToProcessWithName(const char *process_name,62                            const ProcessAttachInfo &attach_info) override;63 64  void DidAttach(ArchSpec &process_arch) override;65 66  Status DoDestroy() override;67 68  void RefreshStateAfterStop() override;69 70  bool IsAlive() override;71 72  size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,73                      Status &error) override;74 75  size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size,76                       Status &error) override;77 78  Status EnableBreakpointSite(BreakpointSite *bp_site) override;79 80  ArchSpec GetArchitecture();81 82  Status83  GetMemoryRegions(lldb_private::MemoryRegionInfos &region_list) override;84 85  bool GetProcessInfo(ProcessInstanceInfo &info) override;86 87  lldb_private::StructuredData::ObjectSP88  GetLoadedDynamicLibrariesInfos() override;89 90  lldb_private::StructuredData::DictionarySP GetMetadata() override;91 92  void UpdateQueueListIfNeeded() override;93 94  void *GetImplementation() override;95 96  void ForceScriptedState(lldb::StateType state) override {97    // If we're about to stop, we should fetch the loaded dynamic libraries98    // dictionary before emitting the private stop event to avoid having the99    // module loading happen while the process state is changing.100    if (StateIsStoppedState(state, true))101      GetLoadedDynamicLibrariesInfos();102    SetPrivateState(state);103  }104 105protected:106  ScriptedProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp,107                  const ScriptedMetadata &scripted_metadata, Status &error);108 109  void Clear();110 111  bool DoUpdateThreadList(ThreadList &old_thread_list,112                          ThreadList &new_thread_list) override;113 114  Status DoGetMemoryRegionInfo(lldb::addr_t load_addr,115                               MemoryRegionInfo &range_info) override;116 117  Status DoAttach(const ProcessAttachInfo &attach_info);118 119private:120  friend class ScriptedThread;121 122  inline void CheckScriptedInterface() const {123    lldbassert(m_interface_up && "Invalid scripted process interface.");124  }125 126  ScriptedProcessInterface &GetInterface() const;127  static bool IsScriptLanguageSupported(lldb::ScriptLanguage language);128 129  // Member variables.130  const ScriptedMetadata m_scripted_metadata;131  lldb::ScriptedProcessInterfaceUP m_interface_up;132};133 134} // namespace lldb_private135 136#endif // LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H137