• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- SBAddress.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_SBAddress_h_
11 #define LLDB_SBAddress_h_
12 
13 #include "lldb/API/SBDefines.h"
14 #include "lldb/API/SBModule.h"
15 
16 namespace lldb {
17 
18 class SBAddress
19 {
20 public:
21 
22     SBAddress ();
23 
24     SBAddress (const lldb::SBAddress &rhs);
25 
26     SBAddress (lldb::SBSection section, lldb::addr_t offset);
27 
28     // Create an address by resolving a load address using the supplied target
29     SBAddress (lldb::addr_t load_addr, lldb::SBTarget &target);
30 
31     ~SBAddress ();
32 
33     const lldb::SBAddress &
34     operator = (const lldb::SBAddress &rhs);
35 
36     bool
37     IsValid () const;
38 
39     void
40     Clear ();
41 
42     addr_t
43     GetFileAddress () const;
44 
45     addr_t
46     GetLoadAddress (const lldb::SBTarget &target) const;
47 
48     void
49     SetAddress (lldb::SBSection section, lldb::addr_t offset);
50 
51     void
52     SetLoadAddress (lldb::addr_t load_addr,
53                     lldb::SBTarget &target);
54     bool
55     OffsetAddress (addr_t offset);
56 
57     bool
58     GetDescription (lldb::SBStream &description);
59 
60     // The following queries can lookup symbol information for a given address.
61     // An address might refer to code or data from an existing module, or it
62     // might refer to something on the stack or heap. The following functions
63     // will only return valid values if the address has been resolved to a code
64     // or data address using "void SBAddress::SetLoadAddress(...)" or
65     // "lldb::SBAddress SBTarget::ResolveLoadAddress (...)".
66     lldb::SBSymbolContext
67     GetSymbolContext (uint32_t resolve_scope);
68 
69 
70     // The following functions grab individual objects for a given address and
71     // are less efficient if you want more than one symbol related objects.
72     // Use one of the following when you want multiple debug symbol related
73     // objects for an address:
74     //    lldb::SBSymbolContext SBAddress::GetSymbolContext (uint32_t resolve_scope);
75     //    lldb::SBSymbolContext SBTarget::ResolveSymbolContextForAddress (const SBAddress &addr, uint32_t resolve_scope);
76     // One or more bits from the SymbolContextItem enumerations can be logically
77     // OR'ed together to more efficiently retrieve multiple symbol objects.
78 
79     lldb::SBSection
80     GetSection ();
81 
82     lldb::addr_t
83     GetOffset ();
84 
85     lldb::SBModule
86     GetModule ();
87 
88     lldb::SBCompileUnit
89     GetCompileUnit ();
90 
91     lldb::SBFunction
92     GetFunction ();
93 
94     lldb::SBBlock
95     GetBlock ();
96 
97     lldb::SBSymbol
98     GetSymbol ();
99 
100     lldb::SBLineEntry
101     GetLineEntry ();
102 
103     lldb::AddressClass
104     GetAddressClass ();
105 
106 protected:
107 
108     friend class SBBlock;
109     friend class SBBreakpointLocation;
110     friend class SBFrame;
111     friend class SBFunction;
112     friend class SBLineEntry;
113     friend class SBInstruction;
114     friend class SBModule;
115     friend class SBSection;
116     friend class SBSymbol;
117     friend class SBSymbolContext;
118     friend class SBTarget;
119     friend class SBThread;
120     friend class SBValue;
121 
122     lldb_private::Address *
123     operator->();
124 
125     const lldb_private::Address *
126     operator->() const;
127 
128     lldb_private::Address *
129     get ();
130 
131     lldb_private::Address &
132     ref();
133 
134     const lldb_private::Address &
135     ref() const;
136 
137     SBAddress (const lldb_private::Address *lldb_object_ptr);
138 
139     void
140     SetAddress (const lldb_private::Address *lldb_object_ptr);
141 
142 private:
143 
144     std::unique_ptr<lldb_private::Address> m_opaque_ap;
145 };
146 
147 
148 } // namespace lldb
149 
150 #endif // LLDB_SBAddress_h_
151