1226cce25SGreg Clayton //===-- SBModuleSpec.cpp ----------------------------------------*- C++ -*-===// 2226cce25SGreg Clayton // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6226cce25SGreg Clayton // 7226cce25SGreg Clayton //===----------------------------------------------------------------------===// 8226cce25SGreg Clayton 9226cce25SGreg Clayton #include "lldb/API/SBModuleSpec.h" 10226cce25SGreg Clayton #include "lldb/API/SBStream.h" 11226cce25SGreg Clayton #include "lldb/Core/Module.h" 12226cce25SGreg Clayton #include "lldb/Core/ModuleSpec.h" 13226cce25SGreg Clayton #include "lldb/Host/Host.h" 14226cce25SGreg Clayton #include "lldb/Symbol/ObjectFile.h" 15bf9a7730SZachary Turner #include "lldb/Utility/Stream.h" 16226cce25SGreg Clayton 17226cce25SGreg Clayton using namespace lldb; 18226cce25SGreg Clayton using namespace lldb_private; 19226cce25SGreg Clayton 20b9c1b51eSKate Stone SBModuleSpec::SBModuleSpec() : m_opaque_ap(new lldb_private::ModuleSpec()) {} 21226cce25SGreg Clayton 22b9c1b51eSKate Stone SBModuleSpec::SBModuleSpec(const SBModuleSpec &rhs) 23b9c1b51eSKate Stone : m_opaque_ap(new lldb_private::ModuleSpec(*rhs.m_opaque_ap)) {} 24226cce25SGreg Clayton 25b9c1b51eSKate Stone const SBModuleSpec &SBModuleSpec::operator=(const SBModuleSpec &rhs) { 26226cce25SGreg Clayton if (this != &rhs) 27226cce25SGreg Clayton *m_opaque_ap = *(rhs.m_opaque_ap); 28226cce25SGreg Clayton return *this; 29226cce25SGreg Clayton } 30226cce25SGreg Clayton 31b9c1b51eSKate Stone SBModuleSpec::~SBModuleSpec() {} 32226cce25SGreg Clayton 33b9c1b51eSKate Stone bool SBModuleSpec::IsValid() const { return m_opaque_ap->operator bool(); } 34226cce25SGreg Clayton 35b9c1b51eSKate Stone void SBModuleSpec::Clear() { m_opaque_ap->Clear(); } 36226cce25SGreg Clayton 37b9c1b51eSKate Stone SBFileSpec SBModuleSpec::GetFileSpec() { 38226cce25SGreg Clayton SBFileSpec sb_spec(m_opaque_ap->GetFileSpec()); 39226cce25SGreg Clayton return sb_spec; 40226cce25SGreg Clayton } 41226cce25SGreg Clayton 42b9c1b51eSKate Stone void SBModuleSpec::SetFileSpec(const lldb::SBFileSpec &sb_spec) { 43226cce25SGreg Clayton m_opaque_ap->GetFileSpec() = *sb_spec; 44226cce25SGreg Clayton } 45226cce25SGreg Clayton 46b9c1b51eSKate Stone lldb::SBFileSpec SBModuleSpec::GetPlatformFileSpec() { 47226cce25SGreg Clayton return SBFileSpec(m_opaque_ap->GetPlatformFileSpec()); 48226cce25SGreg Clayton } 49226cce25SGreg Clayton 50b9c1b51eSKate Stone void SBModuleSpec::SetPlatformFileSpec(const lldb::SBFileSpec &sb_spec) { 51226cce25SGreg Clayton m_opaque_ap->GetPlatformFileSpec() = *sb_spec; 52226cce25SGreg Clayton } 53226cce25SGreg Clayton 54b9c1b51eSKate Stone lldb::SBFileSpec SBModuleSpec::GetSymbolFileSpec() { 55226cce25SGreg Clayton return SBFileSpec(m_opaque_ap->GetSymbolFileSpec()); 56226cce25SGreg Clayton } 57226cce25SGreg Clayton 58b9c1b51eSKate Stone void SBModuleSpec::SetSymbolFileSpec(const lldb::SBFileSpec &sb_spec) { 59226cce25SGreg Clayton m_opaque_ap->GetSymbolFileSpec() = *sb_spec; 60226cce25SGreg Clayton } 61226cce25SGreg Clayton 62b9c1b51eSKate Stone const char *SBModuleSpec::GetObjectName() { 63226cce25SGreg Clayton return m_opaque_ap->GetObjectName().GetCString(); 64226cce25SGreg Clayton } 65226cce25SGreg Clayton 66b9c1b51eSKate Stone void SBModuleSpec::SetObjectName(const char *name) { 67226cce25SGreg Clayton m_opaque_ap->GetObjectName().SetCString(name); 68226cce25SGreg Clayton } 69226cce25SGreg Clayton 70b9c1b51eSKate Stone const char *SBModuleSpec::GetTriple() { 71226cce25SGreg Clayton std::string triple(m_opaque_ap->GetArchitecture().GetTriple().str()); 7205097246SAdrian Prantl // Unique the string so we don't run into ownership issues since the const 7305097246SAdrian Prantl // strings put the string into the string pool once and the strings never 7405097246SAdrian Prantl // comes out 75226cce25SGreg Clayton ConstString const_triple(triple.c_str()); 76226cce25SGreg Clayton return const_triple.GetCString(); 77226cce25SGreg Clayton } 78226cce25SGreg Clayton 79b9c1b51eSKate Stone void SBModuleSpec::SetTriple(const char *triple) { 80226cce25SGreg Clayton m_opaque_ap->GetArchitecture().SetTriple(triple); 81226cce25SGreg Clayton } 82226cce25SGreg Clayton 83b9c1b51eSKate Stone const uint8_t *SBModuleSpec::GetUUIDBytes() { 84470b286eSPavel Labath return m_opaque_ap->GetUUID().GetBytes().data(); 85226cce25SGreg Clayton } 86226cce25SGreg Clayton 87b9c1b51eSKate Stone size_t SBModuleSpec::GetUUIDLength() { 88470b286eSPavel Labath return m_opaque_ap->GetUUID().GetBytes().size(); 89226cce25SGreg Clayton } 90226cce25SGreg Clayton 91b9c1b51eSKate Stone bool SBModuleSpec::SetUUIDBytes(const uint8_t *uuid, size_t uuid_len) { 922f93fd1fSPavel Labath m_opaque_ap->GetUUID() = UUID::fromOptionalData(uuid, uuid_len); 932f93fd1fSPavel Labath return m_opaque_ap->GetUUID().IsValid(); 94226cce25SGreg Clayton } 95226cce25SGreg Clayton 96b9c1b51eSKate Stone bool SBModuleSpec::GetDescription(lldb::SBStream &description) { 97226cce25SGreg Clayton m_opaque_ap->Dump(description.ref()); 98226cce25SGreg Clayton return true; 99226cce25SGreg Clayton } 100226cce25SGreg Clayton 101b9c1b51eSKate Stone SBModuleSpecList::SBModuleSpecList() : m_opaque_ap(new ModuleSpecList()) {} 102226cce25SGreg Clayton 103b9c1b51eSKate Stone SBModuleSpecList::SBModuleSpecList(const SBModuleSpecList &rhs) 104b9c1b51eSKate Stone : m_opaque_ap(new ModuleSpecList(*rhs.m_opaque_ap)) {} 105226cce25SGreg Clayton 106b9c1b51eSKate Stone SBModuleSpecList &SBModuleSpecList::operator=(const SBModuleSpecList &rhs) { 107226cce25SGreg Clayton if (this != &rhs) 108226cce25SGreg Clayton *m_opaque_ap = *rhs.m_opaque_ap; 109226cce25SGreg Clayton return *this; 110226cce25SGreg Clayton } 111226cce25SGreg Clayton 112b9c1b51eSKate Stone SBModuleSpecList::~SBModuleSpecList() {} 113226cce25SGreg Clayton 114b9c1b51eSKate Stone SBModuleSpecList SBModuleSpecList::GetModuleSpecifications(const char *path) { 115226cce25SGreg Clayton SBModuleSpecList specs; 1168f3be7a3SJonas Devlieghere FileSpec file_spec(path); 1178f3be7a3SJonas Devlieghere FileSystem::Instance().Resolve(file_spec); 118226cce25SGreg Clayton Host::ResolveExecutableInBundle(file_spec); 1192540a8a7SGreg Clayton ObjectFile::GetModuleSpecifications(file_spec, 0, 0, *specs.m_opaque_ap); 120226cce25SGreg Clayton return specs; 121226cce25SGreg Clayton } 122226cce25SGreg Clayton 123b9c1b51eSKate Stone void SBModuleSpecList::Append(const SBModuleSpec &spec) { 124226cce25SGreg Clayton m_opaque_ap->Append(*spec.m_opaque_ap); 125226cce25SGreg Clayton } 126226cce25SGreg Clayton 127b9c1b51eSKate Stone void SBModuleSpecList::Append(const SBModuleSpecList &spec_list) { 128226cce25SGreg Clayton m_opaque_ap->Append(*spec_list.m_opaque_ap); 129226cce25SGreg Clayton } 130226cce25SGreg Clayton 131b9c1b51eSKate Stone size_t SBModuleSpecList::GetSize() { return m_opaque_ap->GetSize(); } 132226cce25SGreg Clayton 133b9c1b51eSKate Stone SBModuleSpec SBModuleSpecList::GetSpecAtIndex(size_t i) { 134226cce25SGreg Clayton SBModuleSpec sb_module_spec; 135226cce25SGreg Clayton m_opaque_ap->GetModuleSpecAtIndex(i, *sb_module_spec.m_opaque_ap); 136226cce25SGreg Clayton return sb_module_spec; 137226cce25SGreg Clayton } 138226cce25SGreg Clayton 139226cce25SGreg Clayton SBModuleSpec 140b9c1b51eSKate Stone SBModuleSpecList::FindFirstMatchingSpec(const SBModuleSpec &match_spec) { 141226cce25SGreg Clayton SBModuleSpec sb_module_spec; 142b9c1b51eSKate Stone m_opaque_ap->FindMatchingModuleSpec(*match_spec.m_opaque_ap, 143b9c1b51eSKate Stone *sb_module_spec.m_opaque_ap); 144226cce25SGreg Clayton return sb_module_spec; 145226cce25SGreg Clayton } 146226cce25SGreg Clayton 147226cce25SGreg Clayton SBModuleSpecList 148b9c1b51eSKate Stone SBModuleSpecList::FindMatchingSpecs(const SBModuleSpec &match_spec) { 149226cce25SGreg Clayton SBModuleSpecList specs; 150b9c1b51eSKate Stone m_opaque_ap->FindMatchingModuleSpecs(*match_spec.m_opaque_ap, 151b9c1b51eSKate Stone *specs.m_opaque_ap); 152226cce25SGreg Clayton return specs; 153226cce25SGreg Clayton } 154226cce25SGreg Clayton 155b9c1b51eSKate Stone bool SBModuleSpecList::GetDescription(lldb::SBStream &description) { 156226cce25SGreg Clayton m_opaque_ap->Dump(description.ref()); 157226cce25SGreg Clayton return true; 158226cce25SGreg Clayton } 159