]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/debugserver/source/MacOSX/MachThreadList.h
Vendor import of lldb trunk r256945:
[FreeBSD/FreeBSD.git] / tools / debugserver / source / MacOSX / MachThreadList.h
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 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);
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