1 //===-- MachThreadList.h ----------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Created by Greg Clayton on 6/19/07.
12 //===----------------------------------------------------------------------===//
14 #ifndef __MachThreadList_h__
15 #define __MachThreadList_h__
17 #include "MachThread.h"
18 #include "ThreadInfo.h"
20 class DNBThreadResumeActions;
30 bool GetRegisterValue (nub_thread_t tid, uint32_t set, uint32_t reg, DNBRegisterValue *reg_value) const;
31 bool SetRegisterValue (nub_thread_t tid, uint32_t set, uint32_t reg, 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);
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);
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;
64 uint32_t GetThreadIndexForThreadStoppedWithSignal (const int signo) const;
66 MachThreadSP GetThreadByID (nub_thread_t tid) const;
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;
73 typedef std::vector<MachThreadSP> collection;
74 typedef collection::iterator iterator;
75 typedef collection::const_iterator const_iterator;
77 uint32_t UpdateThreadList (MachProcess *process, bool update, collection *num_threads = NULL);
78 // const_iterator FindThreadByID (thread_t tid) const;
81 mutable PThreadMutex m_threads_mutex;
82 MachThreadSP m_current_thread;
86 #endif // #ifndef __MachThreadList_h__