Home | History | Annotate | Download | only in API
      1 //===-- SBModuleSpec.cpp ----------------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "lldb/API/SBModuleSpec.h"
     11 #include "lldb/API/SBStream.h"
     12 #include "lldb/Core/Module.h"
     13 #include "lldb/Core/ModuleSpec.h"
     14 #include "lldb/Core/Stream.h"
     15 #include "lldb/Host/Host.h"
     16 #include "lldb/Symbol/ObjectFile.h"
     17 
     18 using namespace lldb;
     19 using namespace lldb_private;
     20 
     21 
     22 SBModuleSpec::SBModuleSpec () :
     23     m_opaque_ap (new lldb_private::ModuleSpec())
     24 {
     25 }
     26 
     27 SBModuleSpec::SBModuleSpec(const SBModuleSpec &rhs) :
     28     m_opaque_ap (new lldb_private::ModuleSpec(*rhs.m_opaque_ap))
     29 {
     30 }
     31 
     32 const SBModuleSpec &
     33 SBModuleSpec::operator = (const SBModuleSpec &rhs)
     34 {
     35     if (this != &rhs)
     36         *m_opaque_ap = *(rhs.m_opaque_ap);
     37     return *this;
     38 }
     39 
     40 SBModuleSpec::~SBModuleSpec ()
     41 {
     42 }
     43 
     44 bool
     45 SBModuleSpec::IsValid () const
     46 {
     47     return *m_opaque_ap;
     48 }
     49 
     50 void
     51 SBModuleSpec::Clear()
     52 {
     53     m_opaque_ap->Clear();
     54 }
     55 
     56 SBFileSpec
     57 SBModuleSpec::GetFileSpec ()
     58 {
     59     SBFileSpec sb_spec(m_opaque_ap->GetFileSpec());
     60     return sb_spec;
     61 }
     62 
     63 void
     64 SBModuleSpec::SetFileSpec (const lldb::SBFileSpec &sb_spec)
     65 {
     66     m_opaque_ap->GetFileSpec() = *sb_spec;
     67 }
     68 
     69 lldb::SBFileSpec
     70 SBModuleSpec::GetPlatformFileSpec ()
     71 {
     72     return SBFileSpec(m_opaque_ap->GetPlatformFileSpec());
     73 }
     74 
     75 void
     76 SBModuleSpec::SetPlatformFileSpec (const lldb::SBFileSpec &sb_spec)
     77 {
     78     m_opaque_ap->GetPlatformFileSpec() = *sb_spec;
     79 }
     80 
     81 lldb::SBFileSpec
     82 SBModuleSpec::GetSymbolFileSpec ()
     83 {
     84     return SBFileSpec(m_opaque_ap->GetSymbolFileSpec());
     85 }
     86 
     87 void
     88 SBModuleSpec::SetSymbolFileSpec (const lldb::SBFileSpec &sb_spec)
     89 {
     90     m_opaque_ap->GetSymbolFileSpec() = *sb_spec;
     91 }
     92 
     93 const char *
     94 SBModuleSpec::GetObjectName ()
     95 {
     96     return m_opaque_ap->GetObjectName().GetCString();
     97 }
     98 
     99 void
    100 SBModuleSpec::SetObjectName (const char *name)
    101 {
    102     m_opaque_ap->GetObjectName().SetCString(name);
    103 }
    104 
    105 const char *
    106 SBModuleSpec::GetTriple ()
    107 {
    108     std::string triple (m_opaque_ap->GetArchitecture().GetTriple().str());
    109     // Unique the string so we don't run into ownership issues since
    110     // the const strings put the string into the string pool once and
    111     // the strings never comes out
    112     ConstString const_triple (triple.c_str());
    113     return const_triple.GetCString();
    114 }
    115 
    116 void
    117 SBModuleSpec::SetTriple (const char *triple)
    118 {
    119     m_opaque_ap->GetArchitecture().SetTriple(triple);
    120 }
    121 
    122 const uint8_t *
    123 SBModuleSpec::GetUUIDBytes ()
    124 {
    125     return (const uint8_t *)m_opaque_ap->GetUUID().GetBytes();
    126 }
    127 
    128 size_t
    129 SBModuleSpec::GetUUIDLength ()
    130 {
    131     return m_opaque_ap->GetUUID().GetByteSize();
    132 }
    133 
    134 bool
    135 SBModuleSpec::SetUUIDBytes (const uint8_t *uuid, size_t uuid_len)
    136 {
    137     return m_opaque_ap->GetUUID().SetBytes(uuid, uuid_len);
    138 }
    139 
    140 bool
    141 SBModuleSpec::GetDescription (lldb::SBStream &description)
    142 {
    143     m_opaque_ap->Dump (description.ref());
    144     return true;
    145 }
    146 
    147 SBModuleSpecList::SBModuleSpecList() :
    148     m_opaque_ap(new ModuleSpecList())
    149 {
    150 
    151 }
    152 
    153 SBModuleSpecList::SBModuleSpecList (const SBModuleSpecList &rhs) :
    154     m_opaque_ap(new ModuleSpecList(*rhs.m_opaque_ap))
    155 {
    156 
    157 }
    158 
    159 SBModuleSpecList &
    160 SBModuleSpecList::operator = (const SBModuleSpecList &rhs)
    161 {
    162     if (this != &rhs)
    163         *m_opaque_ap = *rhs.m_opaque_ap;
    164     return *this;
    165 }
    166 
    167 SBModuleSpecList::~SBModuleSpecList()
    168 {
    169 
    170 }
    171 
    172 SBModuleSpecList
    173 SBModuleSpecList::GetModuleSpecifications (const char *path)
    174 {
    175     SBModuleSpecList specs;
    176     FileSpec file_spec(path, true);
    177     Host::ResolveExecutableInBundle(file_spec);
    178     ObjectFile::GetModuleSpecifications(file_spec, 0, 0, *specs.m_opaque_ap);
    179     return specs;
    180 }
    181 
    182 void
    183 SBModuleSpecList::Append (const SBModuleSpec &spec)
    184 {
    185     m_opaque_ap->Append (*spec.m_opaque_ap);
    186 }
    187 
    188 void
    189 SBModuleSpecList::Append (const SBModuleSpecList &spec_list)
    190 {
    191     m_opaque_ap->Append (*spec_list.m_opaque_ap);
    192 }
    193 
    194 size_t
    195 SBModuleSpecList::GetSize()
    196 {
    197     return m_opaque_ap->GetSize();
    198 }
    199 
    200 SBModuleSpec
    201 SBModuleSpecList::GetSpecAtIndex (size_t i)
    202 {
    203     SBModuleSpec sb_module_spec;
    204     m_opaque_ap->GetModuleSpecAtIndex(i, *sb_module_spec.m_opaque_ap);
    205     return sb_module_spec;
    206 }
    207 
    208 SBModuleSpec
    209 SBModuleSpecList::FindFirstMatchingSpec (const SBModuleSpec &match_spec)
    210 {
    211     SBModuleSpec sb_module_spec;
    212     m_opaque_ap->FindMatchingModuleSpec(*match_spec.m_opaque_ap, *sb_module_spec.m_opaque_ap);
    213     return sb_module_spec;
    214 }
    215 
    216 SBModuleSpecList
    217 SBModuleSpecList::FindMatchingSpecs (const SBModuleSpec &match_spec)
    218 {
    219     SBModuleSpecList specs;
    220     m_opaque_ap->FindMatchingModuleSpecs(*match_spec.m_opaque_ap, *specs.m_opaque_ap);
    221     return specs;
    222 
    223 }
    224 
    225 bool
    226 SBModuleSpecList::GetDescription (lldb::SBStream &description)
    227 {
    228     m_opaque_ap->Dump (description.ref());
    229     return true;
    230 }
    231