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" 13c9660546SGreg Clayton #include "lldb/API/SBProcess.h" 14dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 15fe356d35SGreg Clayton #include "lldb/API/SBSymbolContextList.h" 1630fdc8d8SChris Lattner #include "lldb/Core/Module.h" 17ceb6b139SCaroline Tice #include "lldb/Core/Log.h" 1838adbbb8SGreg Clayton #include "lldb/Core/StreamString.h" 19dea8cb4fSGreg Clayton #include "lldb/Core/ValueObjectList.h" 20dea8cb4fSGreg Clayton #include "lldb/Core/ValueObjectVariable.h" 216f3533fbSEnrico Granata #include "lldb/Symbol/SymbolVendor.h" 22dea8cb4fSGreg Clayton #include "lldb/Symbol/VariableList.h" 23dea8cb4fSGreg Clayton #include "lldb/Target/Target.h" 2430fdc8d8SChris Lattner 2530fdc8d8SChris Lattner using namespace lldb; 26ceb6b139SCaroline Tice using namespace lldb_private; 2730fdc8d8SChris Lattner 2830fdc8d8SChris Lattner 2930fdc8d8SChris Lattner SBModule::SBModule () : 306611103cSGreg Clayton m_opaque_sp () 3130fdc8d8SChris Lattner { 3230fdc8d8SChris Lattner } 3330fdc8d8SChris Lattner 3430fdc8d8SChris Lattner SBModule::SBModule (const lldb::ModuleSP& module_sp) : 356611103cSGreg Clayton m_opaque_sp (module_sp) 3630fdc8d8SChris Lattner { 3730fdc8d8SChris Lattner } 3830fdc8d8SChris Lattner 39efabb123SGreg Clayton SBModule::SBModule(const SBModule &rhs) : 40efabb123SGreg Clayton m_opaque_sp (rhs.m_opaque_sp) 41efabb123SGreg Clayton { 42efabb123SGreg Clayton } 43efabb123SGreg Clayton 44c9660546SGreg Clayton SBModule::SBModule (lldb::SBProcess &process, lldb::addr_t header_addr) : 45c9660546SGreg Clayton m_opaque_sp () 46c9660546SGreg Clayton { 47c9660546SGreg Clayton ProcessSP process_sp (process.GetSP()); 48c9660546SGreg Clayton if (process_sp) 49c9660546SGreg Clayton m_opaque_sp = process_sp->ReadModuleFromMemory (FileSpec(), header_addr); 50c9660546SGreg Clayton } 51c9660546SGreg Clayton 52efabb123SGreg Clayton const SBModule & 53efabb123SGreg Clayton SBModule::operator = (const SBModule &rhs) 54efabb123SGreg Clayton { 55efabb123SGreg Clayton if (this != &rhs) 56efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 57efabb123SGreg Clayton return *this; 58efabb123SGreg Clayton } 59efabb123SGreg Clayton 6030fdc8d8SChris Lattner SBModule::~SBModule () 6130fdc8d8SChris Lattner { 6230fdc8d8SChris Lattner } 6330fdc8d8SChris Lattner 6430fdc8d8SChris Lattner bool 6530fdc8d8SChris Lattner SBModule::IsValid () const 6630fdc8d8SChris Lattner { 676611103cSGreg Clayton return m_opaque_sp.get() != NULL; 6830fdc8d8SChris Lattner } 6930fdc8d8SChris Lattner 705d3bca4eSJim Ingham void 715d3bca4eSJim Ingham SBModule::Clear() 725d3bca4eSJim Ingham { 735d3bca4eSJim Ingham m_opaque_sp.reset(); 745d3bca4eSJim Ingham } 755d3bca4eSJim Ingham 7630fdc8d8SChris Lattner SBFileSpec 7730fdc8d8SChris Lattner SBModule::GetFileSpec () const 7830fdc8d8SChris Lattner { 792d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 80ceb6b139SCaroline Tice 8130fdc8d8SChris Lattner SBFileSpec file_spec; 826611103cSGreg Clayton if (m_opaque_sp) 836611103cSGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetFileSpec()); 84ceb6b139SCaroline Tice 85ceb6b139SCaroline Tice if (log) 86ceb6b139SCaroline Tice { 87cfd1acedSGreg Clayton log->Printf ("SBModule(%p)::GetFileSpec () => SBFileSpec(%p)", 88cfd1acedSGreg Clayton m_opaque_sp.get(), file_spec.get()); 89ceb6b139SCaroline Tice } 90ceb6b139SCaroline Tice 9130fdc8d8SChris Lattner return file_spec; 9230fdc8d8SChris Lattner } 9330fdc8d8SChris Lattner 942289fa48SGreg Clayton lldb::SBFileSpec 952289fa48SGreg Clayton SBModule::GetPlatformFileSpec () const 962289fa48SGreg Clayton { 972289fa48SGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 982289fa48SGreg Clayton 992289fa48SGreg Clayton SBFileSpec file_spec; 1002289fa48SGreg Clayton if (m_opaque_sp) 1012289fa48SGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetPlatformFileSpec()); 1022289fa48SGreg Clayton 1032289fa48SGreg Clayton if (log) 1042289fa48SGreg Clayton { 1052289fa48SGreg Clayton log->Printf ("SBModule(%p)::GetPlatformFileSpec () => SBFileSpec(%p)", 1062289fa48SGreg Clayton m_opaque_sp.get(), file_spec.get()); 1072289fa48SGreg Clayton } 1082289fa48SGreg Clayton 1092289fa48SGreg Clayton return file_spec; 1102289fa48SGreg Clayton 1112289fa48SGreg Clayton } 1122289fa48SGreg Clayton 1132289fa48SGreg Clayton bool 1142289fa48SGreg Clayton SBModule::SetPlatformFileSpec (const lldb::SBFileSpec &platform_file) 1152289fa48SGreg Clayton { 1162289fa48SGreg Clayton bool result = false; 1172289fa48SGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1182289fa48SGreg Clayton 1192289fa48SGreg Clayton if (m_opaque_sp) 1202289fa48SGreg Clayton { 1212289fa48SGreg Clayton m_opaque_sp->SetPlatformFileSpec(*platform_file); 1222289fa48SGreg Clayton result = true; 1232289fa48SGreg Clayton } 1242289fa48SGreg Clayton 1252289fa48SGreg Clayton if (log) 1262289fa48SGreg Clayton { 1272289fa48SGreg Clayton log->Printf ("SBModule(%p)::SetPlatformFileSpec (SBFileSpec(%p (%s%s%s)) => %i", 1282289fa48SGreg Clayton m_opaque_sp.get(), 1292289fa48SGreg Clayton platform_file.get(), 1302289fa48SGreg Clayton platform_file->GetDirectory().GetCString(), 1312289fa48SGreg Clayton platform_file->GetDirectory() ? "/" : "", 1322289fa48SGreg Clayton platform_file->GetFilename().GetCString(), 1332289fa48SGreg Clayton result); 1342289fa48SGreg Clayton } 1352289fa48SGreg Clayton return result; 1362289fa48SGreg Clayton } 1372289fa48SGreg Clayton 1382289fa48SGreg Clayton 1392289fa48SGreg Clayton 14030fdc8d8SChris Lattner const uint8_t * 14130fdc8d8SChris Lattner SBModule::GetUUIDBytes () const 14230fdc8d8SChris Lattner { 1432d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 144ceb6b139SCaroline Tice 1454838131bSGreg Clayton const uint8_t *uuid_bytes = NULL; 1466611103cSGreg Clayton if (m_opaque_sp) 1474838131bSGreg Clayton uuid_bytes = (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 148ceb6b139SCaroline Tice 149ceb6b139SCaroline Tice if (log) 1504838131bSGreg Clayton { 1514838131bSGreg Clayton if (uuid_bytes) 1524838131bSGreg Clayton { 1534838131bSGreg Clayton StreamString s; 1544838131bSGreg Clayton m_opaque_sp->GetUUID().Dump (&s); 1554838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => %s", m_opaque_sp.get(), s.GetData()); 1564838131bSGreg Clayton } 1574838131bSGreg Clayton else 1584838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => NULL", m_opaque_sp.get()); 1594838131bSGreg Clayton } 1604838131bSGreg Clayton return uuid_bytes; 16130fdc8d8SChris Lattner } 16230fdc8d8SChris Lattner 16330fdc8d8SChris Lattner 164df2963edSJohnny Chen const char * 165df2963edSJohnny Chen SBModule::GetUUIDString () const 166df2963edSJohnny Chen { 167df2963edSJohnny Chen LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 168df2963edSJohnny Chen 169df2963edSJohnny Chen static char uuid_string[80]; 170df2963edSJohnny Chen const char * uuid_c_string = NULL; 171df2963edSJohnny Chen if (m_opaque_sp) 172df2963edSJohnny Chen uuid_c_string = (const char *)m_opaque_sp->GetUUID().GetAsCString(uuid_string, sizeof(uuid_string)); 173df2963edSJohnny Chen 174df2963edSJohnny Chen if (log) 175df2963edSJohnny Chen { 176df2963edSJohnny Chen if (uuid_c_string) 177df2963edSJohnny Chen { 178df2963edSJohnny Chen StreamString s; 179df2963edSJohnny Chen m_opaque_sp->GetUUID().Dump (&s); 180df2963edSJohnny Chen log->Printf ("SBModule(%p)::GetUUIDString () => %s", m_opaque_sp.get(), s.GetData()); 181df2963edSJohnny Chen } 182df2963edSJohnny Chen else 183df2963edSJohnny Chen log->Printf ("SBModule(%p)::GetUUIDString () => NULL", m_opaque_sp.get()); 184df2963edSJohnny Chen } 185df2963edSJohnny Chen return uuid_c_string; 186df2963edSJohnny Chen } 187df2963edSJohnny Chen 188df2963edSJohnny Chen 18930fdc8d8SChris Lattner bool 19030fdc8d8SChris Lattner SBModule::operator == (const SBModule &rhs) const 19130fdc8d8SChris Lattner { 1926611103cSGreg Clayton if (m_opaque_sp) 1936611103cSGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 19430fdc8d8SChris Lattner return false; 19530fdc8d8SChris Lattner } 19630fdc8d8SChris Lattner 19730fdc8d8SChris Lattner bool 19830fdc8d8SChris Lattner SBModule::operator != (const SBModule &rhs) const 19930fdc8d8SChris Lattner { 2006611103cSGreg Clayton if (m_opaque_sp) 2016611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 20230fdc8d8SChris Lattner return false; 20330fdc8d8SChris Lattner } 20430fdc8d8SChris Lattner 205acdbe816SGreg Clayton ModuleSP 206acdbe816SGreg Clayton SBModule::GetSP () const 207cac9c5f9SGreg Clayton { 208cac9c5f9SGreg Clayton return m_opaque_sp; 209cac9c5f9SGreg Clayton } 21030fdc8d8SChris Lattner 21130fdc8d8SChris Lattner void 212acdbe816SGreg Clayton SBModule::SetSP (const ModuleSP &module_sp) 21330fdc8d8SChris Lattner { 2146611103cSGreg Clayton m_opaque_sp = module_sp; 21530fdc8d8SChris Lattner } 21630fdc8d8SChris Lattner 217cac9c5f9SGreg Clayton SBAddress 218cac9c5f9SGreg Clayton SBModule::ResolveFileAddress (lldb::addr_t vm_addr) 21909960031SGreg Clayton { 220cac9c5f9SGreg Clayton lldb::SBAddress sb_addr; 221cac9c5f9SGreg Clayton if (m_opaque_sp) 222cac9c5f9SGreg Clayton { 223cac9c5f9SGreg Clayton Address addr; 224cac9c5f9SGreg Clayton if (m_opaque_sp->ResolveFileAddress (vm_addr, addr)) 225cac9c5f9SGreg Clayton sb_addr.ref() = addr; 226cac9c5f9SGreg Clayton } 227cac9c5f9SGreg Clayton return sb_addr; 22809960031SGreg Clayton } 22909960031SGreg Clayton 23009960031SGreg Clayton SBSymbolContext 23109960031SGreg Clayton SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 23209960031SGreg Clayton { 23309960031SGreg Clayton SBSymbolContext sb_sc; 23409960031SGreg Clayton if (m_opaque_sp && addr.IsValid()) 23500e6fbfeSGreg Clayton m_opaque_sp->ResolveSymbolContextForAddress (addr.ref(), resolve_scope, *sb_sc); 23609960031SGreg Clayton return sb_sc; 23709960031SGreg Clayton } 23809960031SGreg Clayton 239dde9cff3SCaroline Tice bool 240dde9cff3SCaroline Tice SBModule::GetDescription (SBStream &description) 241dde9cff3SCaroline Tice { 242da7bc7d0SGreg Clayton Stream &strm = description.ref(); 243da7bc7d0SGreg Clayton 244dde9cff3SCaroline Tice if (m_opaque_sp) 245dde9cff3SCaroline Tice { 246da7bc7d0SGreg Clayton m_opaque_sp->GetDescription (&strm); 247dde9cff3SCaroline Tice } 248dde9cff3SCaroline Tice else 249da7bc7d0SGreg Clayton strm.PutCString ("No value"); 250dde9cff3SCaroline Tice 251dde9cff3SCaroline Tice return true; 252dde9cff3SCaroline Tice } 253bbdabce2SGreg Clayton 254bbdabce2SGreg Clayton size_t 255bbdabce2SGreg Clayton SBModule::GetNumSymbols () 256bbdabce2SGreg Clayton { 257bbdabce2SGreg Clayton if (m_opaque_sp) 258bbdabce2SGreg Clayton { 259bbdabce2SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 260bbdabce2SGreg Clayton if (obj_file) 261bbdabce2SGreg Clayton { 262bbdabce2SGreg Clayton Symtab *symtab = obj_file->GetSymtab(); 263bbdabce2SGreg Clayton if (symtab) 264bbdabce2SGreg Clayton return symtab->GetNumSymbols(); 265bbdabce2SGreg Clayton } 266bbdabce2SGreg Clayton } 267bbdabce2SGreg Clayton return 0; 268bbdabce2SGreg Clayton } 269bbdabce2SGreg Clayton 270bbdabce2SGreg Clayton SBSymbol 271bbdabce2SGreg Clayton SBModule::GetSymbolAtIndex (size_t idx) 272bbdabce2SGreg Clayton { 273bbdabce2SGreg Clayton SBSymbol sb_symbol; 274bbdabce2SGreg Clayton if (m_opaque_sp) 275bbdabce2SGreg Clayton { 276bbdabce2SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 277bbdabce2SGreg Clayton if (obj_file) 278bbdabce2SGreg Clayton { 279bbdabce2SGreg Clayton Symtab *symtab = obj_file->GetSymtab(); 280bbdabce2SGreg Clayton if (symtab) 281bbdabce2SGreg Clayton sb_symbol.SetSymbol(symtab->SymbolAtIndex (idx)); 282bbdabce2SGreg Clayton } 283bbdabce2SGreg Clayton } 284bbdabce2SGreg Clayton return sb_symbol; 285bbdabce2SGreg Clayton } 286fe356d35SGreg Clayton 287cac9c5f9SGreg Clayton size_t 288cac9c5f9SGreg Clayton SBModule::GetNumSections () 289cac9c5f9SGreg Clayton { 290cac9c5f9SGreg Clayton if (m_opaque_sp) 291cac9c5f9SGreg Clayton { 292cac9c5f9SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 293cac9c5f9SGreg Clayton if (obj_file) 294cac9c5f9SGreg Clayton { 295cac9c5f9SGreg Clayton SectionList *section_list = obj_file->GetSectionList (); 296cac9c5f9SGreg Clayton if (section_list) 297cac9c5f9SGreg Clayton return section_list->GetSize(); 298cac9c5f9SGreg Clayton } 299cac9c5f9SGreg Clayton } 300cac9c5f9SGreg Clayton return 0; 301cac9c5f9SGreg Clayton } 302cac9c5f9SGreg Clayton 303cac9c5f9SGreg Clayton SBSection 304cac9c5f9SGreg Clayton SBModule::GetSectionAtIndex (size_t idx) 305cac9c5f9SGreg Clayton { 306cac9c5f9SGreg Clayton SBSection sb_section; 307cac9c5f9SGreg Clayton if (m_opaque_sp) 308cac9c5f9SGreg Clayton { 309cac9c5f9SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 310cac9c5f9SGreg Clayton if (obj_file) 311cac9c5f9SGreg Clayton { 312cac9c5f9SGreg Clayton SectionList *section_list = obj_file->GetSectionList (); 313cac9c5f9SGreg Clayton 314cac9c5f9SGreg Clayton if (section_list) 315cac9c5f9SGreg Clayton sb_section.SetSection(section_list->GetSectionAtIndex (idx).get()); 316cac9c5f9SGreg Clayton } 317cac9c5f9SGreg Clayton } 318cac9c5f9SGreg Clayton return sb_section; 319cac9c5f9SGreg Clayton } 320cac9c5f9SGreg Clayton 3215569e64eSGreg Clayton lldb::SBSymbolContextList 322fe356d35SGreg Clayton SBModule::FindFunctions (const char *name, 3235569e64eSGreg Clayton uint32_t name_type_mask) 324fe356d35SGreg Clayton { 3255569e64eSGreg Clayton lldb::SBSymbolContextList sb_sc_list; 3264efffd9aSJohnny Chen if (name && m_opaque_sp) 327fe356d35SGreg Clayton { 3285569e64eSGreg Clayton const bool append = true; 329fe356d35SGreg Clayton const bool symbols_ok = true; 330*9df05fbbSSean Callanan const bool inlines_ok = true; 3315569e64eSGreg Clayton m_opaque_sp->FindFunctions (ConstString(name), 332b6d70ebcSSean Callanan NULL, 333fe356d35SGreg Clayton name_type_mask, 334fe356d35SGreg Clayton symbols_ok, 335*9df05fbbSSean Callanan inlines_ok, 336fe356d35SGreg Clayton append, 3375569e64eSGreg Clayton *sb_sc_list); 338fe356d35SGreg Clayton } 3395569e64eSGreg Clayton return sb_sc_list; 340fe356d35SGreg Clayton } 341fe356d35SGreg Clayton 342dea8cb4fSGreg Clayton 343dea8cb4fSGreg Clayton SBValueList 344dea8cb4fSGreg Clayton SBModule::FindGlobalVariables (SBTarget &target, const char *name, uint32_t max_matches) 345dea8cb4fSGreg Clayton { 346dea8cb4fSGreg Clayton SBValueList sb_value_list; 3474efffd9aSJohnny Chen if (name && m_opaque_sp) 348dea8cb4fSGreg Clayton { 349dea8cb4fSGreg Clayton VariableList variable_list; 350dea8cb4fSGreg Clayton const uint32_t match_count = m_opaque_sp->FindGlobalVariables (ConstString (name), 351b6d70ebcSSean Callanan NULL, 352dea8cb4fSGreg Clayton false, 353dea8cb4fSGreg Clayton max_matches, 354dea8cb4fSGreg Clayton variable_list); 355dea8cb4fSGreg Clayton 356dea8cb4fSGreg Clayton if (match_count > 0) 357dea8cb4fSGreg Clayton { 358dea8cb4fSGreg Clayton ValueObjectList &value_object_list = sb_value_list.ref(); 359dea8cb4fSGreg Clayton for (uint32_t i=0; i<match_count; ++i) 360dea8cb4fSGreg Clayton { 361dea8cb4fSGreg Clayton lldb::ValueObjectSP valobj_sp; 362b9556accSGreg Clayton TargetSP target_sp (target.GetSP()); 363b9556accSGreg Clayton valobj_sp = ValueObjectVariable::Create (target_sp.get(), variable_list.GetVariableAtIndex(i)); 364dea8cb4fSGreg Clayton if (valobj_sp) 365dea8cb4fSGreg Clayton value_object_list.Append(valobj_sp); 366dea8cb4fSGreg Clayton } 367dea8cb4fSGreg Clayton } 368dea8cb4fSGreg Clayton } 369dea8cb4fSGreg Clayton 370dea8cb4fSGreg Clayton return sb_value_list; 371dea8cb4fSGreg Clayton } 3726f3533fbSEnrico Granata 3736f3533fbSEnrico Granata lldb::SBType 3746f3533fbSEnrico Granata SBModule::FindFirstType (const char *name_cstr) 3756f3533fbSEnrico Granata { 376fe42ac4dSGreg Clayton SBType sb_type; 3774efffd9aSJohnny Chen if (name_cstr && IsValid()) 378fe42ac4dSGreg Clayton { 3796f3533fbSEnrico Granata SymbolContext sc; 3806f3533fbSEnrico Granata TypeList type_list; 3816f3533fbSEnrico Granata uint32_t num_matches = 0; 3826f3533fbSEnrico Granata ConstString name(name_cstr); 3836f3533fbSEnrico Granata 3846f3533fbSEnrico Granata num_matches = m_opaque_sp->FindTypes(sc, 3856f3533fbSEnrico Granata name, 386b6d70ebcSSean Callanan NULL, 3876f3533fbSEnrico Granata false, 3886f3533fbSEnrico Granata 1, 3896f3533fbSEnrico Granata type_list); 3906f3533fbSEnrico Granata 3916f3533fbSEnrico Granata if (num_matches) 392fe42ac4dSGreg Clayton sb_type = lldb::SBType(type_list.GetTypeAtIndex(0)); 3936f3533fbSEnrico Granata } 394fe42ac4dSGreg Clayton return sb_type; 3956f3533fbSEnrico Granata } 3966f3533fbSEnrico Granata 3976f3533fbSEnrico Granata lldb::SBTypeList 3986f3533fbSEnrico Granata SBModule::FindTypes (const char *type) 3996f3533fbSEnrico Granata { 4006f3533fbSEnrico Granata 4016f3533fbSEnrico Granata SBTypeList retval; 4026f3533fbSEnrico Granata 4034efffd9aSJohnny Chen if (type && IsValid()) 404fe42ac4dSGreg Clayton { 4056f3533fbSEnrico Granata SymbolContext sc; 4066f3533fbSEnrico Granata TypeList type_list; 4076f3533fbSEnrico Granata uint32_t num_matches = 0; 4086f3533fbSEnrico Granata ConstString name(type); 4096f3533fbSEnrico Granata 4106f3533fbSEnrico Granata num_matches = m_opaque_sp->FindTypes(sc, 4116f3533fbSEnrico Granata name, 412b6d70ebcSSean Callanan NULL, 4136f3533fbSEnrico Granata false, 4146f3533fbSEnrico Granata UINT32_MAX, 4156f3533fbSEnrico Granata type_list); 4166f3533fbSEnrico Granata 4176f3533fbSEnrico Granata for (size_t idx = 0; idx < num_matches; idx++) 4186f3533fbSEnrico Granata { 419fe42ac4dSGreg Clayton TypeSP type_sp (type_list.GetTypeAtIndex(idx)); 420fe42ac4dSGreg Clayton if (type_sp) 421fe42ac4dSGreg Clayton retval.Append(SBType(type_sp)); 422fe42ac4dSGreg Clayton } 4236f3533fbSEnrico Granata } 4246f3533fbSEnrico Granata 4256f3533fbSEnrico Granata return retval; 4266f3533fbSEnrico Granata } 427cac9c5f9SGreg Clayton 428cac9c5f9SGreg Clayton 429cac9c5f9SGreg Clayton SBSection 430cac9c5f9SGreg Clayton SBModule::FindSection (const char *sect_name) 431cac9c5f9SGreg Clayton { 432cac9c5f9SGreg Clayton SBSection sb_section; 433cac9c5f9SGreg Clayton 4344efffd9aSJohnny Chen if (sect_name && IsValid()) 435cac9c5f9SGreg Clayton { 436cac9c5f9SGreg Clayton ObjectFile *objfile = m_opaque_sp->GetObjectFile(); 437cac9c5f9SGreg Clayton if (objfile) 438cac9c5f9SGreg Clayton { 439cac9c5f9SGreg Clayton SectionList *section_list = objfile->GetSectionList(); 440cac9c5f9SGreg Clayton if (section_list) 441cac9c5f9SGreg Clayton { 442cac9c5f9SGreg Clayton ConstString const_sect_name(sect_name); 443cac9c5f9SGreg Clayton SectionSP section_sp (section_list->FindSectionByName(const_sect_name)); 444cac9c5f9SGreg Clayton if (section_sp) 445cac9c5f9SGreg Clayton { 446cac9c5f9SGreg Clayton sb_section.SetSection(section_sp.get()); 447cac9c5f9SGreg Clayton } 448cac9c5f9SGreg Clayton } 449cac9c5f9SGreg Clayton } 450cac9c5f9SGreg Clayton } 451cac9c5f9SGreg Clayton return sb_section; 452cac9c5f9SGreg Clayton } 453cac9c5f9SGreg Clayton 45413d1950aSGreg Clayton lldb::ByteOrder 45513d1950aSGreg Clayton SBModule::GetByteOrder () 45613d1950aSGreg Clayton { 45713d1950aSGreg Clayton if (m_opaque_sp) 45813d1950aSGreg Clayton return m_opaque_sp->GetArchitecture().GetByteOrder(); 45913d1950aSGreg Clayton return eByteOrderInvalid; 46013d1950aSGreg Clayton } 46113d1950aSGreg Clayton 46213d1950aSGreg Clayton const char * 46313d1950aSGreg Clayton SBModule::GetTriple () 46413d1950aSGreg Clayton { 46513d1950aSGreg Clayton if (m_opaque_sp) 46613d1950aSGreg Clayton { 46713d1950aSGreg Clayton std::string triple (m_opaque_sp->GetArchitecture().GetTriple().str()); 46813d1950aSGreg Clayton // Unique the string so we don't run into ownership issues since 46913d1950aSGreg Clayton // the const strings put the string into the string pool once and 47013d1950aSGreg Clayton // the strings never comes out 47113d1950aSGreg Clayton ConstString const_triple (triple.c_str()); 47213d1950aSGreg Clayton return const_triple.GetCString(); 47313d1950aSGreg Clayton } 47413d1950aSGreg Clayton return NULL; 47513d1950aSGreg Clayton } 47613d1950aSGreg Clayton 47713d1950aSGreg Clayton uint32_t 47813d1950aSGreg Clayton SBModule::GetAddressByteSize() 47913d1950aSGreg Clayton { 48013d1950aSGreg Clayton if (m_opaque_sp) 48113d1950aSGreg Clayton return m_opaque_sp->GetArchitecture().GetAddressByteSize(); 48213d1950aSGreg Clayton return sizeof(void*); 48313d1950aSGreg Clayton } 48413d1950aSGreg Clayton 485