135653324SMed Ismail Bennani //===-- OperatingSystemPythonInterface.h ------------------------*- C++ -*-===// 235653324SMed Ismail Bennani // 335653324SMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 435653324SMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information. 535653324SMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 635653324SMed Ismail Bennani // 735653324SMed Ismail Bennani //===----------------------------------------------------------------------===// 835653324SMed Ismail Bennani 935653324SMed Ismail Bennani #ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_OPERATINGSYSTEMPYTHONINTERFACE_H 1035653324SMed Ismail Bennani #define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_OPERATINGSYSTEMPYTHONINTERFACE_H 1135653324SMed Ismail Bennani 1235653324SMed Ismail Bennani #include "lldb/Host/Config.h" 1335653324SMed Ismail Bennani #include "lldb/Interpreter/Interfaces/OperatingSystemInterface.h" 1435653324SMed Ismail Bennani 1535653324SMed Ismail Bennani #if LLDB_ENABLE_PYTHON 1635653324SMed Ismail Bennani 1735653324SMed Ismail Bennani #include "ScriptedThreadPythonInterface.h" 1835653324SMed Ismail Bennani 1935653324SMed Ismail Bennani #include <optional> 2035653324SMed Ismail Bennani 2135653324SMed Ismail Bennani namespace lldb_private { 2235653324SMed Ismail Bennani class OperatingSystemPythonInterface 2335653324SMed Ismail Bennani : virtual public OperatingSystemInterface, 2435653324SMed Ismail Bennani virtual public ScriptedThreadPythonInterface, 2535653324SMed Ismail Bennani public PluginInterface { 2635653324SMed Ismail Bennani public: 2735653324SMed Ismail Bennani OperatingSystemPythonInterface(ScriptInterpreterPythonImpl &interpreter); 2835653324SMed Ismail Bennani 2935653324SMed Ismail Bennani llvm::Expected<StructuredData::GenericSP> 3035653324SMed Ismail Bennani CreatePluginObject(llvm::StringRef class_name, ExecutionContext &exe_ctx, 3135653324SMed Ismail Bennani StructuredData::DictionarySP args_sp, 3235653324SMed Ismail Bennani StructuredData::Generic *script_obj = nullptr) override; 3335653324SMed Ismail Bennani 3421026073SMed Ismail Bennani llvm::SmallVector<AbstractMethodRequirement> 3521026073SMed Ismail Bennani GetAbstractMethodRequirements() const override { 3621026073SMed Ismail Bennani return llvm::SmallVector<AbstractMethodRequirement>({{"get_thread_info"}}); 3735653324SMed Ismail Bennani } 3835653324SMed Ismail Bennani 3935653324SMed Ismail Bennani StructuredData::DictionarySP CreateThread(lldb::tid_t tid, 4035653324SMed Ismail Bennani lldb::addr_t context) override; 4135653324SMed Ismail Bennani 4235653324SMed Ismail Bennani StructuredData::ArraySP GetThreadInfo() override; 4335653324SMed Ismail Bennani 4435653324SMed Ismail Bennani StructuredData::DictionarySP GetRegisterInfo() override; 4535653324SMed Ismail Bennani 4635653324SMed Ismail Bennani std::optional<std::string> GetRegisterContextForTID(lldb::tid_t tid) override; 4735653324SMed Ismail Bennani 48*cb82771cSFelipe de Azevedo Piovezan std::optional<bool> DoesPluginReportAllThreads() override; 49*cb82771cSFelipe de Azevedo Piovezan 5035653324SMed Ismail Bennani static void Initialize(); 5135653324SMed Ismail Bennani 5235653324SMed Ismail Bennani static void Terminate(); 5335653324SMed Ismail Bennani 5435653324SMed Ismail Bennani static llvm::StringRef GetPluginNameStatic() { 5535653324SMed Ismail Bennani return "OperatingSystemPythonInterface"; 5635653324SMed Ismail Bennani } 5735653324SMed Ismail Bennani 5835653324SMed Ismail Bennani llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 5935653324SMed Ismail Bennani }; 6035653324SMed Ismail Bennani } // namespace lldb_private 6135653324SMed Ismail Bennani 6235653324SMed Ismail Bennani #endif // LLDB_ENABLE_PYTHON 6335653324SMed Ismail Bennani #endif // LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_INTERFACES_OPERATINGSYSTEMPYTHONINTERFACE_H 64