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.
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
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();
83 lldb::AddressClass GetAddressClass();
87 friend class SBBreakpointLocation;
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;
100 friend class SBQueueItem;
102 lldb_private::Address *operator->();
104 const lldb_private::Address *operator->() const;
106 friend bool operator==(const SBAddress &lhs, const SBAddress &rhs);
108 lldb_private::Address *get();
110 lldb_private::Address &ref();
112 const lldb_private::Address &ref() const;
114 SBAddress(const lldb_private::Address *lldb_object_ptr);
116 void SetAddress(const lldb_private::Address *lldb_object_ptr);
119 std::unique_ptr<lldb_private::Address> m_opaque_ap;
122 bool operator==(const SBAddress &lhs, const SBAddress &rhs);
126 #endif // LLDB_SBAddress_h_