1226cce25SGreg Clayton //===-- SBModuleSpec.cpp ----------------------------------------*- C++ -*-===// 2226cce25SGreg Clayton // 3226cce25SGreg Clayton // The LLVM Compiler Infrastructure 4226cce25SGreg Clayton // 5226cce25SGreg Clayton // This file is distributed under the University of Illinois Open Source 6226cce25SGreg Clayton // License. See LICENSE.TXT for details. 7226cce25SGreg Clayton // 8226cce25SGreg Clayton //===----------------------------------------------------------------------===// 9226cce25SGreg Clayton 10226cce25SGreg Clayton #include "lldb/API/SBModuleSpec.h" 11226cce25SGreg Clayton #include "lldb/API/SBStream.h" 12226cce25SGreg Clayton #include "lldb/Core/Module.h" 13226cce25SGreg Clayton #include "lldb/Core/ModuleSpec.h" 14226cce25SGreg Clayton #include "lldb/Host/Host.h" 15226cce25SGreg Clayton #include "lldb/Symbol/ObjectFile.h" 16bf9a7730SZachary Turner #include "lldb/Utility/Stream.h" 17226cce25SGreg Clayton 18226cce25SGreg Clayton using namespace lldb; 19226cce25SGreg Clayton using namespace lldb_private; 20226cce25SGreg Clayton 21b9c1b51eSKate Stone SBModuleSpec::SBModuleSpec() : m_opaque_ap(new lldb_private::ModuleSpec()) {} 22226cce25SGreg Clayton 23b9c1b51eSKate Stone SBModuleSpec::SBModuleSpec(const SBModuleSpec &rhs) 24b9c1b51eSKate Stone : m_opaque_ap(new lldb_private::ModuleSpec(*rhs.m_opaque_ap)) {} 25226cce25SGreg Clayton 26b9c1b51eSKate Stone const SBModuleSpec &SBModuleSpec::operator=(const SBModuleSpec &rhs) { 27226cce25SGreg Clayton if (this != &rhs) 28226cce25SGreg Clayton *m_opaque_ap = *(rhs.m_opaque_ap); 29226cce25SGreg Clayton return *this; 30226cce25SGreg Clayton } 31226cce25SGreg Clayton 32b9c1b51eSKate Stone SBModuleSpec::~SBModuleSpec() {} 33226cce25SGreg Clayton 34b9c1b51eSKate Stone bool SBModuleSpec::IsValid() const { return m_opaque_ap->operator bool(); } 35226cce25SGreg Clayton 36b9c1b51eSKate Stone void SBModuleSpec::Clear() { m_opaque_ap->Clear(); } 37226cce25SGreg Clayton 38b9c1b51eSKate Stone SBFileSpec SBModuleSpec::GetFileSpec() { 39226cce25SGreg Clayton SBFileSpec sb_spec(m_opaque_ap->GetFileSpec()); 40226cce25SGreg Clayton return sb_spec; 41226cce25SGreg Clayton } 42226cce25SGreg Clayton 43b9c1b51eSKate Stone void SBModuleSpec::SetFileSpec(const lldb::SBFileSpec &sb_spec) { 44226cce25SGreg Clayton m_opaque_ap->GetFileSpec() = *sb_spec; 45226cce25SGreg Clayton } 46226cce25SGreg Clayton 47b9c1b51eSKate Stone lldb::SBFileSpec SBModuleSpec::GetPlatformFileSpec() { 48226cce25SGreg Clayton return SBFileSpec(m_opaque_ap->GetPlatformFileSpec()); 49226cce25SGreg Clayton } 50226cce25SGreg Clayton 51b9c1b51eSKate Stone void SBModuleSpec::SetPlatformFileSpec(const lldb::SBFileSpec &sb_spec) { 52226cce25SGreg Clayton m_opaque_ap->GetPlatformFileSpec() = *sb_spec; 53226cce25SGreg Clayton } 54226cce25SGreg Clayton 55b9c1b51eSKate Stone lldb::SBFileSpec SBModuleSpec::GetSymbolFileSpec() { 56226cce25SGreg Clayton return SBFileSpec(m_opaque_ap->GetSymbolFileSpec()); 57226cce25SGreg Clayton } 58226cce25SGreg Clayton 59b9c1b51eSKate Stone void SBModuleSpec::SetSymbolFileSpec(const lldb::SBFileSpec &sb_spec) { 60226cce25SGreg Clayton m_opaque_ap->GetSymbolFileSpec() = *sb_spec; 61226cce25SGreg Clayton } 62226cce25SGreg Clayton 63b9c1b51eSKate Stone const char *SBModuleSpec::GetObjectName() { 64226cce25SGreg Clayton return m_opaque_ap->GetObjectName().GetCString(); 65226cce25SGreg Clayton } 66226cce25SGreg Clayton 67b9c1b51eSKate Stone void SBModuleSpec::SetObjectName(const char *name) { 68226cce25SGreg Clayton m_opaque_ap->GetObjectName().SetCString(name); 69226cce25SGreg Clayton } 70226cce25SGreg Clayton 71b9c1b51eSKate Stone const char *SBModuleSpec::GetTriple() { 72226cce25SGreg Clayton std::string triple(m_opaque_ap->GetArchitecture().GetTriple().str()); 7305097246SAdrian Prantl // Unique the string so we don't run into ownership issues since the const 7405097246SAdrian Prantl // strings put the string into the string pool once and the strings never 7505097246SAdrian Prantl // comes out 76226cce25SGreg Clayton ConstString const_triple(triple.c_str()); 77226cce25SGreg Clayton return const_triple.GetCString(); 78226cce25SGreg Clayton } 79226cce25SGreg Clayton 80b9c1b51eSKate Stone void SBModuleSpec::SetTriple(const char *triple) { 81226cce25SGreg Clayton m_opaque_ap->GetArchitecture().SetTriple(triple); 82226cce25SGreg Clayton } 83226cce25SGreg Clayton 84b9c1b51eSKate Stone const uint8_t *SBModuleSpec::GetUUIDBytes() { 85470b286eSPavel Labath return m_opaque_ap->GetUUID().GetBytes().data(); 86226cce25SGreg Clayton } 87226cce25SGreg Clayton 88b9c1b51eSKate Stone size_t SBModuleSpec::GetUUIDLength() { 89470b286eSPavel Labath return m_opaque_ap->GetUUID().GetBytes().size(); 90226cce25SGreg Clayton } 91226cce25SGreg Clayton 92b9c1b51eSKate Stone bool SBModuleSpec::SetUUIDBytes(const uint8_t *uuid, size_t uuid_len) { 932f93fd1fSPavel Labath m_opaque_ap->GetUUID() = UUID::fromOptionalData(uuid, uuid_len); 942f93fd1fSPavel Labath return m_opaque_ap->GetUUID().IsValid(); 95226cce25SGreg Clayton } 96226cce25SGreg Clayton 97b9c1b51eSKate Stone bool SBModuleSpec::GetDescription(lldb::SBStream &description) { 98226cce25SGreg Clayton m_opaque_ap->Dump(description.ref()); 99226cce25SGreg Clayton return true; 100226cce25SGreg Clayton } 101226cce25SGreg Clayton 102b9c1b51eSKate Stone SBModuleSpecList::SBModuleSpecList() : m_opaque_ap(new ModuleSpecList()) {} 103226cce25SGreg Clayton 104b9c1b51eSKate Stone SBModuleSpecList::SBModuleSpecList(const SBModuleSpecList &rhs) 105b9c1b51eSKate Stone : m_opaque_ap(new ModuleSpecList(*rhs.m_opaque_ap)) {} 106226cce25SGreg Clayton 107b9c1b51eSKate Stone SBModuleSpecList &SBModuleSpecList::operator=(const SBModuleSpecList &rhs) { 108226cce25SGreg Clayton if (this != &rhs) 109226cce25SGreg Clayton *m_opaque_ap = *rhs.m_opaque_ap; 110226cce25SGreg Clayton return *this; 111226cce25SGreg Clayton } 112226cce25SGreg Clayton 113b9c1b51eSKate Stone SBModuleSpecList::~SBModuleSpecList() {} 114226cce25SGreg Clayton 115b9c1b51eSKate Stone SBModuleSpecList SBModuleSpecList::GetModuleSpecifications(const char *path) { 116226cce25SGreg Clayton SBModuleSpecList specs; 117*8f3be7a3SJonas Devlieghere FileSpec file_spec(path); 118*8f3be7a3SJonas Devlieghere FileSystem::Instance().Resolve(file_spec); 119226cce25SGreg Clayton Host::ResolveExecutableInBundle(file_spec); 1202540a8a7SGreg Clayton ObjectFile::GetModuleSpecifications(file_spec, 0, 0, *specs.m_opaque_ap); 121226cce25SGreg Clayton return specs; 122226cce25SGreg Clayton } 123226cce25SGreg Clayton 124b9c1b51eSKate Stone void SBModuleSpecList::Append(const SBModuleSpec &spec) { 125226cce25SGreg Clayton m_opaque_ap->Append(*spec.m_opaque_ap); 126226cce25SGreg Clayton } 127226cce25SGreg Clayton 128b9c1b51eSKate Stone void SBModuleSpecList::Append(const SBModuleSpecList &spec_list) { 129226cce25SGreg Clayton m_opaque_ap->Append(*spec_list.m_opaque_ap); 130226cce25SGreg Clayton } 131226cce25SGreg Clayton 132b9c1b51eSKate Stone size_t SBModuleSpecList::GetSize() { return m_opaque_ap->GetSize(); } 133226cce25SGreg Clayton 134b9c1b51eSKate Stone SBModuleSpec SBModuleSpecList::GetSpecAtIndex(size_t i) { 135226cce25SGreg Clayton SBModuleSpec sb_module_spec; 136226cce25SGreg Clayton m_opaque_ap->GetModuleSpecAtIndex(i, *sb_module_spec.m_opaque_ap); 137226cce25SGreg Clayton return sb_module_spec; 138226cce25SGreg Clayton } 139226cce25SGreg Clayton 140226cce25SGreg Clayton SBModuleSpec 141b9c1b51eSKate Stone SBModuleSpecList::FindFirstMatchingSpec(const SBModuleSpec &match_spec) { 142226cce25SGreg Clayton SBModuleSpec sb_module_spec; 143b9c1b51eSKate Stone m_opaque_ap->FindMatchingModuleSpec(*match_spec.m_opaque_ap, 144b9c1b51eSKate Stone *sb_module_spec.m_opaque_ap); 145226cce25SGreg Clayton return sb_module_spec; 146226cce25SGreg Clayton } 147226cce25SGreg Clayton 148226cce25SGreg Clayton SBModuleSpecList 149b9c1b51eSKate Stone SBModuleSpecList::FindMatchingSpecs(const SBModuleSpec &match_spec) { 150226cce25SGreg Clayton SBModuleSpecList specs; 151b9c1b51eSKate Stone m_opaque_ap->FindMatchingModuleSpecs(*match_spec.m_opaque_ap, 152b9c1b51eSKate Stone *specs.m_opaque_ap); 153226cce25SGreg Clayton return specs; 154226cce25SGreg Clayton } 155226cce25SGreg Clayton 156b9c1b51eSKate Stone bool SBModuleSpecList::GetDescription(lldb::SBStream &description) { 157226cce25SGreg Clayton m_opaque_ap->Dump(description.ref()); 158226cce25SGreg Clayton return true; 159226cce25SGreg Clayton } 160