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