diff options
Diffstat (limited to 'lldb/source/API/SBAddress.cpp')
-rw-r--r-- | lldb/source/API/SBAddress.cpp | 413 |
1 files changed, 164 insertions, 249 deletions
diff --git a/lldb/source/API/SBAddress.cpp b/lldb/source/API/SBAddress.cpp index 470ea5659f2..0ef374f47a9 100644 --- a/lldb/source/API/SBAddress.cpp +++ b/lldb/source/API/SBAddress.cpp @@ -18,312 +18,227 @@ #include "lldb/Symbol/LineEntry.h" #include "lldb/Target/Target.h" - using namespace lldb; using namespace lldb_private; +SBAddress::SBAddress() : m_opaque_ap(new Address()) {} -SBAddress::SBAddress () : - m_opaque_ap (new Address()) -{ -} - -SBAddress::SBAddress (const Address *lldb_object_ptr) : - m_opaque_ap (new Address()) -{ - if (lldb_object_ptr) - ref() = *lldb_object_ptr; +SBAddress::SBAddress(const Address *lldb_object_ptr) + : m_opaque_ap(new Address()) { + if (lldb_object_ptr) + ref() = *lldb_object_ptr; } -SBAddress::SBAddress (const SBAddress &rhs) : - m_opaque_ap (new Address()) -{ - if (rhs.IsValid()) - ref() = rhs.ref(); +SBAddress::SBAddress(const SBAddress &rhs) : m_opaque_ap(new Address()) { + if (rhs.IsValid()) + ref() = rhs.ref(); } - -SBAddress::SBAddress (lldb::SBSection section, lldb::addr_t offset) : - m_opaque_ap(new Address (section.GetSP(), offset)) -{ -} +SBAddress::SBAddress(lldb::SBSection section, lldb::addr_t offset) + : m_opaque_ap(new Address(section.GetSP(), offset)) {} // Create an address by resolving a load address using the supplied target -SBAddress::SBAddress (lldb::addr_t load_addr, lldb::SBTarget &target) : - m_opaque_ap(new Address()) -{ - SetLoadAddress (load_addr, target); +SBAddress::SBAddress(lldb::addr_t load_addr, lldb::SBTarget &target) + : m_opaque_ap(new Address()) { + SetLoadAddress(load_addr, target); } +SBAddress::~SBAddress() {} - -SBAddress::~SBAddress () -{ -} - -const SBAddress & -SBAddress::operator = (const SBAddress &rhs) -{ - if (this != &rhs) - { - if (rhs.IsValid()) - ref() = rhs.ref(); - else - m_opaque_ap.reset (new Address()); - } - return *this; +const SBAddress &SBAddress::operator=(const SBAddress &rhs) { + if (this != &rhs) { + if (rhs.IsValid()) + ref() = rhs.ref(); + else + m_opaque_ap.reset(new Address()); + } + return *this; } -bool -SBAddress::IsValid () const -{ - return m_opaque_ap.get() != NULL && m_opaque_ap->IsValid(); +bool SBAddress::IsValid() const { + return m_opaque_ap.get() != NULL && m_opaque_ap->IsValid(); } -void -SBAddress::Clear () -{ - m_opaque_ap.reset (new Address()); -} +void SBAddress::Clear() { m_opaque_ap.reset(new Address()); } -void -SBAddress::SetAddress (lldb::SBSection section, lldb::addr_t offset) -{ - Address &addr = ref(); - addr.SetSection (section.GetSP()); - addr.SetOffset (offset); +void SBAddress::SetAddress(lldb::SBSection section, lldb::addr_t offset) { + Address &addr = ref(); + addr.SetSection(section.GetSP()); + addr.SetOffset(offset); } - -void -SBAddress::SetAddress (const Address *lldb_object_ptr) -{ - if (lldb_object_ptr) - ref() = *lldb_object_ptr; - else - m_opaque_ap.reset (new Address()); +void SBAddress::SetAddress(const Address *lldb_object_ptr) { + if (lldb_object_ptr) + ref() = *lldb_object_ptr; + else + m_opaque_ap.reset(new Address()); } -lldb::addr_t -SBAddress::GetFileAddress () const -{ - if (m_opaque_ap->IsValid()) - return m_opaque_ap->GetFileAddress(); - else - return LLDB_INVALID_ADDRESS; +lldb::addr_t SBAddress::GetFileAddress() const { + if (m_opaque_ap->IsValid()) + return m_opaque_ap->GetFileAddress(); + else + return LLDB_INVALID_ADDRESS; } -lldb::addr_t -SBAddress::GetLoadAddress (const SBTarget &target) const -{ - Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); - - lldb::addr_t addr = LLDB_INVALID_ADDRESS; - TargetSP target_sp (target.GetSP()); - if (target_sp) - { - if (m_opaque_ap->IsValid()) - { - std::lock_guard<std::recursive_mutex> guard(target_sp->GetAPIMutex()); - addr = m_opaque_ap->GetLoadAddress (target_sp.get()); - } - } +lldb::addr_t SBAddress::GetLoadAddress(const SBTarget &target) const { + Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); - if (log) - { - if (addr == LLDB_INVALID_ADDRESS) - log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => LLDB_INVALID_ADDRESS", - static_cast<void*>(target_sp.get())); - else - log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => 0x%" PRIx64, - static_cast<void*>(target_sp.get()), addr); + lldb::addr_t addr = LLDB_INVALID_ADDRESS; + TargetSP target_sp(target.GetSP()); + if (target_sp) { + if (m_opaque_ap->IsValid()) { + std::lock_guard<std::recursive_mutex> guard(target_sp->GetAPIMutex()); + addr = m_opaque_ap->GetLoadAddress(target_sp.get()); } + } - return addr; -} - -void -SBAddress::SetLoadAddress (lldb::addr_t load_addr, lldb::SBTarget &target) -{ - // Create the address object if we don't already have one - ref(); - if (target.IsValid()) - *this = target.ResolveLoadAddress(load_addr); + if (log) { + if (addr == LLDB_INVALID_ADDRESS) + log->Printf( + "SBAddress::GetLoadAddress (SBTarget(%p)) => LLDB_INVALID_ADDRESS", + static_cast<void *>(target_sp.get())); else - m_opaque_ap->Clear(); - - // Check if we weren't were able to resolve a section offset address. - // If we weren't it is ok, the load address might be a location on the - // stack or heap, so we should just have an address with no section and - // a valid offset - if (!m_opaque_ap->IsValid()) - m_opaque_ap->SetOffset(load_addr); -} - -bool -SBAddress::OffsetAddress (addr_t offset) -{ - if (m_opaque_ap->IsValid()) - { - addr_t addr_offset = m_opaque_ap->GetOffset(); - if (addr_offset != LLDB_INVALID_ADDRESS) - { - m_opaque_ap->SetOffset(addr_offset + offset); - return true; - } + log->Printf("SBAddress::GetLoadAddress (SBTarget(%p)) => 0x%" PRIx64, + static_cast<void *>(target_sp.get()), addr); + } + + return addr; +} + +void SBAddress::SetLoadAddress(lldb::addr_t load_addr, lldb::SBTarget &target) { + // Create the address object if we don't already have one + ref(); + if (target.IsValid()) + *this = target.ResolveLoadAddress(load_addr); + else + m_opaque_ap->Clear(); + + // Check if we weren't were able to resolve a section offset address. + // If we weren't it is ok, the load address might be a location on the + // stack or heap, so we should just have an address with no section and + // a valid offset + if (!m_opaque_ap->IsValid()) + m_opaque_ap->SetOffset(load_addr); +} + +bool SBAddress::OffsetAddress(addr_t offset) { + if (m_opaque_ap->IsValid()) { + addr_t addr_offset = m_opaque_ap->GetOffset(); + if (addr_offset != LLDB_INVALID_ADDRESS) { + m_opaque_ap->SetOffset(addr_offset + offset); + return true; } - return false; + } + return false; } -lldb::SBSection -SBAddress::GetSection () -{ - lldb::SBSection sb_section; - if (m_opaque_ap->IsValid()) - sb_section.SetSP (m_opaque_ap->GetSection()); - return sb_section; +lldb::SBSection SBAddress::GetSection() { + lldb::SBSection sb_section; + if (m_opaque_ap->IsValid()) + sb_section.SetSP(m_opaque_ap->GetSection()); + return sb_section; } -lldb::addr_t -SBAddress::GetOffset () -{ - if (m_opaque_ap->IsValid()) - return m_opaque_ap->GetOffset(); - return 0; +lldb::addr_t SBAddress::GetOffset() { + if (m_opaque_ap->IsValid()) + return m_opaque_ap->GetOffset(); + return 0; } -Address * -SBAddress::operator->() -{ - return m_opaque_ap.get(); -} +Address *SBAddress::operator->() { return m_opaque_ap.get(); } -const Address * -SBAddress::operator->() const -{ - return m_opaque_ap.get(); -} +const Address *SBAddress::operator->() const { return m_opaque_ap.get(); } -Address & -SBAddress::ref () -{ - if (m_opaque_ap.get() == NULL) - m_opaque_ap.reset (new Address()); - return *m_opaque_ap; +Address &SBAddress::ref() { + if (m_opaque_ap.get() == NULL) + m_opaque_ap.reset(new Address()); + return *m_opaque_ap; } -const Address & -SBAddress::ref () const -{ - // This object should already have checked with "IsValid()" - // prior to calling this function. In case you didn't we will assert - // and die to let you know. - assert (m_opaque_ap.get()); - return *m_opaque_ap; +const Address &SBAddress::ref() const { + // This object should already have checked with "IsValid()" + // prior to calling this function. In case you didn't we will assert + // and die to let you know. + assert(m_opaque_ap.get()); + return *m_opaque_ap; } -Address * -SBAddress::get () -{ - return m_opaque_ap.get(); -} +Address *SBAddress::get() { return m_opaque_ap.get(); } -bool -SBAddress::GetDescription (SBStream &description) -{ - // Call "ref()" on the stream to make sure it creates a backing stream in - // case there isn't one already... - Stream &strm = description.ref(); - if (m_opaque_ap->IsValid()) - { - m_opaque_ap->Dump (&strm, - NULL, - Address::DumpStyleResolvedDescription, - Address::DumpStyleModuleWithFileAddress, - 4); - StreamString sstrm; -// m_opaque_ap->Dump (&sstrm, NULL, Address::DumpStyleResolvedDescription, Address::DumpStyleInvalid, 4); -// if (sstrm.GetData()) -// strm.Printf (" (%s)", sstrm.GetData()); - } - else - strm.PutCString ("No value"); +bool SBAddress::GetDescription(SBStream &description) { + // Call "ref()" on the stream to make sure it creates a backing stream in + // case there isn't one already... + Stream &strm = description.ref(); + if (m_opaque_ap->IsValid()) { + m_opaque_ap->Dump(&strm, NULL, Address::DumpStyleResolvedDescription, + Address::DumpStyleModuleWithFileAddress, 4); + StreamString sstrm; + // m_opaque_ap->Dump (&sstrm, NULL, + // Address::DumpStyleResolvedDescription, Address::DumpStyleInvalid, + // 4); + // if (sstrm.GetData()) + // strm.Printf (" (%s)", sstrm.GetData()); + } else + strm.PutCString("No value"); - return true; + return true; } -SBModule -SBAddress::GetModule () -{ - SBModule sb_module; - if (m_opaque_ap->IsValid()) - sb_module.SetSP (m_opaque_ap->GetModule()); - return sb_module; +SBModule SBAddress::GetModule() { + SBModule sb_module; + if (m_opaque_ap->IsValid()) + sb_module.SetSP(m_opaque_ap->GetModule()); + return sb_module; } -SBSymbolContext -SBAddress::GetSymbolContext (uint32_t resolve_scope) -{ - SBSymbolContext sb_sc; - if (m_opaque_ap->IsValid()) - m_opaque_ap->CalculateSymbolContext (&sb_sc.ref(), resolve_scope); - return sb_sc; +SBSymbolContext SBAddress::GetSymbolContext(uint32_t resolve_scope) { + SBSymbolContext sb_sc; + if (m_opaque_ap->IsValid()) + m_opaque_ap->CalculateSymbolContext(&sb_sc.ref(), resolve_scope); + return sb_sc; } -SBCompileUnit -SBAddress::GetCompileUnit () -{ - SBCompileUnit sb_comp_unit; - if (m_opaque_ap->IsValid()) - sb_comp_unit.reset(m_opaque_ap->CalculateSymbolContextCompileUnit()); - return sb_comp_unit; +SBCompileUnit SBAddress::GetCompileUnit() { + SBCompileUnit sb_comp_unit; + if (m_opaque_ap->IsValid()) + sb_comp_unit.reset(m_opaque_ap->CalculateSymbolContextCompileUnit()); + return sb_comp_unit; } -SBFunction -SBAddress::GetFunction () -{ - SBFunction sb_function; - if (m_opaque_ap->IsValid()) - sb_function.reset(m_opaque_ap->CalculateSymbolContextFunction()); - return sb_function; +SBFunction SBAddress::GetFunction() { + SBFunction sb_function; + if (m_opaque_ap->IsValid()) + sb_function.reset(m_opaque_ap->CalculateSymbolContextFunction()); + return sb_function; } -SBBlock -SBAddress::GetBlock () -{ - SBBlock sb_block; - if (m_opaque_ap->IsValid()) - sb_block.SetPtr(m_opaque_ap->CalculateSymbolContextBlock()); - return sb_block; +SBBlock SBAddress::GetBlock() { + SBBlock sb_block; + if (m_opaque_ap->IsValid()) + sb_block.SetPtr(m_opaque_ap->CalculateSymbolContextBlock()); + return sb_block; } -SBSymbol -SBAddress::GetSymbol () -{ - SBSymbol sb_symbol; - if (m_opaque_ap->IsValid()) - sb_symbol.reset(m_opaque_ap->CalculateSymbolContextSymbol()); - return sb_symbol; +SBSymbol SBAddress::GetSymbol() { + SBSymbol sb_symbol; + if (m_opaque_ap->IsValid()) + sb_symbol.reset(m_opaque_ap->CalculateSymbolContextSymbol()); + return sb_symbol; } -SBLineEntry -SBAddress::GetLineEntry () -{ - SBLineEntry sb_line_entry; - if (m_opaque_ap->IsValid()) - { - LineEntry line_entry; - if (m_opaque_ap->CalculateSymbolContextLineEntry (line_entry)) - sb_line_entry.SetLineEntry (line_entry); - } - return sb_line_entry; +SBLineEntry SBAddress::GetLineEntry() { + SBLineEntry sb_line_entry; + if (m_opaque_ap->IsValid()) { + LineEntry line_entry; + if (m_opaque_ap->CalculateSymbolContextLineEntry(line_entry)) + sb_line_entry.SetLineEntry(line_entry); + } + return sb_line_entry; } -AddressClass -SBAddress::GetAddressClass () -{ - if (m_opaque_ap->IsValid()) - return m_opaque_ap->GetAddressClass(); - return eAddressClassInvalid; +AddressClass SBAddress::GetAddressClass() { + if (m_opaque_ap->IsValid()) + return m_opaque_ap->GetAddressClass(); + return eAddressClassInvalid; } - |