SBBlock.cpp revision a66ba46379fe41036d870975c56ccc2319cb6618
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 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::~SBBlock () 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3363094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ptr = NULL; 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::IsValid () const 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3963094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ptr != NULL; 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonbool 4369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::IsInlined () const 4469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 4569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 4669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return m_opaque_ptr->GetInlinedFunctionInfo () != NULL; 4769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return false; 4869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 4969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 5069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonconst char * 5169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedName () const 5269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 5369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 5469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton { 5569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 5669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (inlined_info) 5769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return inlined_info->GetName().AsCString (NULL); 5869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton } 5969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return NULL; 6069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 6169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 6269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBFileSpec 6369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteFile () const 6469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 6569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton SBFileSpec sb_file; 6669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 6769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton { 6869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 6969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (inlined_info) 7069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton sb_file.SetFileSpec (inlined_info->GetCallSite().GetFile()); 7169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton } 7269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return sb_file; 7369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 7469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 7569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonuint32_t 7669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteLine () const 7769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 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 return inlined_info->GetCallSite().GetLine(); 8369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton } 8469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return 0; 8569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 8669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 8769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Claytonuint32_t 8869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetInlinedCallSiteColumn () 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().GetColumn(); 9569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton } 9669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return 0; 9769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 9869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBlock::AppendVariables (bool can_create, bool get_parent_variables, lldb_private::VariableList *var_list) 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (IsValid()) 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 10433ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton bool show_inline = true; 10533ed170599d41fe407a4dcf5f0875c75e1ad1375Greg Clayton m_opaque_ptr->AppendVariables (can_create, get_parent_variables, show_inline, var_list); 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock 11069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetParent () 11169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 11269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton SBBlock sb_block; 11369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 11469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton sb_block.m_opaque_ptr = m_opaque_ptr->GetParent(); 11569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return sb_block; 11669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 11769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 11869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock 11969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetSibling () 12069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 12169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton SBBlock sb_block; 12269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 12369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton sb_block.m_opaque_ptr = m_opaque_ptr->GetSibling(); 12469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return sb_block; 12569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 12669aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 12769aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock 12869aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg ClaytonSBBlock::GetFirstChild () 12969aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton{ 13069aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton SBBlock sb_block; 13169aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton if (m_opaque_ptr) 13269aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton sb_block.m_opaque_ptr = m_opaque_ptr->GetFirstChild(); 13369aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton return sb_block; 13469aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton} 13569aa5d9a7620a183cdc4da12cc87ea82e2ffcbf9Greg Clayton 136a66ba46379fe41036d870975c56ccc2319cb6618Greg Claytonconst lldb_private::Block * 137a66ba46379fe41036d870975c56ccc2319cb6618Greg ClaytonSBBlock::get () const 138a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton{ 139a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return m_opaque_ptr; 140a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton} 141a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool 14498f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBBlock::GetDescription (SBStream &description) 14598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{ 14698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice if (m_opaque_ptr) 147e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice { 14898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice lldb::user_id_t id = m_opaque_ptr->GetID(); 14998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice description.Printf ("Block: {id: %d} ", id); 15098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice if (IsInlined()) 151e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice { 15298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice description.Printf (" (inlined, '%s') ", GetInlinedName()); 153e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice } 15498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice lldb_private::SymbolContext sc; 15598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice m_opaque_ptr->CalculateSymbolContext (&sc); 15698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice if (sc.function) 157e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice { 15898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice m_opaque_ptr->DumpAddressRanges (description.get(), 15998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice sc.function->GetAddressRange().GetBaseAddress().GetFileAddress()); 160e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice } 161e7a566e3301b272d18a5f752f99c8cb8b63b28a4Caroline Tice } 16298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice else 16398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice description.Printf ("No value"); 16498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice 16598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice return true; 16698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice} 167