xref: /openbsd-src/gnu/llvm/lldb/source/API/SBModuleSpec.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
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