UnwindTable.h revision 296417
1//===-- Symtab.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 11#ifndef liblldb_UnwindTable_h 12#define liblldb_UnwindTable_h 13 14#include <map> 15 16#include "lldb/lldb-private.h" 17#include "lldb/Host/Mutex.h" 18 19namespace lldb_private { 20 21// A class which holds all the FuncUnwinders objects for a given ObjectFile. 22// The UnwindTable is populated with FuncUnwinders objects lazily during 23// the debug session. 24 25class UnwindTable 26{ 27public: 28 UnwindTable(ObjectFile& objfile); 29 ~UnwindTable(); 30 31 lldb_private::DWARFCallFrameInfo * 32 GetEHFrameInfo (); 33 34 lldb_private::CompactUnwindInfo * 35 GetCompactUnwindInfo (); 36 37 ArmUnwindInfo * 38 GetArmUnwindInfo (); 39 40 lldb::FuncUnwindersSP 41 GetFuncUnwindersContainingAddress (const Address& addr, SymbolContext &sc); 42 43// Normally when we create a new FuncUnwinders object we track it in this UnwindTable so it can 44// be reused later. But for the target modules show-unwind we want to create brand new 45// UnwindPlans for the function of interest - so ignore any existing FuncUnwinders for that 46// function and don't add this new one to our UnwindTable. 47// This FuncUnwinders object does have a reference to the UnwindTable but the lifetime of this 48// uncached FuncUnwinders is expected to be short so in practice this will not be a problem. 49 lldb::FuncUnwindersSP 50 GetUncachedFuncUnwindersContainingAddress (const Address& addr, SymbolContext &sc); 51 52 bool 53 GetArchitecture (lldb_private::ArchSpec &arch); 54 55private: 56 void 57 Dump (Stream &s); 58 59 void Initialize (); 60 61 typedef std::map<lldb::addr_t, lldb::FuncUnwindersSP> collection; 62 typedef collection::iterator iterator; 63 typedef collection::const_iterator const_iterator; 64 65 ObjectFile& m_object_file; 66 collection m_unwinds; 67 68 bool m_initialized; // delay some initialization until ObjectFile is set up 69 Mutex m_mutex; 70 71 std::unique_ptr<DWARFCallFrameInfo> m_eh_frame_up; 72 std::unique_ptr<CompactUnwindInfo> m_compact_unwind_up; 73 std::unique_ptr<ArmUnwindInfo> m_arm_unwind_up; 74 75 DISALLOW_COPY_AND_ASSIGN (UnwindTable); 76}; 77 78} // namespace lldb_private 79 80#endif // liblldb_UnwindTable_h 81