]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/API/SBAddress.h
Merge clang 7.0.1 and several follow-up changes
[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. Use
58   // one of the following when you want multiple debug symbol related objects
59   // 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 protected:
84   friend class SBBlock;
85   friend class SBBreakpointLocation;
86   friend class SBFrame;
87   friend class SBFunction;
88   friend class SBLineEntry;
89   friend class SBInstruction;
90   friend class SBModule;
91   friend class SBSection;
92   friend class SBSymbol;
93   friend class SBSymbolContext;
94   friend class SBTarget;
95   friend class SBThread;
96   friend class SBThreadPlan;
97   friend class SBValue;
98   friend class SBQueueItem;
99
100   lldb_private::Address *operator->();
101
102   const lldb_private::Address *operator->() const;
103
104   friend bool LLDB_API operator==(const SBAddress &lhs, const SBAddress &rhs);
105
106   lldb_private::Address *get();
107
108   lldb_private::Address &ref();
109
110   const lldb_private::Address &ref() const;
111
112   SBAddress(const lldb_private::Address *lldb_object_ptr);
113
114   void SetAddress(const lldb_private::Address *lldb_object_ptr);
115
116 private:
117   std::unique_ptr<lldb_private::Address> m_opaque_ap;
118 };
119
120 bool LLDB_API operator==(const SBAddress &lhs, const SBAddress &rhs);
121
122 } // namespace lldb
123
124 #endif // LLDB_SBAddress_h_