1 //===-- MachThreadList.h ----------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // Created by Greg Clayton on 6/19/07. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef __MachThreadList_h__ 15 #define __MachThreadList_h__ 16 17 #include "MachThread.h" 18 #include "ThreadInfo.h" 19 20 class DNBThreadResumeActions; 21 22 class MachThreadList 23 { 24 public: 25 MachThreadList (); 26 ~MachThreadList (); 27 28 void Clear (); 29 void Dump () const; 30 bool GetRegisterValue (nub_thread_t tid, uint32_t reg_set_idx, uint32_t reg_idx, DNBRegisterValue *reg_value) const; 31 bool SetRegisterValue (nub_thread_t tid, uint32_t reg_set_idx, uint32_t reg_idx, const DNBRegisterValue *reg_value) const; 32 nub_size_t GetRegisterContext (nub_thread_t tid, void *buf, size_t buf_len); 33 nub_size_t SetRegisterContext (nub_thread_t tid, const void *buf, size_t buf_len); 34 uint32_t SaveRegisterState (nub_thread_t tid); 35 bool RestoreRegisterState (nub_thread_t tid, uint32_t save_id); 36 const char * GetThreadInfo (nub_thread_t tid) const; 37 void ProcessWillResume (MachProcess *process, const DNBThreadResumeActions &thread_actions); 38 uint32_t ProcessDidStop (MachProcess *process); 39 bool NotifyException (MachException::Data& exc); 40 bool ShouldStop (bool &step_more); 41 const char * GetName (nub_thread_t tid); 42 nub_state_t GetState (nub_thread_t tid); 43 nub_thread_t SetCurrentThread (nub_thread_t tid); 44 45 ThreadInfo::QoS GetRequestedQoS (nub_thread_t tid, nub_addr_t tsd, uint64_t dti_qos_class_index); 46 nub_addr_t GetPThreadT (nub_thread_t tid); 47 nub_addr_t GetDispatchQueueT (nub_thread_t tid); 48 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); 49 50 bool GetThreadStoppedReason (nub_thread_t tid, struct DNBThreadStopInfo *stop_info) const; 51 void DumpThreadStoppedReason (nub_thread_t tid) const; 52 bool GetIdentifierInfo (nub_thread_t tid, thread_identifier_info_data_t *ident_info); 53 nub_size_t NumThreads () const; 54 nub_thread_t ThreadIDAtIndex (nub_size_t idx) const; 55 nub_thread_t CurrentThreadID (); 56 void CurrentThread (MachThreadSP& threadSP); 57 void NotifyBreakpointChanged (const DNBBreakpoint *bp); 58 uint32_t EnableHardwareBreakpoint (const DNBBreakpoint *bp) const; 59 bool DisableHardwareBreakpoint (const DNBBreakpoint *bp) const; 60 uint32_t EnableHardwareWatchpoint (const DNBBreakpoint *wp) const; 61 bool DisableHardwareWatchpoint (const DNBBreakpoint *wp) const; 62 uint32_t NumSupportedHardwareWatchpoints () const; 63 64 uint32_t GetThreadIndexForThreadStoppedWithSignal (const int signo) const; 65 66 MachThreadSP GetThreadByID (nub_thread_t tid) const; 67 68 MachThreadSP GetThreadByMachPortNumber (thread_t mach_port_number) const; 69 nub_thread_t GetThreadIDByMachPortNumber (thread_t mach_port_number) const; 70 thread_t GetMachPortNumberByThreadID (nub_thread_t globally_unique_id) const; 71 72 protected: 73 typedef std::vector<MachThreadSP> collection; 74 typedef collection::iterator iterator; 75 typedef collection::const_iterator const_iterator; 76 77 uint32_t UpdateThreadList (MachProcess *process, bool update, collection *num_threads = NULL); 78 // const_iterator FindThreadByID (thread_t tid) const; 79 80 collection m_threads; 81 mutable PThreadMutex m_threads_mutex; 82 MachThreadSP m_current_thread; 83 bool m_is_64_bit; 84 }; 85 86 #endif // #ifndef __MachThreadList_h__ 87 88