//===-- NativeThreadListDarwin.h --------------------------------------*- C++ //-*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // Created by Greg Clayton on 6/19/07. // //===----------------------------------------------------------------------===// #ifndef __NativeThreadListDarwin_h__ #define __NativeThreadListDarwin_h__ #include #include #include #include "lldb/lldb-private-forward.h" #include "lldb/lldb-types.h" #include "MachException.h" // #include "ThreadInfo.h" namespace lldb_private { namespace process_darwin { class NativeBreakpointDarwin; class NativeProcessDarwin; class NativeThreadDarwin; using NativeThreadDarwinSP = std::shared_ptr; class NativeThreadListDarwin { public: NativeThreadListDarwin(); ~NativeThreadListDarwin(); void Clear(); void Dump(Stream &stream) const; // These methods will be accessed directly from NativeThreadDarwin #if 0 bool GetRegisterValue (nub_thread_t tid, uint32_t set, uint32_t reg, DNBRegisterValue *reg_value) const; bool SetRegisterValue (nub_thread_t tid, uint32_t set, uint32_t reg, const DNBRegisterValue *reg_value) const; nub_size_t GetRegisterContext (nub_thread_t tid, void *buf, size_t buf_len); nub_size_t SetRegisterContext (nub_thread_t tid, const void *buf, size_t buf_len); uint32_t SaveRegisterState (nub_thread_t tid); bool RestoreRegisterState (nub_thread_t tid, uint32_t save_id); #endif const char *GetThreadInfo(lldb::tid_t tid) const; void ProcessWillResume(NativeProcessDarwin &process, const ResumeActionList &thread_actions); uint32_t ProcessDidStop(NativeProcessDarwin &process); bool NotifyException(MachException::Data &exc); bool ShouldStop(bool &step_more); // These methods will be accessed directly from NativeThreadDarwin #if 0 const char * GetName (nub_thread_t tid); nub_state_t GetState (nub_thread_t tid); nub_thread_t SetCurrentThread (nub_thread_t tid); #endif // TODO: figure out if we need to add this to NativeThreadDarwin yet. #if 0 ThreadInfo::QoS GetRequestedQoS (nub_thread_t tid, nub_addr_t tsd, uint64_t dti_qos_class_index); nub_addr_t GetPThreadT (nub_thread_t tid); nub_addr_t GetDispatchQueueT (nub_thread_t tid); nub_addr_t GetTSDAddressForThread (nub_thread_t tid, uint64_t plo_pthread_tsd_base_address_offset, uint64_t plo_pthread_tsd_base_offset, uint64_t plo_pthread_tsd_entry_size); #endif // These methods will be accessed directly from NativeThreadDarwin #if 0 bool GetThreadStoppedReason (nub_thread_t tid, struct DNBThreadStopInfo *stop_info) const; void DumpThreadStoppedReason (nub_thread_t tid) const; bool GetIdentifierInfo (nub_thread_t tid, thread_identifier_info_data_t *ident_info); #endif size_t GetNumberOfThreads() const; lldb::tid_t ThreadIDAtIndex(size_t idx) const; lldb::tid_t GetCurrentThreadID(); NativeThreadDarwinSP GetCurrentThread(); void NotifyBreakpointChanged(const NativeBreakpointDarwin *bp); uint32_t EnableHardwareBreakpoint(const NativeBreakpointDarwin *bp) const; bool DisableHardwareBreakpoint(const NativeBreakpointDarwin *bp) const; uint32_t EnableHardwareWatchpoint(const NativeBreakpointDarwin *wp) const; bool DisableHardwareWatchpoint(const NativeBreakpointDarwin *wp) const; uint32_t GetNumberOfSupportedHardwareWatchpoints() const; size_t GetThreadIndexForThreadStoppedWithSignal(const int signo) const; NativeThreadDarwinSP GetThreadByID(lldb::tid_t tid) const; NativeThreadDarwinSP GetThreadByMachPortNumber(::thread_t mach_port_number) const; lldb::tid_t GetThreadIDByMachPortNumber(::thread_t mach_port_number) const; thread_t GetMachPortNumberByThreadID(lldb::tid_t globally_unique_id) const; protected: typedef std::vector collection; typedef collection::iterator iterator; typedef collection::const_iterator const_iterator; // Consider having this return an lldb_private::Status. uint32_t UpdateThreadList(NativeProcessDarwin &process, bool update, collection *num_threads = nullptr); collection m_threads; mutable std::recursive_mutex m_threads_mutex; NativeThreadDarwinSP m_current_thread; bool m_is_64_bit; }; } // namespace process_darwin } // namespace lldb_private #endif // #ifndef __NativeThreadListDarwin_h__