1258882Semaste//===-- HistoryThread.h -----------------------------------------*- C++ -*-===// 2258882Semaste// 3258882Semaste// The LLVM Compiler Infrastructure 4258882Semaste// 5258882Semaste// This file is distributed under the University of Illinois Open Source 6258882Semaste// License. See LICENSE.TXT for details. 7258882Semaste// 8258882Semaste//===----------------------------------------------------------------------===// 9258882Semaste 10258882Semaste#ifndef liblldb_HistoryThread_h_ 11258882Semaste#define liblldb_HistoryThread_h_ 12258882Semaste 13258882Semaste#include "lldb/lldb-private.h" 14258882Semaste#include "lldb/Host/Mutex.h" 15258882Semaste#include "lldb/Core/Broadcaster.h" 16258882Semaste#include "lldb/Core/Event.h" 17258882Semaste#include "lldb/Core/UserID.h" 18258882Semaste#include "lldb/Core/UserSettingsController.h" 19258882Semaste#include "lldb/Target/ExecutionContextScope.h" 20258882Semaste#include "lldb/Target/StackFrameList.h" 21258882Semaste#include "lldb/Target/Thread.h" 22258882Semaste 23258882Semastenamespace lldb_private { 24258882Semaste 25269024Semaste//---------------------------------------------------------------------- 26269024Semaste/// @class HistoryThread HistoryThread.h "HistoryThread.h" 27269024Semaste/// @brief A thread object representing a backtrace from a previous point in the process execution 28269024Semaste/// 29269024Semaste/// This subclass of Thread is used to provide a backtrace from earlier in 30269024Semaste/// process execution. It is given a backtrace list of pc addresses and 31269024Semaste/// optionally a stop_id of when those pc addresses were collected, and it will 32269024Semaste/// create stack frames for them. 33269024Semaste//---------------------------------------------------------------------- 34269024Semaste 35258882Semasteclass HistoryThread : public lldb_private::Thread 36258882Semaste{ 37258882Semastepublic: 38258882Semaste HistoryThread (lldb_private::Process &process, lldb::tid_t tid, std::vector<lldb::addr_t> pcs, uint32_t stop_id, bool stop_id_is_valid); 39258882Semaste 40258882Semaste virtual ~HistoryThread (); 41258882Semaste 42258882Semaste virtual lldb::RegisterContextSP 43258882Semaste GetRegisterContext (); 44258882Semaste 45258882Semaste virtual lldb::RegisterContextSP 46258882Semaste CreateRegisterContextForFrame (StackFrame *frame); 47258882Semaste 48258882Semaste virtual void 49258882Semaste RefreshStateAfterStop() { } 50258882Semaste 51258882Semaste bool 52258882Semaste CalculateStopInfo () { return false; } 53258882Semaste 54258882Semaste void 55258882Semaste SetExtendedBacktraceToken (uint64_t token) 56258882Semaste { 57258882Semaste m_extended_unwind_token = token; 58258882Semaste } 59258882Semaste 60258882Semaste uint64_t 61258882Semaste GetExtendedBacktraceToken () 62258882Semaste { 63258882Semaste return m_extended_unwind_token; 64258882Semaste } 65258882Semaste 66258882Semaste const char * 67258882Semaste GetQueueName () 68258882Semaste { 69258882Semaste return m_queue_name.c_str(); 70258882Semaste } 71258882Semaste 72258882Semaste void 73258882Semaste SetQueueName (const char *name) 74258882Semaste { 75258882Semaste m_queue_name = name; 76258882Semaste } 77258882Semaste 78258882Semaste lldb::queue_id_t 79258882Semaste GetQueueID () 80258882Semaste { 81258882Semaste return m_queue_id; 82258882Semaste } 83258882Semaste 84258882Semaste void 85258882Semaste SetQueueID (lldb::queue_id_t queue) 86258882Semaste { 87258882Semaste m_queue_id = queue; 88258882Semaste } 89258882Semaste 90258882Semaste const char * 91258882Semaste GetThreadName () 92258882Semaste { 93258882Semaste return m_thread_name.c_str(); 94258882Semaste } 95258882Semaste 96258882Semaste uint32_t 97258882Semaste GetExtendedBacktraceOriginatingIndexID (); 98258882Semaste 99258882Semaste void 100258882Semaste SetThreadName (const char *name) 101258882Semaste { 102258882Semaste m_thread_name = name; 103258882Semaste } 104258882Semaste 105258882Semasteprotected: 106258882Semaste virtual lldb::StackFrameListSP 107258882Semaste GetStackFrameList (); 108258882Semaste 109258882Semaste mutable Mutex m_framelist_mutex; 110258882Semaste lldb::StackFrameListSP m_framelist; 111258882Semaste std::vector<lldb::addr_t> m_pcs; 112258882Semaste uint32_t m_stop_id; 113258882Semaste bool m_stop_id_is_valid; 114258882Semaste 115258882Semaste uint64_t m_extended_unwind_token; 116258882Semaste std::string m_queue_name; 117258882Semaste std::string m_thread_name; 118258882Semaste lldb::tid_t m_originating_unique_thread_id; 119258882Semaste lldb::queue_id_t m_queue_id; 120258882Semaste}; 121258882Semaste 122258882Semaste} // namespace lldb_private 123258882Semaste 124258882Semaste#endif // liblldb_HistoryThread_h_ 125