StackFrame.h revision ccd584dccb920cdb028de69950774c3bcdc025ec
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===-- StackFrame.h --------------------------------------------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef liblldb_StackFrame_h_ 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define liblldb_StackFrame_h_ 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// C Includes 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// C++ Includes 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Other libraries and framework includes 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Project includes 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Core/Error.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "lldb/Core/Flags.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Core/Scalar.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "lldb/Core/StreamString.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "lldb/Core/UserID.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "lldb/Core/ValueObjectList.h" 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "lldb/Symbol/SymbolContext.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "lldb/Target/ExecutionContextScope.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Target/StackID.h" 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace lldb_private { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class StackFrame : 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ExecutionContextScope 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{ 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //------------------------------------------------------------------ 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Constructors and Destructors 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) //------------------------------------------------------------------ 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StackFrame (lldb::user_id_t frame_idx, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::user_id_t unwind_frame_idx, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Thread &thread, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::addr_t cfa, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::addr_t pc, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SymbolContext *sc_ptr); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StackFrame (lldb::user_id_t frame_idx, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::user_id_t unwind_frame_idx, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Thread &thread, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const lldb::RegisterContextSP ®_context_sp, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::addr_t cfa, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::addr_t pc, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SymbolContext *sc_ptr); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StackFrame (lldb::user_id_t frame_idx, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::user_id_t unwind_frame_idx, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Thread &thread, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const lldb::RegisterContextSP ®_context_sp, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::addr_t cfa, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Address& pc, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SymbolContext *sc_ptr); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~StackFrame (); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Thread & 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetThread() 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { return m_thread; } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Thread & 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetThread() const 67bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch { return m_thread; } 68bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StackID& 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetStackID(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Address& 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFrameCodeAddress(); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChangePC (lldb::addr_t pc); 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SymbolContext& 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSymbolContext (uint32_t resolve_scope); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetFrameBaseValue(Scalar &value, Error *error_ptr); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Block * 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetFrameBlock (); 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RegisterContext * 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRegisterContext (); 89b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const lldb::RegisterContextSP & 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRegisterContextSP () const 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return m_reg_context_sp; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VariableList * 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetVariableList (bool get_file_globals); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HasDebugInformation (); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const char * 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Disassemble (); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Dump (Stream *strm, bool show_frame_index, bool show_fullpaths); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IsInlined (); 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) uint32_t 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFrameIndex () const 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_frame_index; 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetUnwindFrameIndex () const 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return m_unwind_frame_index; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::ValueObjectSP 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetValueObjectForFrameVariable (const lldb::VariableSP &variable_sp); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::ValueObjectSP 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TrackGlobalVariable (const lldb::VariableSP &variable_sp); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //------------------------------------------------------------------ 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // lldb::ExecutionContextScope pure virtual functions 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch //------------------------------------------------------------------ 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Target * 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalculateTarget (); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual Process * 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalculateProcess (); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual Thread * 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalculateThread (); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual StackFrame * 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CalculateStackFrame (); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Calculate (ExecutionContext &exe_ctx); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::StackFrameSP 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSP (); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class StackFrameList; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetSymbolContextScope (SymbolContextScope *symbol_scope); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdateCurrentFrameFromPreviousFrame (StackFrame &prev_frame); 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) UpdatePreviousFrameFromCurrentFrame (StackFrame &curr_frame); 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch HasCachedData () const; 164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochprivate: 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //------------------------------------------------------------------ 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For StackFrame only 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //------------------------------------------------------------------ 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Thread &m_thread; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t m_frame_index; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t m_unwind_frame_index; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::RegisterContextSP m_reg_context_sp; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StackID m_id; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Address m_frame_code_addr; // The frame code address (might not be the same as the actual PC for inlined frames) as a section/offset address 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SymbolContext m_sc; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Flags m_flags; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Scalar m_frame_base; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Error m_frame_base_error; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::VariableListSP m_variable_list_sp; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueObjectList m_variable_list_value_objects; // Value objects for each variable in m_variable_list_sp 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StreamString m_disassembly; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN (StackFrame); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace lldb_private 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // liblldb_StackFrame_h_ 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)