diff options
Diffstat (limited to 'lldb/source/API')
| -rw-r--r-- | lldb/source/API/SBAddress.cpp | 141 | ||||
| -rw-r--r-- | lldb/source/API/SBLineEntry.cpp | 10 | 
2 files changed, 44 insertions, 107 deletions
| diff --git a/lldb/source/API/SBAddress.cpp b/lldb/source/API/SBAddress.cpp index a2e5d06564d..8e7560930db 100644 --- a/lldb/source/API/SBAddress.cpp +++ b/lldb/source/API/SBAddress.cpp @@ -17,68 +17,6 @@  #include "lldb/Host/Mutex.h"  #include "lldb/Target/Target.h" -namespace lldb_private  -{ -    // We need a address implementation to hold onto a reference to the module -    // since if the module goes away and we have anyone still holding onto a  -    // SBAddress object, we could crash. -    class AddressImpl -    { -    public: -        AddressImpl () : -            m_module_sp(), -            m_address() -        { -        } - -        AddressImpl (const Address &addr) : -            m_module_sp (addr.GetModule()), -            m_address (addr) -        { -        } -         -        AddressImpl (const AddressImpl &rhs) : -            m_module_sp (rhs.m_module_sp), -            m_address   (rhs.m_address) -        { -        } -         -        bool  -        IsValid () const -        { -            return m_address.IsValid(); -        } -         -        void -        operator = (const AddressImpl &rhs) -        { -            m_module_sp = rhs.m_module_sp; -            m_address = rhs.m_address; -        } -         -        Address & -        GetAddress () -        { -            return m_address; -        } -         -        Module * -        GetModule() -        { -            return m_module_sp.get(); -        } -         -        const lldb::ModuleSP & -        GetModuleSP() const -        { -            return m_module_sp; -        } -    protected: -        lldb::ModuleSP m_module_sp; -        Address m_address; -    }; -} -  using namespace lldb;  using namespace lldb_private; @@ -93,19 +31,19 @@ SBAddress::SBAddress (const Address *lldb_object_ptr) :      m_opaque_ap ()  {      if (lldb_object_ptr) -        m_opaque_ap.reset (new AddressImpl(*lldb_object_ptr)); +        ref() = *lldb_object_ptr;  }  SBAddress::SBAddress (const SBAddress &rhs) :      m_opaque_ap ()  {      if (rhs.IsValid()) -        m_opaque_ap.reset (new AddressImpl(*rhs.m_opaque_ap.get())); +        ref() = rhs.ref();  }  SBAddress::SBAddress (lldb::SBSection section, lldb::addr_t offset) : -    m_opaque_ap(new AddressImpl (Address(section.GetSP(), offset))) +    m_opaque_ap(new Address (section.GetSP(), offset))  {  } @@ -128,7 +66,7 @@ SBAddress::operator = (const SBAddress &rhs)      if (this != &rhs)      {          if (rhs.IsValid()) -            m_opaque_ap.reset(new AddressImpl(*rhs.m_opaque_ap.get())); +            ref() = rhs.ref();          else              m_opaque_ap.reset();      } @@ -160,12 +98,7 @@ void  SBAddress::SetAddress (const Address *lldb_object_ptr)  {      if (lldb_object_ptr) -    { -        if (m_opaque_ap.get()) -            *m_opaque_ap = *lldb_object_ptr; -        else -            m_opaque_ap.reset (new AddressImpl(*lldb_object_ptr)); -    } +        ref() =  *lldb_object_ptr;      else          m_opaque_ap.reset();  } @@ -174,7 +107,7 @@ lldb::addr_t  SBAddress::GetFileAddress () const  {      if (m_opaque_ap.get()) -        return m_opaque_ap->GetAddress().GetFileAddress(); +        return m_opaque_ap->GetFileAddress();      else          return LLDB_INVALID_ADDRESS;  } @@ -189,7 +122,7 @@ SBAddress::GetLoadAddress (const SBTarget &target) const      if (m_opaque_ap.get())      {          Mutex::Locker api_locker (target_sp->GetAPIMutex()); -        addr = m_opaque_ap->GetAddress().GetLoadAddress (target_sp.get()); +        addr = m_opaque_ap->GetLoadAddress (target_sp.get());      }      if (log) @@ -211,14 +144,14 @@ SBAddress::SetLoadAddress (lldb::addr_t load_addr, lldb::SBTarget &target)      if (target.IsValid())          *this = target.ResolveLoadAddress(load_addr);      else -        m_opaque_ap->GetAddress().Clear(); +        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->GetAddress().SetOffset(load_addr); +        m_opaque_ap->SetOffset(load_addr);  }  bool @@ -226,10 +159,10 @@ SBAddress::OffsetAddress (addr_t offset)  {      if (m_opaque_ap.get())      { -        addr_t addr_offset = m_opaque_ap->GetAddress().GetOffset(); +        addr_t addr_offset = m_opaque_ap->GetOffset();          if (addr_offset != LLDB_INVALID_ADDRESS)          { -            m_opaque_ap->GetAddress().SetOffset(addr_offset + offset); +            m_opaque_ap->SetOffset(addr_offset + offset);              return true;          }      } @@ -241,7 +174,7 @@ SBAddress::GetSection ()  {      lldb::SBSection sb_section;      if (m_opaque_ap.get()) -        sb_section.SetSP (m_opaque_ap->GetAddress().GetSection()); +        sb_section.SetSP (m_opaque_ap->GetSection());      return sb_section;  } @@ -249,50 +182,44 @@ lldb::addr_t  SBAddress::GetOffset ()  {      if (m_opaque_ap.get()) -        m_opaque_ap->GetAddress().GetOffset(); +        m_opaque_ap->GetOffset();      return 0;  }  Address *  SBAddress::operator->()  { -    if (m_opaque_ap.get()) -        return &m_opaque_ap->GetAddress(); -    return NULL; +    return m_opaque_ap.get();  }  const Address *  SBAddress::operator->() const  { -    if (m_opaque_ap.get()) -        return &m_opaque_ap->GetAddress(); -    return NULL; +    return m_opaque_ap.get();  }  Address &  SBAddress::ref ()  {      if (m_opaque_ap.get() == NULL) -        m_opaque_ap.reset (new AddressImpl()); -    return m_opaque_ap->GetAddress(); +        m_opaque_ap.reset (new Address()); +    return *m_opaque_ap;  }  const Address &  SBAddress::ref () const  { -    // "const SBAddress &addr" should already have checked "addr.IsValid()"  +    // 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->GetAddress(); +    return *m_opaque_ap;  }  Address *  SBAddress::get ()  { -    if (m_opaque_ap.get()) -        return &m_opaque_ap->GetAddress(); -    return NULL; +    return m_opaque_ap.get();  }  bool @@ -302,7 +229,17 @@ SBAddress::GetDescription (SBStream &description)      // case there isn't one already...      Stream &strm = description.ref();      if (m_opaque_ap.get()) -        m_opaque_ap->GetAddress().Dump (&strm, NULL, Address::DumpStyleModuleWithFileAddress, Address::DumpStyleInvalid, 4); +    { +        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"); @@ -314,9 +251,7 @@ SBAddress::GetModule ()  {      SBModule sb_module;      if (m_opaque_ap.get()) -    { -        sb_module.SetSP (m_opaque_ap->GetModuleSP()); -    } +        sb_module.SetSP (m_opaque_ap->GetModule());      return sb_module;  } @@ -325,7 +260,7 @@ SBAddress::GetSymbolContext (uint32_t resolve_scope)  {      SBSymbolContext sb_sc;      if (m_opaque_ap.get()) -        m_opaque_ap->GetAddress().CalculateSymbolContext (&sb_sc.ref(), resolve_scope); +        m_opaque_ap->CalculateSymbolContext (&sb_sc.ref(), resolve_scope);      return sb_sc;  } @@ -334,7 +269,7 @@ SBAddress::GetCompileUnit ()  {      SBCompileUnit sb_comp_unit;      if (m_opaque_ap.get()) -        sb_comp_unit.reset(m_opaque_ap->GetAddress().CalculateSymbolContextCompileUnit()); +        sb_comp_unit.reset(m_opaque_ap->CalculateSymbolContextCompileUnit());      return sb_comp_unit;  } @@ -343,7 +278,7 @@ SBAddress::GetFunction ()  {      SBFunction sb_function;      if (m_opaque_ap.get()) -        sb_function.reset(m_opaque_ap->GetAddress().CalculateSymbolContextFunction()); +        sb_function.reset(m_opaque_ap->CalculateSymbolContextFunction());      return sb_function;  } @@ -352,7 +287,7 @@ SBAddress::GetBlock ()  {      SBBlock sb_block;      if (m_opaque_ap.get()) -        sb_block.SetPtr(m_opaque_ap->GetAddress().CalculateSymbolContextBlock()); +        sb_block.SetPtr(m_opaque_ap->CalculateSymbolContextBlock());      return sb_block;  } @@ -361,7 +296,7 @@ SBAddress::GetSymbol ()  {      SBSymbol sb_symbol;      if (m_opaque_ap.get()) -        sb_symbol.reset(m_opaque_ap->GetAddress().CalculateSymbolContextSymbol()); +        sb_symbol.reset(m_opaque_ap->CalculateSymbolContextSymbol());      return sb_symbol;  } @@ -372,7 +307,7 @@ SBAddress::GetLineEntry ()      if (m_opaque_ap.get())      {          LineEntry line_entry; -        if (m_opaque_ap->GetAddress().CalculateSymbolContextLineEntry (line_entry)) +        if (m_opaque_ap->CalculateSymbolContextLineEntry (line_entry))              sb_line_entry.SetLineEntry (line_entry);      }      return sb_line_entry; diff --git a/lldb/source/API/SBLineEntry.cpp b/lldb/source/API/SBLineEntry.cpp index db288bc6f0c..3f923e92381 100644 --- a/lldb/source/API/SBLineEntry.cpp +++ b/lldb/source/API/SBLineEntry.cpp @@ -75,8 +75,9 @@ SBLineEntry::GetStartAddress () const      if (log)      {          StreamString sstr; -        if (sb_address.get()) -            sb_address->Dump (&sstr, NULL, Address::DumpStyleModuleWithFileAddress, Address::DumpStyleInvalid, 4); +        const Address *addr = sb_address.get(); +        if (addr) +            addr->Dump (&sstr, NULL, Address::DumpStyleModuleWithFileAddress, Address::DumpStyleInvalid, 4);          log->Printf ("SBLineEntry(%p)::GetStartAddress () => SBAddress (%p): %s",                        m_opaque_ap.get(), sb_address.get(), sstr.GetData());      } @@ -97,8 +98,9 @@ SBLineEntry::GetEndAddress () const      if (log)      {          StreamString sstr; -        if (sb_address.get()) -            sb_address->Dump (&sstr, NULL, Address::DumpStyleModuleWithFileAddress, Address::DumpStyleInvalid, 4); +        const Address *addr = sb_address.get(); +        if (addr) +            addr->Dump (&sstr, NULL, Address::DumpStyleModuleWithFileAddress, Address::DumpStyleInvalid, 4);          log->Printf ("SBLineEntry(%p)::GetEndAddress () => SBAddress (%p): %s",                        m_opaque_ap.get(), sb_address.get(), sstr.GetData());      } | 

