xref: /llvm-project/lldb/include/lldb/Interpreter/Interfaces/ScriptedProcessInterface.h (revision 0642cd768b80665585c8500bed2933a3b99123dc)
177374d3bSMed Ismail Bennani //===-- ScriptedProcessInterface.h ------------------------------*- C++ -*-===//
277374d3bSMed Ismail Bennani //
377374d3bSMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
477374d3bSMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information.
577374d3bSMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
677374d3bSMed Ismail Bennani //
777374d3bSMed Ismail Bennani //===----------------------------------------------------------------------===//
877374d3bSMed Ismail Bennani 
977374d3bSMed Ismail Bennani #ifndef LLDB_INTERPRETER_INTERFACES_SCRIPTEDPROCESSINTERFACE_H
1077374d3bSMed Ismail Bennani #define LLDB_INTERPRETER_INTERFACES_SCRIPTEDPROCESSINTERFACE_H
1177374d3bSMed Ismail Bennani 
1277374d3bSMed Ismail Bennani #include "ScriptedInterface.h"
1377374d3bSMed Ismail Bennani #include "lldb/Core/StructuredDataImpl.h"
1477374d3bSMed Ismail Bennani #include "lldb/Target/MemoryRegionInfo.h"
1577374d3bSMed Ismail Bennani 
1677374d3bSMed Ismail Bennani #include "lldb/lldb-private.h"
1777374d3bSMed Ismail Bennani 
1877374d3bSMed Ismail Bennani #include <optional>
1977374d3bSMed Ismail Bennani #include <string>
2077374d3bSMed Ismail Bennani 
2177374d3bSMed Ismail Bennani namespace lldb_private {
2277374d3bSMed Ismail Bennani class ScriptedProcessInterface : virtual public ScriptedInterface {
2377374d3bSMed Ismail Bennani public:
24f22d82ceSMed Ismail Bennani   virtual llvm::Expected<StructuredData::GenericSP>
2577374d3bSMed Ismail Bennani   CreatePluginObject(llvm::StringRef class_name, ExecutionContext &exe_ctx,
2677374d3bSMed Ismail Bennani                      StructuredData::DictionarySP args_sp,
2779914122SMed Ismail Bennani                      StructuredData::Generic *script_obj = nullptr) = 0;
2877374d3bSMed Ismail Bennani 
2977374d3bSMed Ismail Bennani   virtual StructuredData::DictionarySP GetCapabilities() { return {}; }
3077374d3bSMed Ismail Bennani 
3177374d3bSMed Ismail Bennani   virtual Status Attach(const ProcessAttachInfo &attach_info) {
32*0642cd76SAdrian Prantl     return Status::FromErrorString("ScriptedProcess did not attach");
3377374d3bSMed Ismail Bennani   }
3477374d3bSMed Ismail Bennani 
35*0642cd76SAdrian Prantl   virtual Status Launch() {
36*0642cd76SAdrian Prantl     return Status::FromErrorString("ScriptedProcess did not launch");
37*0642cd76SAdrian Prantl   }
3877374d3bSMed Ismail Bennani 
39*0642cd76SAdrian Prantl   virtual Status Resume() {
40*0642cd76SAdrian Prantl     return Status::FromErrorString("ScriptedProcess did not resume");
41*0642cd76SAdrian Prantl   }
4277374d3bSMed Ismail Bennani 
4377374d3bSMed Ismail Bennani   virtual std::optional<MemoryRegionInfo>
4477374d3bSMed Ismail Bennani   GetMemoryRegionContainingAddress(lldb::addr_t address, Status &error) {
45*0642cd76SAdrian Prantl     error = Status::FromErrorString("ScriptedProcess have no memory region.");
4677374d3bSMed Ismail Bennani     return {};
4777374d3bSMed Ismail Bennani   }
4877374d3bSMed Ismail Bennani 
4977374d3bSMed Ismail Bennani   virtual StructuredData::DictionarySP GetThreadsInfo() { return {}; }
5077374d3bSMed Ismail Bennani 
5177374d3bSMed Ismail Bennani   virtual bool CreateBreakpoint(lldb::addr_t addr, Status &error) {
52*0642cd76SAdrian Prantl     error = Status::FromErrorString(
53*0642cd76SAdrian Prantl         "ScriptedProcess don't support creating breakpoints.");
5477374d3bSMed Ismail Bennani     return {};
5577374d3bSMed Ismail Bennani   }
5677374d3bSMed Ismail Bennani 
5777374d3bSMed Ismail Bennani   virtual lldb::DataExtractorSP
5877374d3bSMed Ismail Bennani   ReadMemoryAtAddress(lldb::addr_t address, size_t size, Status &error) {
5977374d3bSMed Ismail Bennani     return {};
6077374d3bSMed Ismail Bennani   }
6177374d3bSMed Ismail Bennani 
6277374d3bSMed Ismail Bennani   virtual lldb::offset_t WriteMemoryAtAddress(lldb::addr_t addr,
6377374d3bSMed Ismail Bennani                                               lldb::DataExtractorSP data_sp,
6477374d3bSMed Ismail Bennani                                               Status &error) {
6577374d3bSMed Ismail Bennani     return LLDB_INVALID_OFFSET;
6677374d3bSMed Ismail Bennani   };
6777374d3bSMed Ismail Bennani 
6877374d3bSMed Ismail Bennani   virtual StructuredData::ArraySP GetLoadedImages() { return {}; }
6977374d3bSMed Ismail Bennani 
7077374d3bSMed Ismail Bennani   virtual lldb::pid_t GetProcessID() { return LLDB_INVALID_PROCESS_ID; }
7177374d3bSMed Ismail Bennani 
7277374d3bSMed Ismail Bennani   virtual bool IsAlive() { return true; }
7377374d3bSMed Ismail Bennani 
7477374d3bSMed Ismail Bennani   virtual std::optional<std::string> GetScriptedThreadPluginName() {
7577374d3bSMed Ismail Bennani     return std::nullopt;
7677374d3bSMed Ismail Bennani   }
7777374d3bSMed Ismail Bennani 
7877374d3bSMed Ismail Bennani   virtual StructuredData::DictionarySP GetMetadata() { return {}; }
7977374d3bSMed Ismail Bennani 
8077374d3bSMed Ismail Bennani protected:
8177374d3bSMed Ismail Bennani   friend class ScriptedThread;
8277374d3bSMed Ismail Bennani   virtual lldb::ScriptedThreadInterfaceSP CreateScriptedThreadInterface() {
8377374d3bSMed Ismail Bennani     return {};
8477374d3bSMed Ismail Bennani   }
8577374d3bSMed Ismail Bennani };
8677374d3bSMed Ismail Bennani } // namespace lldb_private
8777374d3bSMed Ismail Bennani 
8877374d3bSMed Ismail Bennani #endif // LLDB_INTERPRETER_INTERFACES_SCRIPTEDPROCESSINTERFACE_H
89