SBBlock.cpp revision 538eb82a89a68dbc57251915080bd5152b333978
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBBlock.cpp ---------------------------------------------*- 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#include "lldb/API/SBBlock.h" 1169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton#include "lldb/API/SBFileSpec.h" 1298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Block.h" 1469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton#include "lldb/Symbol/Function.h" 1598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/Symbol/SymbolContext.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 1869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonusing namespace lldb_private; 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::SBBlock () : 2263094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr (NULL) 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::SBBlock (lldb_private::Block *lldb_object_ptr) : 2763094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr (lldb_object_ptr) 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBBlock::SBBlock(const SBBlock &rhs) : 32538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr (rhs.m_opaque_ptr) 33538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{ 34538eb82a89a68dbc57251915080bd5152b333978Greg Clayton} 35538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 36538eb82a89a68dbc57251915080bd5152b333978Greg Claytonconst SBBlock & 37538eb82a89a68dbc57251915080bd5152b333978Greg ClaytonSBBlock::operator = (const SBBlock &rhs) 38538eb82a89a68dbc57251915080bd5152b333978Greg Clayton{ 39538eb82a89a68dbc57251915080bd5152b333978Greg Clayton m_opaque_ptr = rhs.m_opaque_ptr; 40538eb82a89a68dbc57251915080bd5152b333978Greg Clayton return *this; 41538eb82a89a68dbc57251915080bd5152b333978Greg Clayton} 42538eb82a89a68dbc57251915080bd5152b333978Greg Clayton 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::~SBBlock () 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4563094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr = NULL; 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::IsValid () const 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5163094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr != NULL; 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonbool 5569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::IsInlined () const 5669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 5769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 5869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return m_opaque_ptr->GetInlinedFunctionInfo () != NULL; 5969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return false; 6069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 6169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 6269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonconst char * 6369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedName () const 6469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 6569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 6669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton { 6769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 6869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (inlined_info) 6969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return inlined_info->GetName().AsCString (NULL); 7069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton } 7169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return NULL; 7269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 7369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 7469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBFileSpec 7569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteFile () const 7669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 7769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton SBFileSpec sb_file; 7869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 7969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton { 8069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 8169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (inlined_info) 8269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton sb_file.SetFileSpec (inlined_info->GetCallSite().GetFile()); 8369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton } 8469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return sb_file; 8569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 8669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 8769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonuint32_t 8869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteLine () const 8969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 9069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 9169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton { 9269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 9369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (inlined_info) 9469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return inlined_info->GetCallSite().GetLine(); 9569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton } 9669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return 0; 9769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 9869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 9969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonuint32_t 10069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteColumn () const 10169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 10269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 10369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton { 10469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 10569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (inlined_info) 10669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return inlined_info->GetCallSite().GetColumn(); 10769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton } 10869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return 0; 10969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 11069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::AppendVariables (bool can_create, bool get_parent_variables, lldb_private::VariableList *var_list) 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (IsValid()) 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11633ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton bool show_inline = true; 11733ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton m_opaque_ptr->AppendVariables (can_create, get_parent_variables, show_inline, var_list); 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock 12269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetParent () 12369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 12469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton SBBlock sb_block; 12569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 12669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton sb_block.m_opaque_ptr = m_opaque_ptr->GetParent(); 12769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return sb_block; 12869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 12969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 13069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock 13169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetSibling () 13269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 13369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton SBBlock sb_block; 13469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 13569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton sb_block.m_opaque_ptr = m_opaque_ptr->GetSibling(); 13669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return sb_block; 13769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 13869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 13969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock 14069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetFirstChild () 14169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 14269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton SBBlock sb_block; 14369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 14469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton sb_block.m_opaque_ptr = m_opaque_ptr->GetFirstChild(); 14569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return sb_block; 14669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 14769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 148a66ba46379fe41036d870975c56ccc2319cb6618Greg Claytonconst lldb_private::Block * 149a66ba46379fe41036d870975c56ccc2319cb6618Greg ClaytonSBBlock::get () const 150a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton{ 151a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return m_opaque_ptr; 152a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton} 153a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool 15698f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBBlock::GetDescription (SBStream &description) 15798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{ 15898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice if (m_opaque_ptr) 159e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice { 16098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice lldb::user_id_t id = m_opaque_ptr->GetID(); 16198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice description.Printf ("Block: {id: %d} ", id); 16298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice if (IsInlined()) 163e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice { 16498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice description.Printf (" (inlined, '%s') ", GetInlinedName()); 165e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice } 16698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice lldb_private::SymbolContext sc; 16798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice m_opaque_ptr->CalculateSymbolContext (&sc); 16898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice if (sc.function) 169e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice { 17098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice m_opaque_ptr->DumpAddressRanges (description.get(), 17198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice sc.function->GetAddressRange().GetBaseAddress().GetFileAddress()); 172e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice } 173e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice } 17498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice else 17598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice description.Printf ("No value"); 17698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice 17798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice return true; 17898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice} 179