130fdc8d8SChris Lattner //===-- SBModule.cpp --------------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 1030fdc8d8SChris Lattner #include "lldb/API/SBModule.h" 1109960031SGreg Clayton #include "lldb/API/SBAddress.h" 1209960031SGreg Clayton #include "lldb/API/SBFileSpec.h" 13dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 14fe356d35SGreg Clayton #include "lldb/API/SBSymbolContextList.h" 1530fdc8d8SChris Lattner #include "lldb/Core/Module.h" 16ceb6b139SCaroline Tice #include "lldb/Core/Log.h" 1738adbbb8SGreg Clayton #include "lldb/Core/StreamString.h" 18dea8cb4fSGreg Clayton #include "lldb/Core/ValueObjectList.h" 19dea8cb4fSGreg Clayton #include "lldb/Core/ValueObjectVariable.h" 206f3533fbSEnrico Granata #include "lldb/Symbol/SymbolVendor.h" 21dea8cb4fSGreg Clayton #include "lldb/Symbol/VariableList.h" 22dea8cb4fSGreg Clayton #include "lldb/Target/Target.h" 2330fdc8d8SChris Lattner 2430fdc8d8SChris Lattner using namespace lldb; 25ceb6b139SCaroline Tice using namespace lldb_private; 2630fdc8d8SChris Lattner 2730fdc8d8SChris Lattner 2830fdc8d8SChris Lattner SBModule::SBModule () : 296611103cSGreg Clayton m_opaque_sp () 3030fdc8d8SChris Lattner { 3130fdc8d8SChris Lattner } 3230fdc8d8SChris Lattner 3330fdc8d8SChris Lattner SBModule::SBModule (const lldb::ModuleSP& module_sp) : 346611103cSGreg Clayton m_opaque_sp (module_sp) 3530fdc8d8SChris Lattner { 3630fdc8d8SChris Lattner } 3730fdc8d8SChris Lattner 38efabb123SGreg Clayton SBModule::SBModule(const SBModule &rhs) : 39efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 40efabb123SGreg Clayton { 41efabb123SGreg Clayton } 42efabb123SGreg Clayton 43efabb123SGreg Clayton const SBModule & 44efabb123SGreg Clayton SBModule::operator = (const SBModule &rhs) 45efabb123SGreg Clayton { 46efabb123SGreg Clayton if (this != &rhs) 47efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 48efabb123SGreg Clayton return *this; 49efabb123SGreg Clayton } 50efabb123SGreg Clayton 5130fdc8d8SChris Lattner SBModule::~SBModule () 5230fdc8d8SChris Lattner { 5330fdc8d8SChris Lattner } 5430fdc8d8SChris Lattner 5530fdc8d8SChris Lattner bool 5630fdc8d8SChris Lattner SBModule::IsValid () const 5730fdc8d8SChris Lattner { 586611103cSGreg Clayton return m_opaque_sp.get() != NULL; 5930fdc8d8SChris Lattner } 6030fdc8d8SChris Lattner 615d3bca4eSJim Ingham void 625d3bca4eSJim Ingham SBModule::Clear() 635d3bca4eSJim Ingham { 645d3bca4eSJim Ingham m_opaque_sp.reset(); 655d3bca4eSJim Ingham } 665d3bca4eSJim Ingham 6730fdc8d8SChris Lattner SBFileSpec 6830fdc8d8SChris Lattner SBModule::GetFileSpec () const 6930fdc8d8SChris Lattner { 702d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 71ceb6b139SCaroline Tice 7230fdc8d8SChris Lattner SBFileSpec file_spec; 736611103cSGreg Clayton if (m_opaque_sp) 746611103cSGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetFileSpec()); 75ceb6b139SCaroline Tice 76ceb6b139SCaroline Tice if (log) 77ceb6b139SCaroline Tice { 78cfd1acedSGreg Clayton log->Printf ("SBModule(%p)::GetFileSpec () => SBFileSpec(%p)", 79cfd1acedSGreg Clayton m_opaque_sp.get(), file_spec.get()); 80ceb6b139SCaroline Tice } 81ceb6b139SCaroline Tice 8230fdc8d8SChris Lattner return file_spec; 8330fdc8d8SChris Lattner } 8430fdc8d8SChris Lattner 852289fa48SGreg Clayton lldb::SBFileSpec 862289fa48SGreg Clayton SBModule::GetPlatformFileSpec () const 872289fa48SGreg Clayton { 882289fa48SGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 892289fa48SGreg Clayton 902289fa48SGreg Clayton SBFileSpec file_spec; 912289fa48SGreg Clayton if (m_opaque_sp) 922289fa48SGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetPlatformFileSpec()); 932289fa48SGreg Clayton 942289fa48SGreg Clayton if (log) 952289fa48SGreg Clayton { 962289fa48SGreg Clayton log->Printf ("SBModule(%p)::GetPlatformFileSpec () => SBFileSpec(%p)", 972289fa48SGreg Clayton m_opaque_sp.get(), file_spec.get()); 982289fa48SGreg Clayton } 992289fa48SGreg Clayton 1002289fa48SGreg Clayton return file_spec; 1012289fa48SGreg Clayton 1022289fa48SGreg Clayton } 1032289fa48SGreg Clayton 1042289fa48SGreg Clayton bool 1052289fa48SGreg Clayton SBModule::SetPlatformFileSpec (const lldb::SBFileSpec &platform_file) 1062289fa48SGreg Clayton { 1072289fa48SGreg Clayton bool result = false; 1082289fa48SGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1092289fa48SGreg Clayton 1102289fa48SGreg Clayton if (m_opaque_sp) 1112289fa48SGreg Clayton { 1122289fa48SGreg Clayton m_opaque_sp->SetPlatformFileSpec(*platform_file); 1132289fa48SGreg Clayton result = true; 1142289fa48SGreg Clayton } 1152289fa48SGreg Clayton 1162289fa48SGreg Clayton if (log) 1172289fa48SGreg Clayton { 1182289fa48SGreg Clayton log->Printf ("SBModule(%p)::SetPlatformFileSpec (SBFileSpec(%p (%s%s%s)) => %i", 1192289fa48SGreg Clayton m_opaque_sp.get(), 1202289fa48SGreg Clayton platform_file.get(), 1212289fa48SGreg Clayton platform_file->GetDirectory().GetCString(), 1222289fa48SGreg Clayton platform_file->GetDirectory() ? "/" : "", 1232289fa48SGreg Clayton platform_file->GetFilename().GetCString(), 1242289fa48SGreg Clayton result); 1252289fa48SGreg Clayton } 1262289fa48SGreg Clayton return result; 1272289fa48SGreg Clayton } 1282289fa48SGreg Clayton 1292289fa48SGreg Clayton 1302289fa48SGreg Clayton 13130fdc8d8SChris Lattner const uint8_t * 13230fdc8d8SChris Lattner SBModule::GetUUIDBytes () const 13330fdc8d8SChris Lattner { 1342d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 135ceb6b139SCaroline Tice 1364838131bSGreg Clayton const uint8_t *uuid_bytes = NULL; 1376611103cSGreg Clayton if (m_opaque_sp) 1384838131bSGreg Clayton uuid_bytes = (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 139ceb6b139SCaroline Tice 140ceb6b139SCaroline Tice if (log) 1414838131bSGreg Clayton { 1424838131bSGreg Clayton if (uuid_bytes) 1434838131bSGreg Clayton { 1444838131bSGreg Clayton StreamString s; 1454838131bSGreg Clayton m_opaque_sp->GetUUID().Dump (&s); 1464838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => %s", m_opaque_sp.get(), s.GetData()); 1474838131bSGreg Clayton } 1484838131bSGreg Clayton else 1494838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => NULL", m_opaque_sp.get()); 1504838131bSGreg Clayton } 1514838131bSGreg Clayton return uuid_bytes; 15230fdc8d8SChris Lattner } 15330fdc8d8SChris Lattner 15430fdc8d8SChris Lattner 155df2963edSJohnny Chen const char * 156df2963edSJohnny Chen SBModule::GetUUIDString () const 157df2963edSJohnny Chen { 158df2963edSJohnny Chen LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 159df2963edSJohnny Chen 160df2963edSJohnny Chen static char uuid_string[80]; 161df2963edSJohnny Chen const char * uuid_c_string = NULL; 162df2963edSJohnny Chen if (m_opaque_sp) 163df2963edSJohnny Chen uuid_c_string = (const char *)m_opaque_sp->GetUUID().GetAsCString(uuid_string, sizeof(uuid_string)); 164df2963edSJohnny Chen 165df2963edSJohnny Chen if (log) 166df2963edSJohnny Chen { 167df2963edSJohnny Chen if (uuid_c_string) 168df2963edSJohnny Chen { 169df2963edSJohnny Chen StreamString s; 170df2963edSJohnny Chen m_opaque_sp->GetUUID().Dump (&s); 171df2963edSJohnny Chen log->Printf ("SBModule(%p)::GetUUIDString () => %s", m_opaque_sp.get(), s.GetData()); 172df2963edSJohnny Chen } 173df2963edSJohnny Chen else 174df2963edSJohnny Chen log->Printf ("SBModule(%p)::GetUUIDString () => NULL", m_opaque_sp.get()); 175df2963edSJohnny Chen } 176df2963edSJohnny Chen return uuid_c_string; 177df2963edSJohnny Chen } 178df2963edSJohnny Chen 179df2963edSJohnny Chen 18030fdc8d8SChris Lattner bool 18130fdc8d8SChris Lattner SBModule::operator == (const SBModule &rhs) const 18230fdc8d8SChris Lattner { 1836611103cSGreg Clayton if (m_opaque_sp) 1846611103cSGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 18530fdc8d8SChris Lattner return false; 18630fdc8d8SChris Lattner } 18730fdc8d8SChris Lattner 18830fdc8d8SChris Lattner bool 18930fdc8d8SChris Lattner SBModule::operator != (const SBModule &rhs) const 19030fdc8d8SChris Lattner { 1916611103cSGreg Clayton if (m_opaque_sp) 1926611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 19330fdc8d8SChris Lattner return false; 19430fdc8d8SChris Lattner } 19530fdc8d8SChris Lattner 196*acdbe816SGreg Clayton ModuleSP 197*acdbe816SGreg Clayton SBModule::GetSP () const 198cac9c5f9SGreg Clayton { 199cac9c5f9SGreg Clayton return m_opaque_sp; 200cac9c5f9SGreg Clayton } 20130fdc8d8SChris Lattner 20230fdc8d8SChris Lattner void 203*acdbe816SGreg Clayton SBModule::SetSP (const ModuleSP &module_sp) 20430fdc8d8SChris Lattner { 2056611103cSGreg Clayton m_opaque_sp = module_sp; 20630fdc8d8SChris Lattner } 20730fdc8d8SChris Lattner 208cac9c5f9SGreg Clayton SBAddress 209cac9c5f9SGreg Clayton SBModule::ResolveFileAddress (lldb::addr_t vm_addr) 21009960031SGreg Clayton { 211cac9c5f9SGreg Clayton lldb::SBAddress sb_addr; 212cac9c5f9SGreg Clayton if (m_opaque_sp) 213cac9c5f9SGreg Clayton { 214cac9c5f9SGreg Clayton Address addr; 215cac9c5f9SGreg Clayton if (m_opaque_sp->ResolveFileAddress (vm_addr, addr)) 216cac9c5f9SGreg Clayton sb_addr.ref() = addr; 217cac9c5f9SGreg Clayton } 218cac9c5f9SGreg Clayton return sb_addr; 21909960031SGreg Clayton } 22009960031SGreg Clayton 22109960031SGreg Clayton SBSymbolContext 22209960031SGreg Clayton SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 22309960031SGreg Clayton { 22409960031SGreg Clayton SBSymbolContext sb_sc; 22509960031SGreg Clayton if (m_opaque_sp && addr.IsValid()) 22600e6fbfeSGreg Clayton m_opaque_sp->ResolveSymbolContextForAddress (addr.ref(), resolve_scope, *sb_sc); 22709960031SGreg Clayton return sb_sc; 22809960031SGreg Clayton } 22909960031SGreg Clayton 230dde9cff3SCaroline Tice bool 231dde9cff3SCaroline Tice SBModule::GetDescription (SBStream &description) 232dde9cff3SCaroline Tice { 233da7bc7d0SGreg Clayton Stream &strm = description.ref(); 234da7bc7d0SGreg Clayton 235dde9cff3SCaroline Tice if (m_opaque_sp) 236dde9cff3SCaroline Tice { 237da7bc7d0SGreg Clayton m_opaque_sp->GetDescription (&strm); 238dde9cff3SCaroline Tice } 239dde9cff3SCaroline Tice else 240da7bc7d0SGreg Clayton strm.PutCString ("No value"); 241dde9cff3SCaroline Tice 242dde9cff3SCaroline Tice return true; 243dde9cff3SCaroline Tice } 244bbdabce2SGreg Clayton 245bbdabce2SGreg Clayton size_t 246bbdabce2SGreg Clayton SBModule::GetNumSymbols () 247bbdabce2SGreg Clayton { 248bbdabce2SGreg Clayton if (m_opaque_sp) 249bbdabce2SGreg Clayton { 250bbdabce2SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 251bbdabce2SGreg Clayton if (obj_file) 252bbdabce2SGreg Clayton { 253bbdabce2SGreg Clayton Symtab *symtab = obj_file->GetSymtab(); 254bbdabce2SGreg Clayton if (symtab) 255bbdabce2SGreg Clayton return symtab->GetNumSymbols(); 256bbdabce2SGreg Clayton } 257bbdabce2SGreg Clayton } 258bbdabce2SGreg Clayton return 0; 259bbdabce2SGreg Clayton } 260bbdabce2SGreg Clayton 261bbdabce2SGreg Clayton SBSymbol 262bbdabce2SGreg Clayton SBModule::GetSymbolAtIndex (size_t idx) 263bbdabce2SGreg Clayton { 264bbdabce2SGreg Clayton SBSymbol sb_symbol; 265bbdabce2SGreg Clayton if (m_opaque_sp) 266bbdabce2SGreg Clayton { 267bbdabce2SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 268bbdabce2SGreg Clayton if (obj_file) 269bbdabce2SGreg Clayton { 270bbdabce2SGreg Clayton Symtab *symtab = obj_file->GetSymtab(); 271bbdabce2SGreg Clayton if (symtab) 272bbdabce2SGreg Clayton sb_symbol.SetSymbol(symtab->SymbolAtIndex (idx)); 273bbdabce2SGreg Clayton } 274bbdabce2SGreg Clayton } 275bbdabce2SGreg Clayton return sb_symbol; 276bbdabce2SGreg Clayton } 277fe356d35SGreg Clayton 278cac9c5f9SGreg Clayton size_t 279cac9c5f9SGreg Clayton SBModule::GetNumSections () 280cac9c5f9SGreg Clayton { 281cac9c5f9SGreg Clayton if (m_opaque_sp) 282cac9c5f9SGreg Clayton { 283cac9c5f9SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 284cac9c5f9SGreg Clayton if (obj_file) 285cac9c5f9SGreg Clayton { 286cac9c5f9SGreg Clayton SectionList *section_list = obj_file->GetSectionList (); 287cac9c5f9SGreg Clayton if (section_list) 288cac9c5f9SGreg Clayton return section_list->GetSize(); 289cac9c5f9SGreg Clayton } 290cac9c5f9SGreg Clayton } 291cac9c5f9SGreg Clayton return 0; 292cac9c5f9SGreg Clayton } 293cac9c5f9SGreg Clayton 294cac9c5f9SGreg Clayton SBSection 295cac9c5f9SGreg Clayton SBModule::GetSectionAtIndex (size_t idx) 296cac9c5f9SGreg Clayton { 297cac9c5f9SGreg Clayton SBSection sb_section; 298cac9c5f9SGreg Clayton if (m_opaque_sp) 299cac9c5f9SGreg Clayton { 300cac9c5f9SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 301cac9c5f9SGreg Clayton if (obj_file) 302cac9c5f9SGreg Clayton { 303cac9c5f9SGreg Clayton SectionList *section_list = obj_file->GetSectionList (); 304cac9c5f9SGreg Clayton 305cac9c5f9SGreg Clayton if (section_list) 306cac9c5f9SGreg Clayton sb_section.SetSection(section_list->GetSectionAtIndex (idx).get()); 307cac9c5f9SGreg Clayton } 308cac9c5f9SGreg Clayton } 309cac9c5f9SGreg Clayton return sb_section; 310cac9c5f9SGreg Clayton } 311cac9c5f9SGreg Clayton 312fe356d35SGreg Clayton uint32_t 313fe356d35SGreg Clayton SBModule::FindFunctions (const char *name, 314fe356d35SGreg Clayton uint32_t name_type_mask, 315fe356d35SGreg Clayton bool append, 316fe356d35SGreg Clayton lldb::SBSymbolContextList& sc_list) 317fe356d35SGreg Clayton { 318fe356d35SGreg Clayton if (!append) 319fe356d35SGreg Clayton sc_list.Clear(); 3204efffd9aSJohnny Chen if (name && m_opaque_sp) 321fe356d35SGreg Clayton { 322fe356d35SGreg Clayton const bool symbols_ok = true; 323fe356d35SGreg Clayton return m_opaque_sp->FindFunctions (ConstString(name), 324b6d70ebcSSean Callanan NULL, 325fe356d35SGreg Clayton name_type_mask, 326fe356d35SGreg Clayton symbols_ok, 327fe356d35SGreg Clayton append, 328fe356d35SGreg Clayton *sc_list); 329fe356d35SGreg Clayton } 330fe356d35SGreg Clayton return 0; 331fe356d35SGreg Clayton } 332fe356d35SGreg Clayton 333dea8cb4fSGreg Clayton 334dea8cb4fSGreg Clayton SBValueList 335dea8cb4fSGreg Clayton SBModule::FindGlobalVariables (SBTarget &target, const char *name, uint32_t max_matches) 336dea8cb4fSGreg Clayton { 337dea8cb4fSGreg Clayton SBValueList sb_value_list; 3384efffd9aSJohnny Chen if (name && m_opaque_sp) 339dea8cb4fSGreg Clayton { 340dea8cb4fSGreg Clayton VariableList variable_list; 341dea8cb4fSGreg Clayton const uint32_t match_count = m_opaque_sp->FindGlobalVariables (ConstString (name), 342b6d70ebcSSean Callanan NULL, 343dea8cb4fSGreg Clayton false, 344dea8cb4fSGreg Clayton max_matches, 345dea8cb4fSGreg Clayton variable_list); 346dea8cb4fSGreg Clayton 347dea8cb4fSGreg Clayton if (match_count > 0) 348dea8cb4fSGreg Clayton { 349dea8cb4fSGreg Clayton ValueObjectList &value_object_list = sb_value_list.ref(); 350dea8cb4fSGreg Clayton for (uint32_t i=0; i<match_count; ++i) 351dea8cb4fSGreg Clayton { 352dea8cb4fSGreg Clayton lldb::ValueObjectSP valobj_sp; 353b9556accSGreg Clayton TargetSP target_sp (target.GetSP()); 354b9556accSGreg Clayton valobj_sp = ValueObjectVariable::Create (target_sp.get(), variable_list.GetVariableAtIndex(i)); 355dea8cb4fSGreg Clayton if (valobj_sp) 356dea8cb4fSGreg Clayton value_object_list.Append(valobj_sp); 357dea8cb4fSGreg Clayton } 358dea8cb4fSGreg Clayton } 359dea8cb4fSGreg Clayton } 360dea8cb4fSGreg Clayton 361dea8cb4fSGreg Clayton return sb_value_list; 362dea8cb4fSGreg Clayton } 3636f3533fbSEnrico Granata 3646f3533fbSEnrico Granata lldb::SBType 3656f3533fbSEnrico Granata SBModule::FindFirstType (const char *name_cstr) 3666f3533fbSEnrico Granata { 367fe42ac4dSGreg Clayton SBType sb_type; 3684efffd9aSJohnny Chen if (name_cstr && IsValid()) 369fe42ac4dSGreg Clayton { 3706f3533fbSEnrico Granata SymbolContext sc; 3716f3533fbSEnrico Granata TypeList type_list; 3726f3533fbSEnrico Granata uint32_t num_matches = 0; 3736f3533fbSEnrico Granata ConstString name(name_cstr); 3746f3533fbSEnrico Granata 3756f3533fbSEnrico Granata num_matches = m_opaque_sp->FindTypes(sc, 3766f3533fbSEnrico Granata name, 377b6d70ebcSSean Callanan NULL, 3786f3533fbSEnrico Granata false, 3796f3533fbSEnrico Granata 1, 3806f3533fbSEnrico Granata type_list); 3816f3533fbSEnrico Granata 3826f3533fbSEnrico Granata if (num_matches) 383fe42ac4dSGreg Clayton sb_type = lldb::SBType(type_list.GetTypeAtIndex(0)); 3846f3533fbSEnrico Granata } 385fe42ac4dSGreg Clayton return sb_type; 3866f3533fbSEnrico Granata } 3876f3533fbSEnrico Granata 3886f3533fbSEnrico Granata lldb::SBTypeList 3896f3533fbSEnrico Granata SBModule::FindTypes (const char *type) 3906f3533fbSEnrico Granata { 3916f3533fbSEnrico Granata 3926f3533fbSEnrico Granata SBTypeList retval; 3936f3533fbSEnrico Granata 3944efffd9aSJohnny Chen if (type && IsValid()) 395fe42ac4dSGreg Clayton { 3966f3533fbSEnrico Granata SymbolContext sc; 3976f3533fbSEnrico Granata TypeList type_list; 3986f3533fbSEnrico Granata uint32_t num_matches = 0; 3996f3533fbSEnrico Granata ConstString name(type); 4006f3533fbSEnrico Granata 4016f3533fbSEnrico Granata num_matches = m_opaque_sp->FindTypes(sc, 4026f3533fbSEnrico Granata name, 403b6d70ebcSSean Callanan NULL, 4046f3533fbSEnrico Granata false, 4056f3533fbSEnrico Granata UINT32_MAX, 4066f3533fbSEnrico Granata type_list); 4076f3533fbSEnrico Granata 4086f3533fbSEnrico Granata for (size_t idx = 0; idx < num_matches; idx++) 4096f3533fbSEnrico Granata { 410fe42ac4dSGreg Clayton TypeSP type_sp (type_list.GetTypeAtIndex(idx)); 411fe42ac4dSGreg Clayton if (type_sp) 412fe42ac4dSGreg Clayton retval.Append(SBType(type_sp)); 413fe42ac4dSGreg Clayton } 4146f3533fbSEnrico Granata } 4156f3533fbSEnrico Granata 4166f3533fbSEnrico Granata return retval; 4176f3533fbSEnrico Granata } 418cac9c5f9SGreg Clayton 419cac9c5f9SGreg Clayton 420cac9c5f9SGreg Clayton SBSection 421cac9c5f9SGreg Clayton SBModule::FindSection (const char *sect_name) 422cac9c5f9SGreg Clayton { 423cac9c5f9SGreg Clayton SBSection sb_section; 424cac9c5f9SGreg Clayton 4254efffd9aSJohnny Chen if (sect_name && IsValid()) 426cac9c5f9SGreg Clayton { 427cac9c5f9SGreg Clayton ObjectFile *objfile = m_opaque_sp->GetObjectFile(); 428cac9c5f9SGreg Clayton if (objfile) 429cac9c5f9SGreg Clayton { 430cac9c5f9SGreg Clayton SectionList *section_list = objfile->GetSectionList(); 431cac9c5f9SGreg Clayton if (section_list) 432cac9c5f9SGreg Clayton { 433cac9c5f9SGreg Clayton ConstString const_sect_name(sect_name); 434cac9c5f9SGreg Clayton SectionSP section_sp (section_list->FindSectionByName(const_sect_name)); 435cac9c5f9SGreg Clayton if (section_sp) 436cac9c5f9SGreg Clayton { 437cac9c5f9SGreg Clayton sb_section.SetSection(section_sp.get()); 438cac9c5f9SGreg Clayton } 439cac9c5f9SGreg Clayton } 440cac9c5f9SGreg Clayton } 441cac9c5f9SGreg Clayton } 442cac9c5f9SGreg Clayton return sb_section; 443cac9c5f9SGreg Clayton } 444cac9c5f9SGreg Clayton 44513d1950aSGreg Clayton lldb::ByteOrder 44613d1950aSGreg Clayton SBModule::GetByteOrder () 44713d1950aSGreg Clayton { 44813d1950aSGreg Clayton if (m_opaque_sp) 44913d1950aSGreg Clayton return m_opaque_sp->GetArchitecture().GetByteOrder(); 45013d1950aSGreg Clayton return eByteOrderInvalid; 45113d1950aSGreg Clayton } 45213d1950aSGreg Clayton 45313d1950aSGreg Clayton const char * 45413d1950aSGreg Clayton SBModule::GetTriple () 45513d1950aSGreg Clayton { 45613d1950aSGreg Clayton if (m_opaque_sp) 45713d1950aSGreg Clayton { 45813d1950aSGreg Clayton std::string triple (m_opaque_sp->GetArchitecture().GetTriple().str()); 45913d1950aSGreg Clayton // Unique the string so we don't run into ownership issues since 46013d1950aSGreg Clayton // the const strings put the string into the string pool once and 46113d1950aSGreg Clayton // the strings never comes out 46213d1950aSGreg Clayton ConstString const_triple (triple.c_str()); 46313d1950aSGreg Clayton return const_triple.GetCString(); 46413d1950aSGreg Clayton } 46513d1950aSGreg Clayton return NULL; 46613d1950aSGreg Clayton } 46713d1950aSGreg Clayton 46813d1950aSGreg Clayton uint32_t 46913d1950aSGreg Clayton SBModule::GetAddressByteSize() 47013d1950aSGreg Clayton { 47113d1950aSGreg Clayton if (m_opaque_sp) 47213d1950aSGreg Clayton return m_opaque_sp->GetArchitecture().GetAddressByteSize(); 47313d1950aSGreg Clayton return sizeof(void*); 47413d1950aSGreg Clayton } 47513d1950aSGreg Clayton 476