1dda28197Spatrick //===-- SBModuleSpec.cpp --------------------------------------------------===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick
9061da546Spatrick #include "lldb/API/SBModuleSpec.h"
10061da546Spatrick #include "Utils.h"
11061da546Spatrick #include "lldb/API/SBStream.h"
12061da546Spatrick #include "lldb/Core/Module.h"
13061da546Spatrick #include "lldb/Core/ModuleSpec.h"
14061da546Spatrick #include "lldb/Host/Host.h"
15061da546Spatrick #include "lldb/Symbol/ObjectFile.h"
16*f6aab3d8Srobert #include "lldb/Utility/Instrumentation.h"
17061da546Spatrick #include "lldb/Utility/Stream.h"
18061da546Spatrick
19061da546Spatrick using namespace lldb;
20061da546Spatrick using namespace lldb_private;
21061da546Spatrick
SBModuleSpec()22061da546Spatrick SBModuleSpec::SBModuleSpec() : m_opaque_up(new lldb_private::ModuleSpec()) {
23*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
24061da546Spatrick }
25061da546Spatrick
SBModuleSpec(const SBModuleSpec & rhs)26*f6aab3d8Srobert SBModuleSpec::SBModuleSpec(const SBModuleSpec &rhs) {
27*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, rhs);
28061da546Spatrick
29061da546Spatrick m_opaque_up = clone(rhs.m_opaque_up);
30061da546Spatrick }
31061da546Spatrick
operator =(const SBModuleSpec & rhs)32061da546Spatrick const SBModuleSpec &SBModuleSpec::operator=(const SBModuleSpec &rhs) {
33*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, rhs);
34061da546Spatrick
35061da546Spatrick if (this != &rhs)
36061da546Spatrick m_opaque_up = clone(rhs.m_opaque_up);
37*f6aab3d8Srobert return *this;
38061da546Spatrick }
39061da546Spatrick
40dda28197Spatrick SBModuleSpec::~SBModuleSpec() = default;
41061da546Spatrick
IsValid() const42061da546Spatrick bool SBModuleSpec::IsValid() const {
43*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
44061da546Spatrick return this->operator bool();
45061da546Spatrick }
operator bool() const46061da546Spatrick SBModuleSpec::operator bool() const {
47*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
48061da546Spatrick
49061da546Spatrick return m_opaque_up->operator bool();
50061da546Spatrick }
51061da546Spatrick
Clear()52061da546Spatrick void SBModuleSpec::Clear() {
53*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
54061da546Spatrick
55061da546Spatrick m_opaque_up->Clear();
56061da546Spatrick }
57061da546Spatrick
GetFileSpec()58061da546Spatrick SBFileSpec SBModuleSpec::GetFileSpec() {
59*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
60061da546Spatrick
61061da546Spatrick SBFileSpec sb_spec(m_opaque_up->GetFileSpec());
62*f6aab3d8Srobert return sb_spec;
63061da546Spatrick }
64061da546Spatrick
SetFileSpec(const lldb::SBFileSpec & sb_spec)65061da546Spatrick void SBModuleSpec::SetFileSpec(const lldb::SBFileSpec &sb_spec) {
66*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, sb_spec);
67061da546Spatrick
68061da546Spatrick m_opaque_up->GetFileSpec() = *sb_spec;
69061da546Spatrick }
70061da546Spatrick
GetPlatformFileSpec()71061da546Spatrick lldb::SBFileSpec SBModuleSpec::GetPlatformFileSpec() {
72*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
73061da546Spatrick
74*f6aab3d8Srobert return SBFileSpec(m_opaque_up->GetPlatformFileSpec());
75061da546Spatrick }
76061da546Spatrick
SetPlatformFileSpec(const lldb::SBFileSpec & sb_spec)77061da546Spatrick void SBModuleSpec::SetPlatformFileSpec(const lldb::SBFileSpec &sb_spec) {
78*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, sb_spec);
79061da546Spatrick
80061da546Spatrick m_opaque_up->GetPlatformFileSpec() = *sb_spec;
81061da546Spatrick }
82061da546Spatrick
GetSymbolFileSpec()83061da546Spatrick lldb::SBFileSpec SBModuleSpec::GetSymbolFileSpec() {
84*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
85061da546Spatrick
86*f6aab3d8Srobert return SBFileSpec(m_opaque_up->GetSymbolFileSpec());
87061da546Spatrick }
88061da546Spatrick
SetSymbolFileSpec(const lldb::SBFileSpec & sb_spec)89061da546Spatrick void SBModuleSpec::SetSymbolFileSpec(const lldb::SBFileSpec &sb_spec) {
90*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, sb_spec);
91061da546Spatrick
92061da546Spatrick m_opaque_up->GetSymbolFileSpec() = *sb_spec;
93061da546Spatrick }
94061da546Spatrick
GetObjectName()95061da546Spatrick const char *SBModuleSpec::GetObjectName() {
96*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
97061da546Spatrick
98061da546Spatrick return m_opaque_up->GetObjectName().GetCString();
99061da546Spatrick }
100061da546Spatrick
SetObjectName(const char * name)101061da546Spatrick void SBModuleSpec::SetObjectName(const char *name) {
102*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, name);
103061da546Spatrick
104061da546Spatrick m_opaque_up->GetObjectName().SetCString(name);
105061da546Spatrick }
106061da546Spatrick
GetTriple()107061da546Spatrick const char *SBModuleSpec::GetTriple() {
108*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
109061da546Spatrick
110061da546Spatrick std::string triple(m_opaque_up->GetArchitecture().GetTriple().str());
111061da546Spatrick // Unique the string so we don't run into ownership issues since the const
112061da546Spatrick // strings put the string into the string pool once and the strings never
113061da546Spatrick // comes out
114061da546Spatrick ConstString const_triple(triple.c_str());
115061da546Spatrick return const_triple.GetCString();
116061da546Spatrick }
117061da546Spatrick
SetTriple(const char * triple)118061da546Spatrick void SBModuleSpec::SetTriple(const char *triple) {
119*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, triple);
120061da546Spatrick
121061da546Spatrick m_opaque_up->GetArchitecture().SetTriple(triple);
122061da546Spatrick }
123061da546Spatrick
GetUUIDBytes()124061da546Spatrick const uint8_t *SBModuleSpec::GetUUIDBytes() {
125*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this)
126061da546Spatrick return m_opaque_up->GetUUID().GetBytes().data();
127061da546Spatrick }
128061da546Spatrick
GetUUIDLength()129061da546Spatrick size_t SBModuleSpec::GetUUIDLength() {
130*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
131061da546Spatrick
132061da546Spatrick return m_opaque_up->GetUUID().GetBytes().size();
133061da546Spatrick }
134061da546Spatrick
SetUUIDBytes(const uint8_t * uuid,size_t uuid_len)135061da546Spatrick bool SBModuleSpec::SetUUIDBytes(const uint8_t *uuid, size_t uuid_len) {
136*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, uuid, uuid_len)
137*f6aab3d8Srobert m_opaque_up->GetUUID() = UUID(uuid, uuid_len);
138061da546Spatrick return m_opaque_up->GetUUID().IsValid();
139061da546Spatrick }
140061da546Spatrick
GetDescription(lldb::SBStream & description)141061da546Spatrick bool SBModuleSpec::GetDescription(lldb::SBStream &description) {
142*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, description);
143061da546Spatrick
144061da546Spatrick m_opaque_up->Dump(description.ref());
145061da546Spatrick return true;
146061da546Spatrick }
147061da546Spatrick
SBModuleSpecList()148061da546Spatrick SBModuleSpecList::SBModuleSpecList() : m_opaque_up(new ModuleSpecList()) {
149*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
150061da546Spatrick }
151061da546Spatrick
SBModuleSpecList(const SBModuleSpecList & rhs)152061da546Spatrick SBModuleSpecList::SBModuleSpecList(const SBModuleSpecList &rhs)
153061da546Spatrick : m_opaque_up(new ModuleSpecList(*rhs.m_opaque_up)) {
154*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, rhs);
155061da546Spatrick }
156061da546Spatrick
operator =(const SBModuleSpecList & rhs)157061da546Spatrick SBModuleSpecList &SBModuleSpecList::operator=(const SBModuleSpecList &rhs) {
158*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, rhs);
159061da546Spatrick
160061da546Spatrick if (this != &rhs)
161061da546Spatrick *m_opaque_up = *rhs.m_opaque_up;
162*f6aab3d8Srobert return *this;
163061da546Spatrick }
164061da546Spatrick
165dda28197Spatrick SBModuleSpecList::~SBModuleSpecList() = default;
166061da546Spatrick
GetModuleSpecifications(const char * path)167061da546Spatrick SBModuleSpecList SBModuleSpecList::GetModuleSpecifications(const char *path) {
168*f6aab3d8Srobert LLDB_INSTRUMENT_VA(path);
169061da546Spatrick
170061da546Spatrick SBModuleSpecList specs;
171061da546Spatrick FileSpec file_spec(path);
172061da546Spatrick FileSystem::Instance().Resolve(file_spec);
173061da546Spatrick Host::ResolveExecutableInBundle(file_spec);
174061da546Spatrick ObjectFile::GetModuleSpecifications(file_spec, 0, 0, *specs.m_opaque_up);
175*f6aab3d8Srobert return specs;
176061da546Spatrick }
177061da546Spatrick
Append(const SBModuleSpec & spec)178061da546Spatrick void SBModuleSpecList::Append(const SBModuleSpec &spec) {
179*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, spec);
180061da546Spatrick
181061da546Spatrick m_opaque_up->Append(*spec.m_opaque_up);
182061da546Spatrick }
183061da546Spatrick
Append(const SBModuleSpecList & spec_list)184061da546Spatrick void SBModuleSpecList::Append(const SBModuleSpecList &spec_list) {
185*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, spec_list);
186061da546Spatrick
187061da546Spatrick m_opaque_up->Append(*spec_list.m_opaque_up);
188061da546Spatrick }
189061da546Spatrick
GetSize()190061da546Spatrick size_t SBModuleSpecList::GetSize() {
191*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this);
192061da546Spatrick
193061da546Spatrick return m_opaque_up->GetSize();
194061da546Spatrick }
195061da546Spatrick
GetSpecAtIndex(size_t i)196061da546Spatrick SBModuleSpec SBModuleSpecList::GetSpecAtIndex(size_t i) {
197*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, i);
198061da546Spatrick
199061da546Spatrick SBModuleSpec sb_module_spec;
200061da546Spatrick m_opaque_up->GetModuleSpecAtIndex(i, *sb_module_spec.m_opaque_up);
201*f6aab3d8Srobert return sb_module_spec;
202061da546Spatrick }
203061da546Spatrick
204061da546Spatrick SBModuleSpec
FindFirstMatchingSpec(const SBModuleSpec & match_spec)205061da546Spatrick SBModuleSpecList::FindFirstMatchingSpec(const SBModuleSpec &match_spec) {
206*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, match_spec);
207061da546Spatrick
208061da546Spatrick SBModuleSpec sb_module_spec;
209061da546Spatrick m_opaque_up->FindMatchingModuleSpec(*match_spec.m_opaque_up,
210061da546Spatrick *sb_module_spec.m_opaque_up);
211*f6aab3d8Srobert return sb_module_spec;
212061da546Spatrick }
213061da546Spatrick
214061da546Spatrick SBModuleSpecList
FindMatchingSpecs(const SBModuleSpec & match_spec)215061da546Spatrick SBModuleSpecList::FindMatchingSpecs(const SBModuleSpec &match_spec) {
216*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, match_spec);
217061da546Spatrick
218061da546Spatrick SBModuleSpecList specs;
219061da546Spatrick m_opaque_up->FindMatchingModuleSpecs(*match_spec.m_opaque_up,
220061da546Spatrick *specs.m_opaque_up);
221*f6aab3d8Srobert return specs;
222061da546Spatrick }
223061da546Spatrick
GetDescription(lldb::SBStream & description)224061da546Spatrick bool SBModuleSpecList::GetDescription(lldb::SBStream &description) {
225*f6aab3d8Srobert LLDB_INSTRUMENT_VA(this, description);
226061da546Spatrick
227061da546Spatrick m_opaque_up->Dump(description.ref());
228061da546Spatrick return true;
229061da546Spatrick }
230