124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBModule.h ----------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef LLDB_SBModule_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBModule_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
143e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton#include "lldb/API/SBError.h"
153e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton#include "lldb/API/SBSection.h"
16466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton#include "lldb/API/SBSymbolContext.h"
17917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton#include "lldb/API/SBValueList.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBModule
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBModule ();
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    SBModule (const SBModule &rhs);
287dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
29f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    SBModule (const SBModuleSpec &module_spec);
30f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton
31538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    const SBModule &
32538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    operator = (const SBModule &rhs);
33538eb82a89a68dbc57251915080bd5152b333978Greg Clayton
34b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton    SBModule (lldb::SBProcess &process,
35b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton              lldb::addr_t header_addr);
36b5a8f1498e1ddaeed5187a878d57ea0b74af9c26Greg Clayton
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~SBModule ();
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValid () const;
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
42e0bd571a8050da2b3462c35c9f209cbc9755c750Jim Ingham    void
43e0bd571a8050da2b3462c35c9f209cbc9755c750Jim Ingham    Clear();
44e0bd571a8050da2b3462c35c9f209cbc9755c750Jim Ingham
45cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    //------------------------------------------------------------------
46cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// Get const accessor for the module file specification.
47cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
48cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// This function returns the file for the module on the host system
49cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// that is running LLDB. This can differ from the path on the
50cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// platform since we might be doing remote debugging.
51cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
52cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// @return
53cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     A const reference to the file specification object.
54cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    //------------------------------------------------------------------
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBFileSpec
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetFileSpec () const;
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
58cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    //------------------------------------------------------------------
59cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// Get accessor for the module platform file specification.
60cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
61cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// Platform file refers to the path of the module as it is known on
62cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// the remote system on which it is being debugged. For local
63cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// debugging this is always the same as Module::GetFileSpec(). But
64cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// remote debugging might mention a file '/usr/lib/liba.dylib'
65cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// which might be locally downloaded and cached. In this case the
66cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// platform file could be something like:
67cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// '/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib'
68cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// The file could also be cached in a local developer kit directory.
69cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
70cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// @return
71cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     A const reference to the file specification object.
72cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    //------------------------------------------------------------------
73180546b3feb8c7bcca70a56776a7c4fad99ba09cGreg Clayton    lldb::SBFileSpec
74180546b3feb8c7bcca70a56776a7c4fad99ba09cGreg Clayton    GetPlatformFileSpec () const;
75180546b3feb8c7bcca70a56776a7c4fad99ba09cGreg Clayton
76180546b3feb8c7bcca70a56776a7c4fad99ba09cGreg Clayton    bool
77180546b3feb8c7bcca70a56776a7c4fad99ba09cGreg Clayton    SetPlatformFileSpec (const lldb::SBFileSpec &platform_file);
78180546b3feb8c7bcca70a56776a7c4fad99ba09cGreg Clayton
791b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton    lldb::ByteOrder
801b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton    GetByteOrder ();
811b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton
821b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton    uint32_t
831b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton    GetAddressByteSize();
841b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton
851b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton    const char *
861b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton    GetTriple ();
871b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const uint8_t *
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetUUIDBytes () const;
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
91919ee60577297be31eb69f14a5901e7c6170a9caJohnny Chen    const char *
92919ee60577297be31eb69f14a5901e7c6170a9caJohnny Chen    GetUUIDString () const;
93919ee60577297be31eb69f14a5901e7c6170a9caJohnny Chen
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator == (const lldb::SBModule &rhs) const;
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator != (const lldb::SBModule &rhs) const;
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1003e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    lldb::SBSection
1013e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    FindSection (const char *sect_name);
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1033e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    lldb::SBAddress
1043e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ResolveFileAddress (lldb::addr_t vm_addr);
105466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton
106466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    lldb::SBSymbolContext
107466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton    ResolveSymbolContextForAddress (const lldb::SBAddress& addr,
108466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton                                    uint32_t resolve_scope);
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    bool
11198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    GetDescription (lldb::SBStream &description);
11298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
113b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    uint32_t
114b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    GetNumCompileUnits();
115b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen
116b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    lldb::SBCompileUnit
117b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen    GetCompileUnitAtIndex (uint32_t);
118b451f5f1606fc5effdc809fa2261263851fff8f5Johnny Chen
11943edca38dda703786e2dc7ad61169b5b445551e6Greg Clayton    size_t
12043edca38dda703786e2dc7ad61169b5b445551e6Greg Clayton    GetNumSymbols ();
12143edca38dda703786e2dc7ad61169b5b445551e6Greg Clayton
12267283641ef749fadab1884e81520e7e5ab42e91aGreg Clayton    lldb::SBSymbol
12343edca38dda703786e2dc7ad61169b5b445551e6Greg Clayton    GetSymbolAtIndex (size_t idx);
12443edca38dda703786e2dc7ad61169b5b445551e6Greg Clayton
125b3dafc6a81a014339015701c9872624f2aeddd43Greg Clayton    lldb::SBSymbol
126b3dafc6a81a014339015701c9872624f2aeddd43Greg Clayton    FindSymbol (const char *name,
127b3dafc6a81a014339015701c9872624f2aeddd43Greg Clayton                lldb::SymbolType type = eSymbolTypeAny);
128b3dafc6a81a014339015701c9872624f2aeddd43Greg Clayton
129b3dafc6a81a014339015701c9872624f2aeddd43Greg Clayton    lldb::SBSymbolContextList
130b3dafc6a81a014339015701c9872624f2aeddd43Greg Clayton    FindSymbols (const char *name,
131b3dafc6a81a014339015701c9872624f2aeddd43Greg Clayton                 lldb::SymbolType type = eSymbolTypeAny);
132b3dafc6a81a014339015701c9872624f2aeddd43Greg Clayton
1333e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    size_t
1343e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    GetNumSections ();
1353e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton
1363e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    lldb::SBSection
1373e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    GetSectionAtIndex (size_t idx);
138cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    //------------------------------------------------------------------
139cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// Find functions by name.
140cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
141cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// @param[in] name
142cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     The name of the function we are looking for.
143cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
144cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// @param[in] name_type_mask
145cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     A logical OR of one or more FunctionNameType enum bits that
146cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     indicate what kind of names should be used when doing the
147cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     lookup. Bits include fully qualified names, base names,
148cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     C++ methods, or ObjC selectors.
149cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     See FunctionNameType for more details.
150cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
151cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// @return
1527dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    ///     A lldb::SBSymbolContextList that gets filled in with all of
1537dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    ///     the symbol contexts for all the matches.
154cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    //------------------------------------------------------------------
1557dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    lldb::SBSymbolContextList
1564ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton    FindFunctions (const char *name,
1577dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton                   uint32_t name_type_mask = lldb::eFunctionNameTypeAny);
1584ed315fdc503cfdc18e89b1eb43bf87e07fd1673Greg Clayton
159cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    //------------------------------------------------------------------
160cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// Find global and static variables by name.
161cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
162bbc6342babdd58daa34bb35e35d7d53f59beada1Johnny Chen    /// @param[in] target
163bbc6342babdd58daa34bb35e35d7d53f59beada1Johnny Chen    ///     A valid SBTarget instance representing the debuggee.
164bbc6342babdd58daa34bb35e35d7d53f59beada1Johnny Chen    ///
165cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// @param[in] name
166cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     The name of the global or static variable we are looking
167cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     for.
168cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
169bbc6342babdd58daa34bb35e35d7d53f59beada1Johnny Chen    /// @param[in] max_matches
170bbc6342babdd58daa34bb35e35d7d53f59beada1Johnny Chen    ///     Allow the number of matches to be limited to \a max_matches.
171cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///
172cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    /// @return
173cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    ///     A list of matched variables in an SBValueList.
174cbb52a64ea9775af1fcca2e929d0d0b4aa698de4Johnny Chen    //------------------------------------------------------------------
175917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton    lldb::SBValueList
176917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton    FindGlobalVariables (lldb::SBTarget &target,
177917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton                         const char *name,
178917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton                         uint32_t max_matches);
179917c000e77fcf657099f59085d6436d179a39ea4Greg Clayton
180392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    //------------------------------------------------------------------
181392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    /// Find the first global (or static) variable by name.
182392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    ///
183392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    /// @param[in] target
184392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    ///     A valid SBTarget instance representing the debuggee.
185392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    ///
186392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    /// @param[in] name
187392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    ///     The name of the global or static variable we are looking
188392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    ///     for.
189392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    ///
190392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    /// @return
191392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    ///     An SBValue that gets filled in with the found variable (if any).
192392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    //------------------------------------------------------------------
193392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    lldb::SBValue
194392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata    FindFirstGlobalVariable (lldb::SBTarget &target, const char *name);
195392bd8d8356a35a0ad7a9990e1e05d0509971c4bEnrico Granata
196979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBType
197979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    FindFirstType (const char* name);
198979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
199979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::SBTypeList
200979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    FindTypes (const char* type);
201e0bd571a8050da2b3462c35c9f209cbc9755c750Jim Ingham
2020b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton    lldb::SBType
2030b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton    GetBasicType(lldb::BasicType type);
204a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton
205a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    //------------------------------------------------------------------
206a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    /// Get all types matching \a type_mask from debug info in this
207a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    /// module.
208a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///
209a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    /// @param[in] type_mask
210a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///     A bitfield that consists of one or more bits logically OR'ed
211a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///     together from the lldb::TypeClass enumeration. This allows
212a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///     you to request only structure types, or only class, struct
213a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///     and union types. Passing in lldb::eTypeClassAny will return
214a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///     all types found in the debug information for this module.
215a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///
216a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    /// @return
217a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ///     A list of types in this module that match \a type_mask
218a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    //------------------------------------------------------------------
219a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    lldb::SBTypeList
220a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    GetTypes (uint32_t type_mask = lldb::eTypeClassAny);
221a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton
22249f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    //------------------------------------------------------------------
22349f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// Get the module version numbers.
22449f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///
22549f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// Many object files have a set of version numbers that describe
22649f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// the version of the executable or shared library. Typically there
22749f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// are major, minor and build, but there may be more. This function
22849f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// will extract the versions from object files if they are available.
22949f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///
23049f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// If \a versions is NULL, or if \a num_versions is 0, the return
23149f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// value will indicate how many version numbers are available in
23249f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// this object file. Then a subsequent call can be made to this
23349f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// function with a value of \a versions and \a num_versions that
23449f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// has enough storage to store some or all version numbers.
23549f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///
23649f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// @param[out] versions
23749f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     A pointer to an array of uint32_t types that is \a num_versions
23849f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     long. If this value is NULL, the return value will indicate
23949f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     how many version numbers are required for a subsequent call
24049f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     to this function so that all versions can be retrieved. If
24149f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     the value is non-NULL, then at most \a num_versions of the
24249f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     existing versions numbers will be filled into \a versions.
24349f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     If there is no version information available, \a versions
24449f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     will be filled with \a num_versions UINT32_MAX values
24549f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     and zero will be returned.
24649f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///
24749f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// @param[in] num_versions
24849f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     The maximum number of entries to fill into \a versions. If
24949f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     this value is zero, then the return value will indicate
25049f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     how many version numbers there are in total so another call
25149f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     to this function can be make with adequate storage in
25249f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     \a versions to get all of the version numbers. If \a
25349f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     num_versions is less than the actual number of version
25449f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     numbers in this object file, only \a num_versions will be
25549f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     filled into \a versions (if \a versions is non-NULL).
25649f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///
25749f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    /// @return
25849f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     This function always returns the number of version numbers
25949f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     that this object file has regardless of the number of
26049f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    ///     version numbers that were copied into \a versions.
26149f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    //------------------------------------------------------------------
26249f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    uint32_t
26349f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton    GetVersion (uint32_t *versions,
26449f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton                uint32_t num_versions);
26549f4bf21e0fb7675d67f95dafe66a098d3205650Greg Clayton
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
267b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    friend class SBAddress;
268b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton    friend class SBFrame;
2693e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    friend class SBSection;
27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBSymbolContext;
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBTarget;
27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    explicit SBModule (const lldb::ModuleSP& module_sp);
27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2750416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton    ModuleSP
2760416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton    GetSP () const;
2773e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton
2780416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton    void
2790416bdf783a7dc2544b9ab034e225391f8f47343Greg Clayton    SetSP (const ModuleSP &module_sp);
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28163094e0bb161580564954dee512955c1c79d3476Greg Clayton    lldb::ModuleSP m_opaque_sp;
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb
28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // LLDB_SBModule_h_
288