146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//===-- ThreadMachCore.h ----------------------------------------*- C++ -*-===//
246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//
346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//                     The LLVM Compiler Infrastructure
446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//
546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton// This file is distributed under the University of Illinois Open Source
646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton// License. See LICENSE.TXT for details.
746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//
846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton//===----------------------------------------------------------------------===//
946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
1046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#ifndef liblldb_ThreadMachCore_h_
1146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#define liblldb_ThreadMachCore_h_
1246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
1346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#include <string>
1446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
1546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#include "lldb/Target/Thread.h"
1646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
1746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Claytonclass ProcessMachCore;
1846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
1946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Claytonclass ThreadMachCore : public lldb_private::Thread
2046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton{
2146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Claytonpublic:
2294a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham    ThreadMachCore (lldb_private::Process &process,
2346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton                    lldb::tid_t tid);
2446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
2546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual
2646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    ~ThreadMachCore ();
2746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
2846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual void
2946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    RefreshStateAfterStop();
3046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
3146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual const char *
3246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    GetName ();
3346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
3446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual lldb::RegisterContextSP
3546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    GetRegisterContext ();
3646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
3746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    virtual lldb::RegisterContextSP
3846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
3946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
4046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    static bool
4146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    ThreadIDIsValid (lldb::tid_t thread);
4246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
4346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    bool
4446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    ShouldStop (bool &step_more);
4546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
4646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    const char *
4746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    GetBasicInfoAsString ();
4846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
4946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    void
5046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    SetName (const char *name)
5146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    {
5246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton        if (name && name[0])
5346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton            m_thread_name.assign (name);
5446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton        else
5546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton            m_thread_name.clear();
5646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    }
5746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
5846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    lldb::addr_t
5946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    GetThreadDispatchQAddr ()
6046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    {
6146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton        return m_thread_dispatch_qaddr;
6246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    }
6346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
6446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    void
6546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    SetThreadDispatchQAddr (lldb::addr_t thread_dispatch_qaddr)
6646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    {
6746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton        m_thread_dispatch_qaddr = thread_dispatch_qaddr;
6846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    }
6946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
7046c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Claytonprotected:
7146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
7246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    friend class ProcessMachCore;
7346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
7446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
7546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    // Member variables.
7646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
7746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    std::string m_thread_name;
7846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    std::string m_dispatch_queue_name;
7946c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    lldb::addr_t m_thread_dispatch_qaddr;
80f4124deeb9532044a38c0774ced872f2709347daGreg Clayton    lldb::RegisterContextSP m_thread_reg_ctx_sp;
8146c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
82863aa28adf536c9c008e1590f25da662431d6f13Greg Clayton    // Protected member functions.
8346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    //------------------------------------------------------------------
84863aa28adf536c9c008e1590f25da662431d6f13Greg Clayton    virtual bool
85863aa28adf536c9c008e1590f25da662431d6f13Greg Clayton    CalculateStopInfo ();
8646c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton};
8746c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton
8846c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton#endif  // liblldb_ThreadMachCore_h_
89