Unwind.h revision 591cf15899706efe8878a0718daec056e1ffd442
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Unwind.h ------------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_Unwind_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Unwind_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 18591cf15899706efe8878a0718daec056e1ffd442Jim Ingham#include "lldb/Host/Mutex.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Unwind 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Classes that inherit from Unwind can see and modify these 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Unwind(Thread &thread) : 29591cf15899706efe8878a0718daec056e1ffd442Jim Ingham m_thread (thread), 30591cf15899706efe8878a0718daec056e1ffd442Jim Ingham m_unwind_mutex() 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Unwind() 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40591cf15899706efe8878a0718daec056e1ffd442Jim Ingham void 41591cf15899706efe8878a0718daec056e1ffd442Jim Ingham Clear() 42591cf15899706efe8878a0718daec056e1ffd442Jim Ingham { 43591cf15899706efe8878a0718daec056e1ffd442Jim Ingham Mutex::Locker locker(m_unwind_mutex); 44591cf15899706efe8878a0718daec056e1ffd442Jim Ingham DoClear(); 45591cf15899706efe8878a0718daec056e1ffd442Jim Ingham 46591cf15899706efe8878a0718daec056e1ffd442Jim Ingham } 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48591cf15899706efe8878a0718daec056e1ffd442Jim Ingham uint32_t 49591cf15899706efe8878a0718daec056e1ffd442Jim Ingham GetFrameCount() 50591cf15899706efe8878a0718daec056e1ffd442Jim Ingham { 51591cf15899706efe8878a0718daec056e1ffd442Jim Ingham Mutex::Locker locker(m_unwind_mutex); 52591cf15899706efe8878a0718daec056e1ffd442Jim Ingham return DoGetFrameCount(); 53591cf15899706efe8878a0718daec056e1ffd442Jim Ingham } 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 55591cf15899706efe8878a0718daec056e1ffd442Jim Ingham bool 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFrameInfoAtIndex (uint32_t frame_idx, 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t& cfa, 58591cf15899706efe8878a0718daec056e1ffd442Jim Ingham lldb::addr_t& pc) 59591cf15899706efe8878a0718daec056e1ffd442Jim Ingham { 60591cf15899706efe8878a0718daec056e1ffd442Jim Ingham Mutex::Locker locker(m_unwind_mutex); 61591cf15899706efe8878a0718daec056e1ffd442Jim Ingham return DoGetFrameInfoAtIndex (frame_idx, cfa, pc); 62591cf15899706efe8878a0718daec056e1ffd442Jim Ingham } 63591cf15899706efe8878a0718daec056e1ffd442Jim Ingham 64591cf15899706efe8878a0718daec056e1ffd442Jim Ingham lldb::RegisterContextSP 65591cf15899706efe8878a0718daec056e1ffd442Jim Ingham CreateRegisterContextForFrame (StackFrame *frame) 66591cf15899706efe8878a0718daec056e1ffd442Jim Ingham { 67591cf15899706efe8878a0718daec056e1ffd442Jim Ingham Mutex::Locker locker(m_unwind_mutex); 68591cf15899706efe8878a0718daec056e1ffd442Jim Ingham return DoCreateRegisterContextForFrame (frame); 69591cf15899706efe8878a0718daec056e1ffd442Jim Ingham } 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Thread & 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetThread() 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_thread; 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Classes that inherit from Unwind can see and modify these 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 81591cf15899706efe8878a0718daec056e1ffd442Jim Ingham virtual void 82591cf15899706efe8878a0718daec056e1ffd442Jim Ingham DoClear() = 0; 83591cf15899706efe8878a0718daec056e1ffd442Jim Ingham 84591cf15899706efe8878a0718daec056e1ffd442Jim Ingham virtual uint32_t 85591cf15899706efe8878a0718daec056e1ffd442Jim Ingham DoGetFrameCount() = 0; 86591cf15899706efe8878a0718daec056e1ffd442Jim Ingham 87591cf15899706efe8878a0718daec056e1ffd442Jim Ingham virtual bool 88591cf15899706efe8878a0718daec056e1ffd442Jim Ingham DoGetFrameInfoAtIndex (uint32_t frame_idx, 89591cf15899706efe8878a0718daec056e1ffd442Jim Ingham lldb::addr_t& cfa, 90591cf15899706efe8878a0718daec056e1ffd442Jim Ingham lldb::addr_t& pc) = 0; 91591cf15899706efe8878a0718daec056e1ffd442Jim Ingham 92591cf15899706efe8878a0718daec056e1ffd442Jim Ingham virtual lldb::RegisterContextSP 93591cf15899706efe8878a0718daec056e1ffd442Jim Ingham DoCreateRegisterContextForFrame (StackFrame *frame) = 0; 94591cf15899706efe8878a0718daec056e1ffd442Jim Ingham 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Thread &m_thread; 96591cf15899706efe8878a0718daec056e1ffd442Jim Ingham Mutex m_unwind_mutex; 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (Unwind); 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Unwind_h_ 104