1 //===-- SBAddress.h ---------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLDB_SBAddress_h_
11 #define LLDB_SBAddress_h_
13 #include "lldb/API/SBDefines.h"
14 #include "lldb/API/SBModule.h"
18 class LLDB_API SBAddress {
22 SBAddress(const lldb::SBAddress &rhs);
24 SBAddress(lldb::SBSection section, lldb::addr_t offset);
26 // Create an address by resolving a load address using the supplied target
27 SBAddress(lldb::addr_t load_addr, lldb::SBTarget &target);
31 const lldb::SBAddress &operator=(const lldb::SBAddress &rhs);
37 addr_t GetFileAddress() const;
39 addr_t GetLoadAddress(const lldb::SBTarget &target) const;
41 void SetAddress(lldb::SBSection section, lldb::addr_t offset);
43 void SetLoadAddress(lldb::addr_t load_addr, lldb::SBTarget &target);
44 bool OffsetAddress(addr_t offset);
46 bool GetDescription(lldb::SBStream &description);
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);
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
60 // lldb::SBSymbolContext SBAddress::GetSymbolContext (uint32_t
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.
67 lldb::SBSection GetSection();
69 lldb::addr_t GetOffset();
71 lldb::SBModule GetModule();
73 lldb::SBCompileUnit GetCompileUnit();
75 lldb::SBFunction GetFunction();
77 lldb::SBBlock GetBlock();
79 lldb::SBSymbol GetSymbol();
81 lldb::SBLineEntry GetLineEntry();
85 friend class SBBreakpointLocation;
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;
98 friend class SBQueueItem;
100 lldb_private::Address *operator->();
102 const lldb_private::Address *operator->() const;
104 friend bool LLDB_API operator==(const SBAddress &lhs, const SBAddress &rhs);
106 lldb_private::Address *get();
108 lldb_private::Address &ref();
110 const lldb_private::Address &ref() const;
112 SBAddress(const lldb_private::Address *lldb_object_ptr);
114 void SetAddress(const lldb_private::Address *lldb_object_ptr);
117 std::unique_ptr<lldb_private::Address> m_opaque_ap;
120 bool LLDB_API operator==(const SBAddress &lhs, const SBAddress &rhs);
124 #endif // LLDB_SBAddress_h_