Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Process/scripted/ScriptedProcess.h
39644 views
//===-- ScriptedProcess.h ------------------------------------- -*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H9#define LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H1011#include "lldb/Target/Process.h"12#include "lldb/Utility/ConstString.h"13#include "lldb/Utility/ScriptedMetadata.h"14#include "lldb/Utility/State.h"15#include "lldb/Utility/Status.h"1617#include "ScriptedThread.h"1819#include <mutex>2021namespace lldb_private {22class ScriptedProcess : public Process {23public:24static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp,25lldb::ListenerSP listener_sp,26const FileSpec *crash_file_path,27bool can_connect);2829static void Initialize();3031static void Terminate();3233static llvm::StringRef GetPluginNameStatic() { return "ScriptedProcess"; }3435static llvm::StringRef GetPluginDescriptionStatic();3637~ScriptedProcess() override;3839bool CanDebug(lldb::TargetSP target_sp,40bool plugin_specified_by_name) override;4142DynamicLoader *GetDynamicLoader() override { return nullptr; }4344llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }4546Status DoLoadCore() override;4748Status DoLaunch(Module *exe_module, ProcessLaunchInfo &launch_info) override;4950void DidLaunch() override;5152void DidResume() override;5354Status DoResume() override;5556Status DoAttachToProcessWithID(lldb::pid_t pid,57const ProcessAttachInfo &attach_info) override;5859Status60DoAttachToProcessWithName(const char *process_name,61const ProcessAttachInfo &attach_info) override;6263void DidAttach(ArchSpec &process_arch) override;6465Status DoDestroy() override;6667void RefreshStateAfterStop() override;6869bool IsAlive() override;7071size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,72Status &error) override;7374size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size,75Status &error) override;7677Status EnableBreakpointSite(BreakpointSite *bp_site) override;7879ArchSpec GetArchitecture();8081Status82GetMemoryRegions(lldb_private::MemoryRegionInfos ®ion_list) override;8384bool GetProcessInfo(ProcessInstanceInfo &info) override;8586lldb_private::StructuredData::ObjectSP87GetLoadedDynamicLibrariesInfos() override;8889lldb_private::StructuredData::DictionarySP GetMetadata() override;9091void UpdateQueueListIfNeeded() override;9293void *GetImplementation() override;9495void ForceScriptedState(lldb::StateType state) override {96// If we're about to stop, we should fetch the loaded dynamic libraries97// dictionary before emitting the private stop event to avoid having the98// module loading happen while the process state is changing.99if (StateIsStoppedState(state, true))100GetLoadedDynamicLibrariesInfos();101SetPrivateState(state);102}103104protected:105ScriptedProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp,106const ScriptedMetadata &scripted_metadata, Status &error);107108void Clear();109110bool DoUpdateThreadList(ThreadList &old_thread_list,111ThreadList &new_thread_list) override;112113Status DoGetMemoryRegionInfo(lldb::addr_t load_addr,114MemoryRegionInfo &range_info) override;115116Status DoAttach(const ProcessAttachInfo &attach_info);117118private:119friend class ScriptedThread;120121inline void CheckScriptedInterface() const {122lldbassert(m_interface_up && "Invalid scripted process interface.");123}124125ScriptedProcessInterface &GetInterface() const;126static bool IsScriptLanguageSupported(lldb::ScriptLanguage language);127128// Member variables.129const ScriptedMetadata m_scripted_metadata;130lldb::ScriptedProcessInterfaceUP m_interface_up;131};132133} // namespace lldb_private134135#endif // LLDB_SOURCE_PLUGINS_SCRIPTED_PROCESS_H136137138