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