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) 49*c859e2d5SGreg Clayton { 50*c859e2d5SGreg Clayton const bool add_image_to_target = true; 51*c859e2d5SGreg Clayton const bool load_image_sections_in_target = true; 52*c859e2d5SGreg Clayton m_opaque_sp = process_sp->ReadModuleFromMemory (FileSpec(), 53*c859e2d5SGreg Clayton header_addr, 54*c859e2d5SGreg Clayton add_image_to_target, 55*c859e2d5SGreg Clayton load_image_sections_in_target); 56*c859e2d5SGreg Clayton } 57c9660546SGreg Clayton } 58c9660546SGreg Clayton 59efabb123SGreg Clayton const SBModule & 60efabb123SGreg Clayton SBModule::operator = (const SBModule &rhs) 61efabb123SGreg Clayton { 62efabb123SGreg Clayton if (this != &rhs) 63efabb123SGreg Clayton m_opaque_sp = rhs.m_opaque_sp; 64efabb123SGreg Clayton return *this; 65efabb123SGreg Clayton } 66efabb123SGreg Clayton 6730fdc8d8SChris Lattner SBModule::~SBModule () 6830fdc8d8SChris Lattner { 6930fdc8d8SChris Lattner } 7030fdc8d8SChris Lattner 7130fdc8d8SChris Lattner bool 7230fdc8d8SChris Lattner SBModule::IsValid () const 7330fdc8d8SChris Lattner { 746611103cSGreg Clayton return m_opaque_sp.get() != NULL; 7530fdc8d8SChris Lattner } 7630fdc8d8SChris Lattner 775d3bca4eSJim Ingham void 785d3bca4eSJim Ingham SBModule::Clear() 795d3bca4eSJim Ingham { 805d3bca4eSJim Ingham m_opaque_sp.reset(); 815d3bca4eSJim Ingham } 825d3bca4eSJim Ingham 8330fdc8d8SChris Lattner SBFileSpec 8430fdc8d8SChris Lattner SBModule::GetFileSpec () const 8530fdc8d8SChris Lattner { 862d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 87ceb6b139SCaroline Tice 8830fdc8d8SChris Lattner SBFileSpec file_spec; 896611103cSGreg Clayton if (m_opaque_sp) 906611103cSGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetFileSpec()); 91ceb6b139SCaroline Tice 92ceb6b139SCaroline Tice if (log) 93ceb6b139SCaroline Tice { 94cfd1acedSGreg Clayton log->Printf ("SBModule(%p)::GetFileSpec () => SBFileSpec(%p)", 95cfd1acedSGreg Clayton m_opaque_sp.get(), file_spec.get()); 96ceb6b139SCaroline Tice } 97ceb6b139SCaroline Tice 9830fdc8d8SChris Lattner return file_spec; 9930fdc8d8SChris Lattner } 10030fdc8d8SChris Lattner 1012289fa48SGreg Clayton lldb::SBFileSpec 1022289fa48SGreg Clayton SBModule::GetPlatformFileSpec () const 1032289fa48SGreg Clayton { 1042289fa48SGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1052289fa48SGreg Clayton 1062289fa48SGreg Clayton SBFileSpec file_spec; 1072289fa48SGreg Clayton if (m_opaque_sp) 1082289fa48SGreg Clayton file_spec.SetFileSpec(m_opaque_sp->GetPlatformFileSpec()); 1092289fa48SGreg Clayton 1102289fa48SGreg Clayton if (log) 1112289fa48SGreg Clayton { 1122289fa48SGreg Clayton log->Printf ("SBModule(%p)::GetPlatformFileSpec () => SBFileSpec(%p)", 1132289fa48SGreg Clayton m_opaque_sp.get(), file_spec.get()); 1142289fa48SGreg Clayton } 1152289fa48SGreg Clayton 1162289fa48SGreg Clayton return file_spec; 1172289fa48SGreg Clayton 1182289fa48SGreg Clayton } 1192289fa48SGreg Clayton 1202289fa48SGreg Clayton bool 1212289fa48SGreg Clayton SBModule::SetPlatformFileSpec (const lldb::SBFileSpec &platform_file) 1222289fa48SGreg Clayton { 1232289fa48SGreg Clayton bool result = false; 1242289fa48SGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1252289fa48SGreg Clayton 1262289fa48SGreg Clayton if (m_opaque_sp) 1272289fa48SGreg Clayton { 1282289fa48SGreg Clayton m_opaque_sp->SetPlatformFileSpec(*platform_file); 1292289fa48SGreg Clayton result = true; 1302289fa48SGreg Clayton } 1312289fa48SGreg Clayton 1322289fa48SGreg Clayton if (log) 1332289fa48SGreg Clayton { 1342289fa48SGreg Clayton log->Printf ("SBModule(%p)::SetPlatformFileSpec (SBFileSpec(%p (%s%s%s)) => %i", 1352289fa48SGreg Clayton m_opaque_sp.get(), 1362289fa48SGreg Clayton platform_file.get(), 1372289fa48SGreg Clayton platform_file->GetDirectory().GetCString(), 1382289fa48SGreg Clayton platform_file->GetDirectory() ? "/" : "", 1392289fa48SGreg Clayton platform_file->GetFilename().GetCString(), 1402289fa48SGreg Clayton result); 1412289fa48SGreg Clayton } 1422289fa48SGreg Clayton return result; 1432289fa48SGreg Clayton } 1442289fa48SGreg Clayton 1452289fa48SGreg Clayton 1462289fa48SGreg Clayton 14730fdc8d8SChris Lattner const uint8_t * 14830fdc8d8SChris Lattner SBModule::GetUUIDBytes () const 14930fdc8d8SChris Lattner { 1502d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 151ceb6b139SCaroline Tice 1524838131bSGreg Clayton const uint8_t *uuid_bytes = NULL; 1536611103cSGreg Clayton if (m_opaque_sp) 1544838131bSGreg Clayton uuid_bytes = (const uint8_t *)m_opaque_sp->GetUUID().GetBytes(); 155ceb6b139SCaroline Tice 156ceb6b139SCaroline Tice if (log) 1574838131bSGreg Clayton { 1584838131bSGreg Clayton if (uuid_bytes) 1594838131bSGreg Clayton { 1604838131bSGreg Clayton StreamString s; 1614838131bSGreg Clayton m_opaque_sp->GetUUID().Dump (&s); 1624838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => %s", m_opaque_sp.get(), s.GetData()); 1634838131bSGreg Clayton } 1644838131bSGreg Clayton else 1654838131bSGreg Clayton log->Printf ("SBModule(%p)::GetUUIDBytes () => NULL", m_opaque_sp.get()); 1664838131bSGreg Clayton } 1674838131bSGreg Clayton return uuid_bytes; 16830fdc8d8SChris Lattner } 16930fdc8d8SChris Lattner 17030fdc8d8SChris Lattner 171df2963edSJohnny Chen const char * 172df2963edSJohnny Chen SBModule::GetUUIDString () const 173df2963edSJohnny Chen { 174df2963edSJohnny Chen LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 175df2963edSJohnny Chen 176df2963edSJohnny Chen static char uuid_string[80]; 177df2963edSJohnny Chen const char * uuid_c_string = NULL; 178df2963edSJohnny Chen if (m_opaque_sp) 179df2963edSJohnny Chen uuid_c_string = (const char *)m_opaque_sp->GetUUID().GetAsCString(uuid_string, sizeof(uuid_string)); 180df2963edSJohnny Chen 181df2963edSJohnny Chen if (log) 182df2963edSJohnny Chen { 183df2963edSJohnny Chen if (uuid_c_string) 184df2963edSJohnny Chen { 185df2963edSJohnny Chen StreamString s; 186df2963edSJohnny Chen m_opaque_sp->GetUUID().Dump (&s); 187df2963edSJohnny Chen log->Printf ("SBModule(%p)::GetUUIDString () => %s", m_opaque_sp.get(), s.GetData()); 188df2963edSJohnny Chen } 189df2963edSJohnny Chen else 190df2963edSJohnny Chen log->Printf ("SBModule(%p)::GetUUIDString () => NULL", m_opaque_sp.get()); 191df2963edSJohnny Chen } 192df2963edSJohnny Chen return uuid_c_string; 193df2963edSJohnny Chen } 194df2963edSJohnny Chen 195df2963edSJohnny Chen 19630fdc8d8SChris Lattner bool 19730fdc8d8SChris Lattner SBModule::operator == (const SBModule &rhs) const 19830fdc8d8SChris Lattner { 1996611103cSGreg Clayton if (m_opaque_sp) 2006611103cSGreg Clayton return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 20130fdc8d8SChris Lattner return false; 20230fdc8d8SChris Lattner } 20330fdc8d8SChris Lattner 20430fdc8d8SChris Lattner bool 20530fdc8d8SChris Lattner SBModule::operator != (const SBModule &rhs) const 20630fdc8d8SChris Lattner { 2076611103cSGreg Clayton if (m_opaque_sp) 2086611103cSGreg Clayton return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 20930fdc8d8SChris Lattner return false; 21030fdc8d8SChris Lattner } 21130fdc8d8SChris Lattner 212acdbe816SGreg Clayton ModuleSP 213acdbe816SGreg Clayton SBModule::GetSP () const 214cac9c5f9SGreg Clayton { 215cac9c5f9SGreg Clayton return m_opaque_sp; 216cac9c5f9SGreg Clayton } 21730fdc8d8SChris Lattner 21830fdc8d8SChris Lattner void 219acdbe816SGreg Clayton SBModule::SetSP (const ModuleSP &module_sp) 22030fdc8d8SChris Lattner { 2216611103cSGreg Clayton m_opaque_sp = module_sp; 22230fdc8d8SChris Lattner } 22330fdc8d8SChris Lattner 224cac9c5f9SGreg Clayton SBAddress 225cac9c5f9SGreg Clayton SBModule::ResolveFileAddress (lldb::addr_t vm_addr) 22609960031SGreg Clayton { 227cac9c5f9SGreg Clayton lldb::SBAddress sb_addr; 228cac9c5f9SGreg Clayton if (m_opaque_sp) 229cac9c5f9SGreg Clayton { 230cac9c5f9SGreg Clayton Address addr; 231cac9c5f9SGreg Clayton if (m_opaque_sp->ResolveFileAddress (vm_addr, addr)) 232cac9c5f9SGreg Clayton sb_addr.ref() = addr; 233cac9c5f9SGreg Clayton } 234cac9c5f9SGreg Clayton return sb_addr; 23509960031SGreg Clayton } 23609960031SGreg Clayton 23709960031SGreg Clayton SBSymbolContext 23809960031SGreg Clayton SBModule::ResolveSymbolContextForAddress (const SBAddress& addr, uint32_t resolve_scope) 23909960031SGreg Clayton { 24009960031SGreg Clayton SBSymbolContext sb_sc; 24109960031SGreg Clayton if (m_opaque_sp && addr.IsValid()) 24200e6fbfeSGreg Clayton m_opaque_sp->ResolveSymbolContextForAddress (addr.ref(), resolve_scope, *sb_sc); 24309960031SGreg Clayton return sb_sc; 24409960031SGreg Clayton } 24509960031SGreg Clayton 246dde9cff3SCaroline Tice bool 247dde9cff3SCaroline Tice SBModule::GetDescription (SBStream &description) 248dde9cff3SCaroline Tice { 249da7bc7d0SGreg Clayton Stream &strm = description.ref(); 250da7bc7d0SGreg Clayton 251dde9cff3SCaroline Tice if (m_opaque_sp) 252dde9cff3SCaroline Tice { 253da7bc7d0SGreg Clayton m_opaque_sp->GetDescription (&strm); 254dde9cff3SCaroline Tice } 255dde9cff3SCaroline Tice else 256da7bc7d0SGreg Clayton strm.PutCString ("No value"); 257dde9cff3SCaroline Tice 258dde9cff3SCaroline Tice return true; 259dde9cff3SCaroline Tice } 260bbdabce2SGreg Clayton 261bbdabce2SGreg Clayton size_t 262bbdabce2SGreg Clayton SBModule::GetNumSymbols () 263bbdabce2SGreg Clayton { 264bbdabce2SGreg Clayton if (m_opaque_sp) 265bbdabce2SGreg Clayton { 266bbdabce2SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 267bbdabce2SGreg Clayton if (obj_file) 268bbdabce2SGreg Clayton { 269bbdabce2SGreg Clayton Symtab *symtab = obj_file->GetSymtab(); 270bbdabce2SGreg Clayton if (symtab) 271bbdabce2SGreg Clayton return symtab->GetNumSymbols(); 272bbdabce2SGreg Clayton } 273bbdabce2SGreg Clayton } 274bbdabce2SGreg Clayton return 0; 275bbdabce2SGreg Clayton } 276bbdabce2SGreg Clayton 277bbdabce2SGreg Clayton SBSymbol 278bbdabce2SGreg Clayton SBModule::GetSymbolAtIndex (size_t idx) 279bbdabce2SGreg Clayton { 280bbdabce2SGreg Clayton SBSymbol sb_symbol; 281bbdabce2SGreg Clayton if (m_opaque_sp) 282bbdabce2SGreg Clayton { 283bbdabce2SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 284bbdabce2SGreg Clayton if (obj_file) 285bbdabce2SGreg Clayton { 286bbdabce2SGreg Clayton Symtab *symtab = obj_file->GetSymtab(); 287bbdabce2SGreg Clayton if (symtab) 288bbdabce2SGreg Clayton sb_symbol.SetSymbol(symtab->SymbolAtIndex (idx)); 289bbdabce2SGreg Clayton } 290bbdabce2SGreg Clayton } 291bbdabce2SGreg Clayton return sb_symbol; 292bbdabce2SGreg Clayton } 293fe356d35SGreg Clayton 294cac9c5f9SGreg Clayton size_t 295cac9c5f9SGreg Clayton SBModule::GetNumSections () 296cac9c5f9SGreg Clayton { 297cac9c5f9SGreg Clayton if (m_opaque_sp) 298cac9c5f9SGreg Clayton { 299cac9c5f9SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 300cac9c5f9SGreg Clayton if (obj_file) 301cac9c5f9SGreg Clayton { 302cac9c5f9SGreg Clayton SectionList *section_list = obj_file->GetSectionList (); 303cac9c5f9SGreg Clayton if (section_list) 304cac9c5f9SGreg Clayton return section_list->GetSize(); 305cac9c5f9SGreg Clayton } 306cac9c5f9SGreg Clayton } 307cac9c5f9SGreg Clayton return 0; 308cac9c5f9SGreg Clayton } 309cac9c5f9SGreg Clayton 310cac9c5f9SGreg Clayton SBSection 311cac9c5f9SGreg Clayton SBModule::GetSectionAtIndex (size_t idx) 312cac9c5f9SGreg Clayton { 313cac9c5f9SGreg Clayton SBSection sb_section; 314cac9c5f9SGreg Clayton if (m_opaque_sp) 315cac9c5f9SGreg Clayton { 316cac9c5f9SGreg Clayton ObjectFile *obj_file = m_opaque_sp->GetObjectFile(); 317cac9c5f9SGreg Clayton if (obj_file) 318cac9c5f9SGreg Clayton { 319cac9c5f9SGreg Clayton SectionList *section_list = obj_file->GetSectionList (); 320cac9c5f9SGreg Clayton 321cac9c5f9SGreg Clayton if (section_list) 322cac9c5f9SGreg Clayton sb_section.SetSection(section_list->GetSectionAtIndex (idx).get()); 323cac9c5f9SGreg Clayton } 324cac9c5f9SGreg Clayton } 325cac9c5f9SGreg Clayton return sb_section; 326cac9c5f9SGreg Clayton } 327cac9c5f9SGreg Clayton 3285569e64eSGreg Clayton lldb::SBSymbolContextList 329fe356d35SGreg Clayton SBModule::FindFunctions (const char *name, 3305569e64eSGreg Clayton uint32_t name_type_mask) 331fe356d35SGreg Clayton { 3325569e64eSGreg Clayton lldb::SBSymbolContextList sb_sc_list; 3334efffd9aSJohnny Chen if (name && m_opaque_sp) 334fe356d35SGreg Clayton { 3355569e64eSGreg Clayton const bool append = true; 336fe356d35SGreg Clayton const bool symbols_ok = true; 3379df05fbbSSean Callanan const bool inlines_ok = true; 3385569e64eSGreg Clayton m_opaque_sp->FindFunctions (ConstString(name), 339b6d70ebcSSean Callanan NULL, 340fe356d35SGreg Clayton name_type_mask, 341fe356d35SGreg Clayton symbols_ok, 3429df05fbbSSean Callanan inlines_ok, 343fe356d35SGreg Clayton append, 3445569e64eSGreg Clayton *sb_sc_list); 345fe356d35SGreg Clayton } 3465569e64eSGreg Clayton return sb_sc_list; 347fe356d35SGreg Clayton } 348fe356d35SGreg Clayton 349dea8cb4fSGreg Clayton 350dea8cb4fSGreg Clayton SBValueList 351dea8cb4fSGreg Clayton SBModule::FindGlobalVariables (SBTarget &target, const char *name, uint32_t max_matches) 352dea8cb4fSGreg Clayton { 353dea8cb4fSGreg Clayton SBValueList sb_value_list; 3544efffd9aSJohnny Chen if (name && m_opaque_sp) 355dea8cb4fSGreg Clayton { 356dea8cb4fSGreg Clayton VariableList variable_list; 357dea8cb4fSGreg Clayton const uint32_t match_count = m_opaque_sp->FindGlobalVariables (ConstString (name), 358b6d70ebcSSean Callanan NULL, 359dea8cb4fSGreg Clayton false, 360dea8cb4fSGreg Clayton max_matches, 361dea8cb4fSGreg Clayton variable_list); 362dea8cb4fSGreg Clayton 363dea8cb4fSGreg Clayton if (match_count > 0) 364dea8cb4fSGreg Clayton { 365dea8cb4fSGreg Clayton ValueObjectList &value_object_list = sb_value_list.ref(); 366dea8cb4fSGreg Clayton for (uint32_t i=0; i<match_count; ++i) 367dea8cb4fSGreg Clayton { 368dea8cb4fSGreg Clayton lldb::ValueObjectSP valobj_sp; 369b9556accSGreg Clayton TargetSP target_sp (target.GetSP()); 370b9556accSGreg Clayton valobj_sp = ValueObjectVariable::Create (target_sp.get(), variable_list.GetVariableAtIndex(i)); 371dea8cb4fSGreg Clayton if (valobj_sp) 372dea8cb4fSGreg Clayton value_object_list.Append(valobj_sp); 373dea8cb4fSGreg Clayton } 374dea8cb4fSGreg Clayton } 375dea8cb4fSGreg Clayton } 376dea8cb4fSGreg Clayton 377dea8cb4fSGreg Clayton return sb_value_list; 378dea8cb4fSGreg Clayton } 3796f3533fbSEnrico Granata 3806f3533fbSEnrico Granata lldb::SBType 3816f3533fbSEnrico Granata SBModule::FindFirstType (const char *name_cstr) 3826f3533fbSEnrico Granata { 383fe42ac4dSGreg Clayton SBType sb_type; 3844efffd9aSJohnny Chen if (name_cstr && IsValid()) 385fe42ac4dSGreg Clayton { 3866f3533fbSEnrico Granata SymbolContext sc; 3876f3533fbSEnrico Granata TypeList type_list; 3886f3533fbSEnrico Granata uint32_t num_matches = 0; 3896f3533fbSEnrico Granata ConstString name(name_cstr); 3906f3533fbSEnrico Granata 3916f3533fbSEnrico Granata num_matches = m_opaque_sp->FindTypes(sc, 3926f3533fbSEnrico Granata name, 393b6d70ebcSSean Callanan NULL, 3946f3533fbSEnrico Granata false, 3956f3533fbSEnrico Granata 1, 3966f3533fbSEnrico Granata type_list); 3976f3533fbSEnrico Granata 3986f3533fbSEnrico Granata if (num_matches) 399fe42ac4dSGreg Clayton sb_type = lldb::SBType(type_list.GetTypeAtIndex(0)); 4006f3533fbSEnrico Granata } 401fe42ac4dSGreg Clayton return sb_type; 4026f3533fbSEnrico Granata } 4036f3533fbSEnrico Granata 4046f3533fbSEnrico Granata lldb::SBTypeList 4056f3533fbSEnrico Granata SBModule::FindTypes (const char *type) 4066f3533fbSEnrico Granata { 4076f3533fbSEnrico Granata 4086f3533fbSEnrico Granata SBTypeList retval; 4096f3533fbSEnrico Granata 4104efffd9aSJohnny Chen if (type && IsValid()) 411fe42ac4dSGreg Clayton { 4126f3533fbSEnrico Granata SymbolContext sc; 4136f3533fbSEnrico Granata TypeList type_list; 4146f3533fbSEnrico Granata uint32_t num_matches = 0; 4156f3533fbSEnrico Granata ConstString name(type); 4166f3533fbSEnrico Granata 4176f3533fbSEnrico Granata num_matches = m_opaque_sp->FindTypes(sc, 4186f3533fbSEnrico Granata name, 419b6d70ebcSSean Callanan NULL, 4206f3533fbSEnrico Granata false, 4216f3533fbSEnrico Granata UINT32_MAX, 4226f3533fbSEnrico Granata type_list); 4236f3533fbSEnrico Granata 4246f3533fbSEnrico Granata for (size_t idx = 0; idx < num_matches; idx++) 4256f3533fbSEnrico Granata { 426fe42ac4dSGreg Clayton TypeSP type_sp (type_list.GetTypeAtIndex(idx)); 427fe42ac4dSGreg Clayton if (type_sp) 428fe42ac4dSGreg Clayton retval.Append(SBType(type_sp)); 429fe42ac4dSGreg Clayton } 4306f3533fbSEnrico Granata } 4316f3533fbSEnrico Granata 4326f3533fbSEnrico Granata return retval; 4336f3533fbSEnrico Granata } 434cac9c5f9SGreg Clayton 435cac9c5f9SGreg Clayton 436cac9c5f9SGreg Clayton SBSection 437cac9c5f9SGreg Clayton SBModule::FindSection (const char *sect_name) 438cac9c5f9SGreg Clayton { 439cac9c5f9SGreg Clayton SBSection sb_section; 440cac9c5f9SGreg Clayton 4414efffd9aSJohnny Chen if (sect_name && IsValid()) 442cac9c5f9SGreg Clayton { 443cac9c5f9SGreg Clayton ObjectFile *objfile = m_opaque_sp->GetObjectFile(); 444cac9c5f9SGreg Clayton if (objfile) 445cac9c5f9SGreg Clayton { 446cac9c5f9SGreg Clayton SectionList *section_list = objfile->GetSectionList(); 447cac9c5f9SGreg Clayton if (section_list) 448cac9c5f9SGreg Clayton { 449cac9c5f9SGreg Clayton ConstString const_sect_name(sect_name); 450cac9c5f9SGreg Clayton SectionSP section_sp (section_list->FindSectionByName(const_sect_name)); 451cac9c5f9SGreg Clayton if (section_sp) 452cac9c5f9SGreg Clayton { 453cac9c5f9SGreg Clayton sb_section.SetSection(section_sp.get()); 454cac9c5f9SGreg Clayton } 455cac9c5f9SGreg Clayton } 456cac9c5f9SGreg Clayton } 457cac9c5f9SGreg Clayton } 458cac9c5f9SGreg Clayton return sb_section; 459cac9c5f9SGreg Clayton } 460cac9c5f9SGreg Clayton 46113d1950aSGreg Clayton lldb::ByteOrder 46213d1950aSGreg Clayton SBModule::GetByteOrder () 46313d1950aSGreg Clayton { 46413d1950aSGreg Clayton if (m_opaque_sp) 46513d1950aSGreg Clayton return m_opaque_sp->GetArchitecture().GetByteOrder(); 46613d1950aSGreg Clayton return eByteOrderInvalid; 46713d1950aSGreg Clayton } 46813d1950aSGreg Clayton 46913d1950aSGreg Clayton const char * 47013d1950aSGreg Clayton SBModule::GetTriple () 47113d1950aSGreg Clayton { 47213d1950aSGreg Clayton if (m_opaque_sp) 47313d1950aSGreg Clayton { 47413d1950aSGreg Clayton std::string triple (m_opaque_sp->GetArchitecture().GetTriple().str()); 47513d1950aSGreg Clayton // Unique the string so we don't run into ownership issues since 47613d1950aSGreg Clayton // the const strings put the string into the string pool once and 47713d1950aSGreg Clayton // the strings never comes out 47813d1950aSGreg Clayton ConstString const_triple (triple.c_str()); 47913d1950aSGreg Clayton return const_triple.GetCString(); 48013d1950aSGreg Clayton } 48113d1950aSGreg Clayton return NULL; 48213d1950aSGreg Clayton } 48313d1950aSGreg Clayton 48413d1950aSGreg Clayton uint32_t 48513d1950aSGreg Clayton SBModule::GetAddressByteSize() 48613d1950aSGreg Clayton { 48713d1950aSGreg Clayton if (m_opaque_sp) 48813d1950aSGreg Clayton return m_opaque_sp->GetArchitecture().GetAddressByteSize(); 48913d1950aSGreg Clayton return sizeof(void*); 49013d1950aSGreg Clayton } 49113d1950aSGreg Clayton 492