1 //===-- SBModuleSpec.h ------------------------------------------*- 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 #ifndef LLDB_SBModuleSpec_h_
11 #define LLDB_SBModuleSpec_h_
12 
13 #include "lldb/API/SBDefines.h"
14 #include "lldb/API/SBFileSpec.h"
15 
16 namespace lldb {
17 
18 class SBModuleSpec
19 {
20 public:
21 
22     SBModuleSpec ();
23 
24     SBModuleSpec (const SBModuleSpec &rhs);
25 
26     ~SBModuleSpec ();
27 
28     const SBModuleSpec &
29     operator = (const SBModuleSpec &rhs);
30 
31     bool
32     IsValid () const;
33 
34     void
35     Clear();
36 
37     //------------------------------------------------------------------
38     /// Get const accessor for the module file.
39     ///
40     /// This function returns the file for the module on the host system
41     /// that is running LLDB. This can differ from the path on the
42     /// platform since we might be doing remote debugging.
43     ///
44     /// @return
45     ///     A const reference to the file specification object.
46     //------------------------------------------------------------------
47     lldb::SBFileSpec
48     GetFileSpec ();
49 
50     void
51     SetFileSpec (const lldb::SBFileSpec &fspec);
52 
53     //------------------------------------------------------------------
54     /// Get accessor for the module platform file.
55     ///
56     /// Platform file refers to the path of the module as it is known on
57     /// the remote system on which it is being debugged. For local
58     /// debugging this is always the same as Module::GetFileSpec(). But
59     /// remote debugging might mention a file '/usr/lib/liba.dylib'
60     /// which might be locally downloaded and cached. In this case the
61     /// platform file could be something like:
62     /// '/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib'
63     /// The file could also be cached in a local developer kit directory.
64     ///
65     /// @return
66     ///     A const reference to the file specification object.
67     //------------------------------------------------------------------
68     lldb::SBFileSpec
69     GetPlatformFileSpec ();
70 
71     void
72     SetPlatformFileSpec (const lldb::SBFileSpec &fspec);
73 
74     lldb::SBFileSpec
75     GetSymbolFileSpec ();
76 
77     void
78     SetSymbolFileSpec (const lldb::SBFileSpec &fspec);
79 
80     const char *
81     GetObjectName ();
82 
83     void
84     SetObjectName (const char *name);
85 
86     const char *
87     GetTriple ();
88 
89     void
90     SetTriple (const char *triple);
91 
92     const uint8_t *
93     GetUUIDBytes ();
94 
95     size_t
96     GetUUIDLength ();
97 
98     bool
99     SetUUIDBytes (const uint8_t *uuid, size_t uuid_len);
100 
101     bool
102     GetDescription (lldb::SBStream &description);
103 
104 private:
105     friend class SBModuleSpecList;
106     friend class SBModule;
107     friend class SBTarget;
108 
109     std::unique_ptr<lldb_private::ModuleSpec> m_opaque_ap;
110 };
111 
112 class SBModuleSpecList
113 {
114 public:
115     SBModuleSpecList();
116 
117     SBModuleSpecList (const SBModuleSpecList &rhs);
118 
119     ~SBModuleSpecList();
120 
121     SBModuleSpecList &
122     operator = (const SBModuleSpecList &rhs);
123 
124     static SBModuleSpecList
125     GetModuleSpecifications (const char *path);
126 
127     void
128     Append (const SBModuleSpec &spec);
129 
130     void
131     Append (const SBModuleSpecList &spec_list);
132 
133     SBModuleSpec
134     FindFirstMatchingSpec (const SBModuleSpec &match_spec);
135 
136     SBModuleSpecList
137     FindMatchingSpecs (const SBModuleSpec &match_spec);
138 
139     size_t
140     GetSize();
141 
142     SBModuleSpec
143     GetSpecAtIndex (size_t i);
144 
145     bool
146     GetDescription (lldb::SBStream &description);
147 
148 private:
149     std::unique_ptr<lldb_private::ModuleSpecList> m_opaque_ap;
150 };
151 
152 } // namespace lldb
153 
154 #endif // LLDB_SBModuleSpec_h_
155