124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBAddress.h ---------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef LLDB_SBAddress_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBAddress_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h" 14b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton#include "lldb/API/SBModule.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb { 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBAddress 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBAddress (); 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBAddress (const lldb::SBAddress &rhs); 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2639f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton SBAddress (lldb::SBSection section, lldb::addr_t offset); 2739f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton 28a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton // Create an address by resolving a load address using the supplied target 29a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton SBAddress (lldb::addr_t load_addr, lldb::SBTarget &target); 30a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~SBAddress (); 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33538eb82a89a68dbc57251915080bd5152b333978Greg Clayton const lldb::SBAddress & 34538eb82a89a68dbc57251915080bd5152b333978Greg Clayton operator = (const lldb::SBAddress &rhs); 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsValid () const; 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 39466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton void 40466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton Clear (); 41466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner addr_t 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFileAddress () const; 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner addr_t 46eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton GetLoadAddress (const lldb::SBTarget &target) const; 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton void 4939f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton SetAddress (lldb::SBSection section, lldb::addr_t offset); 5039f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton 5139f54ea7c3e0f9fb3bdc0d17a8def6781159d24fGreg Clayton void 52a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton SetLoadAddress (lldb::addr_t load_addr, 53a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton lldb::SBTarget &target); 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OffsetAddress (addr_t offset); 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice bool 5898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice GetDescription (lldb::SBStream &description); 5998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice 60c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // The following queries can lookup symbol information for a given address. 61c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // An address might refer to code or data from an existing module, or it 62c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // might refer to something on the stack or heap. The following functions 63c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // will only return valid values if the address has been resolved to a code 64c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // or data address using "void SBAddress::SetLoadAddress(...)" or 65c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // "lldb::SBAddress SBTarget::ResolveLoadAddress (...)". 66c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton lldb::SBSymbolContext 67c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton GetSymbolContext (uint32_t resolve_scope); 68c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 69c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 70c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // The following functions grab individual objects for a given address and 71c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // are less efficient if you want more than one symbol related objects. 72c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // Use one of the following when you want multiple debug symbol related 73c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // objects for an address: 74c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // lldb::SBSymbolContext SBAddress::GetSymbolContext (uint32_t resolve_scope); 75c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // lldb::SBSymbolContext SBTarget::ResolveSymbolContextForAddress (const SBAddress &addr, uint32_t resolve_scope); 76c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // One or more bits from the SymbolContextItem enumerations can be logically 77c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton // OR'ed together to more efficiently retrieve multiple symbol objects. 78c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 793e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton lldb::SBSection 803e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton GetSection (); 813e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton 821b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton lldb::addr_t 831b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton GetOffset (); 841b925206e3c4867fea9eb55a4c6460962cf32564Greg Clayton 85b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton lldb::SBModule 86b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton GetModule (); 87c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 88c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton lldb::SBCompileUnit 89c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton GetCompileUnit (); 90c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 91c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton lldb::SBFunction 92c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton GetFunction (); 93c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 94c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton lldb::SBBlock 95c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton GetBlock (); 96c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 97c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton lldb::SBSymbol 98c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton GetSymbol (); 99c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 100c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton lldb::SBLineEntry 101c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton GetLineEntry (); 102c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton 1037fb143064009e34dbb7a602924e9807375f72a46Greg Clayton lldb::AddressClass 1047fb143064009e34dbb7a602924e9807375f72a46Greg Clayton GetAddressClass (); 105b0e68d996b28cf81a28aeceefd69f7ed8d4aba99Greg Clayton 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10823b8abbe214c252028f6e09f79169529c846409dGreg Clayton friend class SBBlock; 1099a29f00d3dae2e368bd01226388633fe8653808eJim Ingham friend class SBBreakpointLocation; 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBFrame; 11189f1aa732c8b1df90cbbfe116b6f06cf80a25ae3Greg Clayton friend class SBFunction; 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBLineEntry; 1135c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton friend class SBInstruction; 114466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton friend class SBModule; 1153e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton friend class SBSection; 11689f1aa732c8b1df90cbbfe116b6f06cf80a25ae3Greg Clayton friend class SBSymbol; 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBSymbolContext; 118ea49cc78c01f34f874b7e710acebea4ead404be1Greg Clayton friend class SBTarget; 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBThread; 120915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata friend class SBValue; 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 122466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton lldb_private::Address * 123466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton operator->(); 124466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::Address * 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator->() const; 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 128a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton lldb_private::Address * 129a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton get (); 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 131466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton lldb_private::Address & 132a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton ref(); 133a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton 134a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton const lldb_private::Address & 135a395506fb374f1f589d0d860f5e6c9fa7b1e0b9aGreg Clayton ref() const; 136466f6c4c0783c6b5197059caccab94faf1e605e9Greg Clayton 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBAddress (const lldb_private::Address *lldb_object_ptr); 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetAddress (const lldb_private::Address *lldb_object_ptr); 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 144102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<lldb_private::Address> m_opaque_ap; 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // LLDB_SBAddress_h_ 151