MachThreadList.h revision 44eb9fb021023027159df55f91c3e95384088970
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
19class DNBThreadResumeActions;
20
21class MachThreadList
22{
23public:
24                    MachThreadList ();
25                    ~MachThreadList ();
26
27    void            Clear ();
28    void            Dump () const;
29    bool            GetRegisterValue (nub_thread_t tid, uint32_t reg_set_idx, uint32_t reg_idx, DNBRegisterValue *reg_value) const;
30    bool            SetRegisterValue (nub_thread_t tid, uint32_t reg_set_idx, uint32_t reg_idx, const DNBRegisterValue *reg_value) const;
31    nub_size_t      GetRegisterContext (nub_thread_t tid, void *buf, size_t buf_len);
32    nub_size_t      SetRegisterContext (nub_thread_t tid, const void *buf, size_t buf_len);
33    const char *    GetThreadInfo (nub_thread_t tid) const;
34    void            ProcessWillResume (MachProcess *process, const DNBThreadResumeActions &thread_actions);
35    uint32_t        ProcessDidStop (MachProcess *process);
36    bool            NotifyException (MachException::Data& exc);
37    bool            ShouldStop (bool &step_more);
38    const char *    GetName (nub_thread_t tid);
39    nub_state_t     GetState (nub_thread_t tid);
40    nub_thread_t    SetCurrentThread (nub_thread_t tid);
41    bool            GetThreadStoppedReason (nub_thread_t tid, struct DNBThreadStopInfo *stop_info) const;
42    void            DumpThreadStoppedReason (nub_thread_t tid) const;
43    bool            GetIdentifierInfo (nub_thread_t tid, thread_identifier_info_data_t *ident_info);
44    nub_size_t      NumThreads () const;
45    nub_thread_t    ThreadIDAtIndex (nub_size_t idx) const;
46    nub_thread_t    CurrentThreadID ();
47    void            CurrentThread (MachThreadSP& threadSP);
48    void            NotifyBreakpointChanged (const DNBBreakpoint *bp);
49    uint32_t        EnableHardwareBreakpoint (const DNBBreakpoint *bp) const;
50    bool            DisableHardwareBreakpoint (const DNBBreakpoint *bp) const;
51    uint32_t        EnableHardwareWatchpoint (const DNBBreakpoint *wp) const;
52    bool            DisableHardwareWatchpoint (const DNBBreakpoint *wp) const;
53    uint32_t        NumSupportedHardwareWatchpoints () const;
54
55    uint32_t        GetThreadIndexForThreadStoppedWithSignal (const int signo) const;
56
57    MachThreadSP    GetThreadByID (nub_thread_t tid) const;
58
59    MachThreadSP    GetThreadByMachPortNumber (thread_t mach_port_number) const;
60    nub_thread_t    GetThreadIDByMachPortNumber (thread_t mach_port_number) const;
61
62protected:
63    typedef std::vector<MachThreadSP>   collection;
64    typedef collection::iterator        iterator;
65    typedef collection::const_iterator  const_iterator;
66
67    uint32_t        UpdateThreadList (MachProcess *process, bool update, collection *num_threads = NULL);
68//  const_iterator  FindThreadByID (thread_t tid) const;
69
70    collection      m_threads;
71    mutable PThreadMutex m_threads_mutex;
72    MachThreadSP    m_current_thread;
73};
74
75#endif // #ifndef __MachThreadList_h__
76
77