1 //===-- OperatingSystem.h ----------------------------------------------*- C++ 2 //-*-===// 3 // 4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5 // See https://llvm.org/LICENSE.txt for license information. 6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLDB_TARGET_OPERATINGSYSTEM_H 11 #define LLDB_TARGET_OPERATINGSYSTEM_H 12 13 #include "lldb/Core/PluginInterface.h" 14 #include "lldb/lldb-private.h" 15 16 namespace lldb_private { 17 18 /// \class OperatingSystem OperatingSystem.h "lldb/Target/OperatingSystem.h" 19 /// A plug-in interface definition class for halted OS helpers. 20 /// 21 /// Halted OS plug-ins can be used by any process to locate and create 22 /// OS objects, like threads, during the lifetime of a debug session. 23 /// This is commonly used when attaching to an operating system that is 24 /// halted, such as when debugging over JTAG or connecting to low level kernel 25 /// debug services. 26 27 class OperatingSystem : public PluginInterface { 28 public: 29 /// Find a halted OS plugin for a given process. 30 /// 31 /// Scans the installed OperatingSystem plug-ins and tries to find an 32 /// instance that matches the current target triple and executable. 33 /// 34 /// \param[in] process 35 /// The process for which to try and locate a halted OS 36 /// plug-in instance. 37 /// 38 /// \param[in] plugin_name 39 /// An optional name of a specific halted OS plug-in that 40 /// should be used. If NULL, pick the best plug-in. 41 static OperatingSystem *FindPlugin(Process *process, const char *plugin_name); 42 43 OperatingSystem(Process *process); 44 45 // Plug-in Methods 46 virtual bool UpdateThreadList(ThreadList &old_thread_list, 47 ThreadList &real_thread_list, 48 ThreadList &new_thread_list) = 0; 49 50 virtual void ThreadWasSelected(Thread *thread) = 0; 51 52 virtual lldb::RegisterContextSP 53 CreateRegisterContextForThread(Thread *thread, 54 lldb::addr_t reg_data_addr) = 0; 55 56 virtual lldb::StopInfoSP CreateThreadStopReason(Thread *thread) = 0; 57 CreateThread(lldb::tid_t tid,lldb::addr_t context)58 virtual lldb::ThreadSP CreateThread(lldb::tid_t tid, lldb::addr_t context) { 59 return lldb::ThreadSP(); 60 } 61 62 virtual bool IsOperatingSystemPluginThread(const lldb::ThreadSP &thread_sp); 63 64 protected: 65 // Member variables. 66 Process 67 *m_process; ///< The process that this dynamic loader plug-in is tracking. 68 }; 69 70 } // namespace lldb_private 71 72 #endif // LLDB_TARGET_OPERATINGSYSTEM_H 73