summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/Section.cpp
diff options
context:
space:
mode:
authorKate Stone <katherine.stone@apple.com>2016-09-06 20:57:50 +0000
committerKate Stone <katherine.stone@apple.com>2016-09-06 20:57:50 +0000
commitb9c1b51e45b845debb76d8658edabca70ca56079 (patch)
treedfcb5a13ef2b014202340f47036da383eaee74aa /lldb/source/Core/Section.cpp
parentd5aa73376966339caad04013510626ec2e42c760 (diff)
downloadbcm5719-llvm-b9c1b51e45b845debb76d8658edabca70ca56079.tar.gz
bcm5719-llvm-b9c1b51e45b845debb76d8658edabca70ca56079.zip
*** This commit represents a complete reformatting of the LLDB source code
*** to conform to clang-format’s LLVM style. This kind of mass change has *** two obvious implications: Firstly, merging this particular commit into a downstream fork may be a huge effort. Alternatively, it may be worth merging all changes up to this commit, performing the same reformatting operation locally, and then discarding the merge for this particular commit. The commands used to accomplish this reformatting were as follows (with current working directory as the root of the repository): find . \( -iname "*.c" -or -iname "*.cpp" -or -iname "*.h" -or -iname "*.mm" \) -exec clang-format -i {} + find . -iname "*.py" -exec autopep8 --in-place --aggressive --aggressive {} + ; The version of clang-format used was 3.9.0, and autopep8 was 1.2.4. Secondly, “blame” style tools will generally point to this commit instead of a meaningful prior commit. There are alternatives available that will attempt to look through this change and find the appropriate prior commit. YMMV. llvm-svn: 280751
Diffstat (limited to 'lldb/source/Core/Section.cpp')
-rw-r--r--lldb/source/Core/Section.cpp929
1 files changed, 410 insertions, 519 deletions
diff --git a/lldb/source/Core/Section.cpp b/lldb/source/Core/Section.cpp
index 9622cb78970..95bcdada537 100644
--- a/lldb/source/Core/Section.cpp
+++ b/lldb/source/Core/Section.cpp
@@ -17,600 +17,491 @@
using namespace lldb;
using namespace lldb_private;
-Section::Section(const ModuleSP &module_sp, ObjectFile *obj_file, user_id_t sect_id, const ConstString &name,
- SectionType sect_type, addr_t file_addr, addr_t byte_size, lldb::offset_t file_offset,
- lldb::offset_t file_size, uint32_t log2align, uint32_t flags, uint32_t target_byte_size /*=1*/)
- : ModuleChild(module_sp),
- UserID(sect_id),
- Flags(flags),
- m_obj_file(obj_file),
- m_type(sect_type),
- m_parent_wp(),
- m_name(name),
- m_file_addr(file_addr),
- m_byte_size(byte_size),
- m_file_offset(file_offset),
- m_file_size(file_size),
- m_log2align(log2align),
- m_children(),
- m_fake(false),
- m_encrypted(false),
- m_thread_specific(false),
- m_readable(false),
- m_writable(false),
- m_executable(false),
- m_target_byte_size(target_byte_size)
-{
-// printf ("Section::Section(%p): module=%p, sect_id = 0x%16.16" PRIx64 ", addr=[0x%16.16" PRIx64 " - 0x%16.16" PRIx64 "), file [0x%16.16" PRIx64 " - 0x%16.16" PRIx64 "), flags = 0x%8.8x, name = %s\n",
-// this, module_sp.get(), sect_id, file_addr, file_addr + byte_size, file_offset, file_offset + file_size, flags, name.GetCString());
-}
-
-Section::Section(const lldb::SectionSP &parent_section_sp, const ModuleSP &module_sp, ObjectFile *obj_file,
- user_id_t sect_id, const ConstString &name, SectionType sect_type, addr_t file_addr, addr_t byte_size,
- lldb::offset_t file_offset, lldb::offset_t file_size, uint32_t log2align, uint32_t flags,
+Section::Section(const ModuleSP &module_sp, ObjectFile *obj_file,
+ user_id_t sect_id, const ConstString &name,
+ SectionType sect_type, addr_t file_addr, addr_t byte_size,
+ lldb::offset_t file_offset, lldb::offset_t file_size,
+ uint32_t log2align, uint32_t flags,
uint32_t target_byte_size /*=1*/)
- : ModuleChild(module_sp),
- UserID(sect_id),
- Flags(flags),
- m_obj_file(obj_file),
- m_type(sect_type),
- m_parent_wp(),
- m_name(name),
- m_file_addr(file_addr),
- m_byte_size(byte_size),
- m_file_offset(file_offset),
- m_file_size(file_size),
- m_log2align(log2align),
- m_children(),
- m_fake(false),
- m_encrypted(false),
- m_thread_specific(false),
- m_readable(false),
- m_writable(false),
- m_executable(false),
- m_target_byte_size(target_byte_size)
-{
-// printf ("Section::Section(%p): module=%p, sect_id = 0x%16.16" PRIx64 ", addr=[0x%16.16" PRIx64 " - 0x%16.16" PRIx64 "), file [0x%16.16" PRIx64 " - 0x%16.16" PRIx64 "), flags = 0x%8.8x, name = %s.%s\n",
-// this, module_sp.get(), sect_id, file_addr, file_addr + byte_size, file_offset, file_offset + file_size, flags, parent_section_sp->GetName().GetCString(), name.GetCString());
- if (parent_section_sp)
- m_parent_wp = parent_section_sp;
-}
-
-Section::~Section()
-{
-// printf ("Section::~Section(%p)\n", this);
-}
-
-addr_t
-Section::GetFileAddress () const
-{
- SectionSP parent_sp (GetParent ());
- if (parent_sp)
- {
- // This section has a parent which means m_file_addr is an offset into
- // the parent section, so the file address for this section is the file
- // address of the parent plus the offset
- return parent_sp->GetFileAddress() + m_file_addr;
- }
+ : ModuleChild(module_sp), UserID(sect_id), Flags(flags),
+ m_obj_file(obj_file), m_type(sect_type), m_parent_wp(), m_name(name),
+ m_file_addr(file_addr), m_byte_size(byte_size),
+ m_file_offset(file_offset), m_file_size(file_size),
+ m_log2align(log2align), m_children(), m_fake(false), m_encrypted(false),
+ m_thread_specific(false), m_readable(false), m_writable(false),
+ m_executable(false), m_target_byte_size(target_byte_size) {
+ // printf ("Section::Section(%p): module=%p, sect_id = 0x%16.16" PRIx64 ",
+ // addr=[0x%16.16" PRIx64 " - 0x%16.16" PRIx64 "), file [0x%16.16" PRIx64 "
+ // - 0x%16.16" PRIx64 "), flags = 0x%8.8x, name = %s\n",
+ // this, module_sp.get(), sect_id, file_addr, file_addr +
+ // byte_size, file_offset, file_offset + file_size, flags,
+ // name.GetCString());
+}
+
+Section::Section(const lldb::SectionSP &parent_section_sp,
+ const ModuleSP &module_sp, ObjectFile *obj_file,
+ user_id_t sect_id, const ConstString &name,
+ SectionType sect_type, addr_t file_addr, addr_t byte_size,
+ lldb::offset_t file_offset, lldb::offset_t file_size,
+ uint32_t log2align, uint32_t flags,
+ uint32_t target_byte_size /*=1*/)
+ : ModuleChild(module_sp), UserID(sect_id), Flags(flags),
+ m_obj_file(obj_file), m_type(sect_type), m_parent_wp(), m_name(name),
+ m_file_addr(file_addr), m_byte_size(byte_size),
+ m_file_offset(file_offset), m_file_size(file_size),
+ m_log2align(log2align), m_children(), m_fake(false), m_encrypted(false),
+ m_thread_specific(false), m_readable(false), m_writable(false),
+ m_executable(false), m_target_byte_size(target_byte_size) {
+ // printf ("Section::Section(%p): module=%p, sect_id = 0x%16.16" PRIx64 ",
+ // addr=[0x%16.16" PRIx64 " - 0x%16.16" PRIx64 "), file [0x%16.16" PRIx64 "
+ // - 0x%16.16" PRIx64 "), flags = 0x%8.8x, name = %s.%s\n",
+ // this, module_sp.get(), sect_id, file_addr, file_addr +
+ // byte_size, file_offset, file_offset + file_size, flags,
+ // parent_section_sp->GetName().GetCString(), name.GetCString());
+ if (parent_section_sp)
+ m_parent_wp = parent_section_sp;
+}
+
+Section::~Section() {
+ // printf ("Section::~Section(%p)\n", this);
+}
+
+addr_t Section::GetFileAddress() const {
+ SectionSP parent_sp(GetParent());
+ if (parent_sp) {
+ // This section has a parent which means m_file_addr is an offset into
+ // the parent section, so the file address for this section is the file
+ // address of the parent plus the offset
+ return parent_sp->GetFileAddress() + m_file_addr;
+ }
+ // This section has no parent, so m_file_addr is the file base address
+ return m_file_addr;
+}
+
+bool Section::SetFileAddress(lldb::addr_t file_addr) {
+ SectionSP parent_sp(GetParent());
+ if (parent_sp) {
+ if (m_file_addr >= file_addr)
+ return parent_sp->SetFileAddress(m_file_addr - file_addr);
+ return false;
+ } else {
// This section has no parent, so m_file_addr is the file base address
- return m_file_addr;
-}
-
-bool
-Section::SetFileAddress (lldb::addr_t file_addr)
-{
- SectionSP parent_sp (GetParent ());
- if (parent_sp)
- {
- if (m_file_addr >= file_addr)
- return parent_sp->SetFileAddress (m_file_addr - file_addr);
- return false;
- }
- else
- {
- // This section has no parent, so m_file_addr is the file base address
- m_file_addr = file_addr;
- return true;
- }
+ m_file_addr = file_addr;
+ return true;
+ }
}
-lldb::addr_t
-Section::GetOffset () const
-{
- // This section has a parent which means m_file_addr is an offset.
- SectionSP parent_sp (GetParent ());
- if (parent_sp)
- return m_file_addr;
-
- // This section has no parent, so there is no offset to be had
- return 0;
-}
+lldb::addr_t Section::GetOffset() const {
+ // This section has a parent which means m_file_addr is an offset.
+ SectionSP parent_sp(GetParent());
+ if (parent_sp)
+ return m_file_addr;
-addr_t
-Section::GetLoadBaseAddress (Target *target) const
-{
- addr_t load_base_addr = LLDB_INVALID_ADDRESS;
- SectionSP parent_sp (GetParent ());
- if (parent_sp)
- {
- load_base_addr = parent_sp->GetLoadBaseAddress (target);
- if (load_base_addr != LLDB_INVALID_ADDRESS)
- load_base_addr += GetOffset();
- }
- if (load_base_addr == LLDB_INVALID_ADDRESS)
- {
- load_base_addr = target->GetSectionLoadList().GetSectionLoadAddress (const_cast<Section *>(this)->shared_from_this());
+ // This section has no parent, so there is no offset to be had
+ return 0;
+}
+
+addr_t Section::GetLoadBaseAddress(Target *target) const {
+ addr_t load_base_addr = LLDB_INVALID_ADDRESS;
+ SectionSP parent_sp(GetParent());
+ if (parent_sp) {
+ load_base_addr = parent_sp->GetLoadBaseAddress(target);
+ if (load_base_addr != LLDB_INVALID_ADDRESS)
+ load_base_addr += GetOffset();
+ }
+ if (load_base_addr == LLDB_INVALID_ADDRESS) {
+ load_base_addr = target->GetSectionLoadList().GetSectionLoadAddress(
+ const_cast<Section *>(this)->shared_from_this());
+ }
+ return load_base_addr;
+}
+
+bool Section::ResolveContainedAddress(addr_t offset, Address &so_addr) const {
+ const size_t num_children = m_children.GetSize();
+ if (num_children > 0) {
+ for (size_t i = 0; i < num_children; i++) {
+ Section *child_section = m_children.GetSectionAtIndex(i).get();
+
+ addr_t child_offset = child_section->GetOffset();
+ if (child_offset <= offset &&
+ offset - child_offset < child_section->GetByteSize())
+ return child_section->ResolveContainedAddress(offset - child_offset,
+ so_addr);
}
- return load_base_addr;
-}
-
-bool
-Section::ResolveContainedAddress (addr_t offset, Address &so_addr) const
-{
- const size_t num_children = m_children.GetSize();
- if (num_children > 0)
- {
- for (size_t i=0; i<num_children; i++)
- {
- Section* child_section = m_children.GetSectionAtIndex (i).get();
-
- addr_t child_offset = child_section->GetOffset();
- if (child_offset <= offset && offset - child_offset < child_section->GetByteSize())
- return child_section->ResolveContainedAddress (offset - child_offset, so_addr);
- }
- }
- so_addr.SetOffset(offset);
- so_addr.SetSection(const_cast<Section *>(this)->shared_from_this());
-
+ }
+ so_addr.SetOffset(offset);
+ so_addr.SetSection(const_cast<Section *>(this)->shared_from_this());
+
#ifdef LLDB_CONFIGURATION_DEBUG
- // For debug builds, ensure that there are no orphaned (i.e., moduleless) sections.
- assert(GetModule().get());
+ // For debug builds, ensure that there are no orphaned (i.e., moduleless)
+ // sections.
+ assert(GetModule().get());
#endif
- return true;
+ return true;
}
-bool
-Section::ContainsFileAddress (addr_t vm_addr) const
-{
- const addr_t file_addr = GetFileAddress();
- if (file_addr != LLDB_INVALID_ADDRESS)
- {
- if (file_addr <= vm_addr)
- {
- const addr_t offset = (vm_addr - file_addr) * m_target_byte_size;
- return offset < GetByteSize();
- }
+bool Section::ContainsFileAddress(addr_t vm_addr) const {
+ const addr_t file_addr = GetFileAddress();
+ if (file_addr != LLDB_INVALID_ADDRESS) {
+ if (file_addr <= vm_addr) {
+ const addr_t offset = (vm_addr - file_addr) * m_target_byte_size;
+ return offset < GetByteSize();
}
- return false;
+ }
+ return false;
}
-int
-Section::Compare (const Section& a, const Section& b)
-{
- if (&a == &b)
- return 0;
-
- const ModuleSP a_module_sp = a.GetModule();
- const ModuleSP b_module_sp = b.GetModule();
- if (a_module_sp == b_module_sp)
- {
- user_id_t a_sect_uid = a.GetID();
- user_id_t b_sect_uid = b.GetID();
- if (a_sect_uid < b_sect_uid)
- return -1;
- if (a_sect_uid > b_sect_uid)
- return 1;
- return 0;
- }
- else
- {
- // The modules are different, just compare the module pointers
- if (a_module_sp.get() < b_module_sp.get())
- return -1;
- else
- return 1; // We already know the modules aren't equal
- }
-}
-
-
-void
-Section::Dump (Stream *s, Target *target, uint32_t depth) const
-{
-// s->Printf("%.*p: ", (int)sizeof(void*) * 2, this);
- s->Indent();
- s->Printf("0x%8.8" PRIx64 " %-16s ", GetID(), GetSectionTypeAsCString (m_type));
- bool resolved = true;
- addr_t addr = LLDB_INVALID_ADDRESS;
+int Section::Compare(const Section &a, const Section &b) {
+ if (&a == &b)
+ return 0;
- if (GetByteSize() == 0)
- s->Printf("%39s", "");
+ const ModuleSP a_module_sp = a.GetModule();
+ const ModuleSP b_module_sp = b.GetModule();
+ if (a_module_sp == b_module_sp) {
+ user_id_t a_sect_uid = a.GetID();
+ user_id_t b_sect_uid = b.GetID();
+ if (a_sect_uid < b_sect_uid)
+ return -1;
+ if (a_sect_uid > b_sect_uid)
+ return 1;
+ return 0;
+ } else {
+ // The modules are different, just compare the module pointers
+ if (a_module_sp.get() < b_module_sp.get())
+ return -1;
else
- {
- if (target)
- addr = GetLoadBaseAddress (target);
-
- if (addr == LLDB_INVALID_ADDRESS)
- {
- if (target)
- resolved = false;
- addr = GetFileAddress();
- }
-
- VMRange range(addr, addr + m_byte_size);
- range.Dump (s, 0);
+ return 1; // We already know the modules aren't equal
+ }
+}
+
+void Section::Dump(Stream *s, Target *target, uint32_t depth) const {
+ // s->Printf("%.*p: ", (int)sizeof(void*) * 2, this);
+ s->Indent();
+ s->Printf("0x%8.8" PRIx64 " %-16s ", GetID(),
+ GetSectionTypeAsCString(m_type));
+ bool resolved = true;
+ addr_t addr = LLDB_INVALID_ADDRESS;
+
+ if (GetByteSize() == 0)
+ s->Printf("%39s", "");
+ else {
+ if (target)
+ addr = GetLoadBaseAddress(target);
+
+ if (addr == LLDB_INVALID_ADDRESS) {
+ if (target)
+ resolved = false;
+ addr = GetFileAddress();
}
- s->Printf("%c %c%c%c 0x%8.8" PRIx64 " 0x%8.8" PRIx64 " 0x%8.8x ", resolved ? ' ' : '*', m_readable ? 'r' : '-',
- m_writable ? 'w' : '-', m_executable ? 'x' : '-', m_file_offset, m_file_size, Get());
+ VMRange range(addr, addr + m_byte_size);
+ range.Dump(s, 0);
+ }
+
+ s->Printf("%c %c%c%c 0x%8.8" PRIx64 " 0x%8.8" PRIx64 " 0x%8.8x ",
+ resolved ? ' ' : '*', m_readable ? 'r' : '-',
+ m_writable ? 'w' : '-', m_executable ? 'x' : '-', m_file_offset,
+ m_file_size, Get());
- DumpName (s);
+ DumpName(s);
- s->EOL();
+ s->EOL();
- if (depth > 0)
- m_children.Dump(s, target, false, depth - 1);
+ if (depth > 0)
+ m_children.Dump(s, target, false, depth - 1);
}
-void
-Section::DumpName (Stream *s) const
-{
- SectionSP parent_sp (GetParent ());
- if (parent_sp)
- {
- parent_sp->DumpName (s);
- s->PutChar('.');
- }
- else
- {
- // The top most section prints the module basename
- const char * name = NULL;
- ModuleSP module_sp (GetModule());
- const FileSpec &file_spec = m_obj_file->GetFileSpec();
-
- if (m_obj_file)
- name = file_spec.GetFilename().AsCString();
- if ((!name || !name[0]) && module_sp)
- name = module_sp->GetFileSpec().GetFilename().AsCString();
- if (name && name[0])
- s->Printf("%s.", name);
- }
- m_name.Dump(s);
+void Section::DumpName(Stream *s) const {
+ SectionSP parent_sp(GetParent());
+ if (parent_sp) {
+ parent_sp->DumpName(s);
+ s->PutChar('.');
+ } else {
+ // The top most section prints the module basename
+ const char *name = NULL;
+ ModuleSP module_sp(GetModule());
+ const FileSpec &file_spec = m_obj_file->GetFileSpec();
+
+ if (m_obj_file)
+ name = file_spec.GetFilename().AsCString();
+ if ((!name || !name[0]) && module_sp)
+ name = module_sp->GetFileSpec().GetFilename().AsCString();
+ if (name && name[0])
+ s->Printf("%s.", name);
+ }
+ m_name.Dump(s);
}
-bool
-Section::IsDescendant (const Section *section)
-{
- if (this == section)
- return true;
- SectionSP parent_sp (GetParent ());
- if (parent_sp)
- return parent_sp->IsDescendant (section);
- return false;
+bool Section::IsDescendant(const Section *section) {
+ if (this == section)
+ return true;
+ SectionSP parent_sp(GetParent());
+ if (parent_sp)
+ return parent_sp->IsDescendant(section);
+ return false;
}
-bool
-Section::Slide (addr_t slide_amount, bool slide_children)
-{
- if (m_file_addr != LLDB_INVALID_ADDRESS)
- {
- if (slide_amount == 0)
- return true;
+bool Section::Slide(addr_t slide_amount, bool slide_children) {
+ if (m_file_addr != LLDB_INVALID_ADDRESS) {
+ if (slide_amount == 0)
+ return true;
- m_file_addr += slide_amount;
+ m_file_addr += slide_amount;
- if (slide_children)
- m_children.Slide (slide_amount, slide_children);
+ if (slide_children)
+ m_children.Slide(slide_amount, slide_children);
- return true;
- }
- return false;
+ return true;
+ }
+ return false;
}
//------------------------------------------------------------------
/// Get the permissions as OR'ed bits from lldb::Permissions
//------------------------------------------------------------------
-uint32_t
-Section::GetPermissions() const
-{
- uint32_t permissions = 0;
- if (m_readable)
- permissions |= ePermissionsReadable;
- if (m_writable)
- permissions |= ePermissionsWritable;
- if (m_executable)
- permissions |= ePermissionsExecutable;
- return permissions;
+uint32_t Section::GetPermissions() const {
+ uint32_t permissions = 0;
+ if (m_readable)
+ permissions |= ePermissionsReadable;
+ if (m_writable)
+ permissions |= ePermissionsWritable;
+ if (m_executable)
+ permissions |= ePermissionsExecutable;
+ return permissions;
}
//------------------------------------------------------------------
/// Set the permissions using bits OR'ed from lldb::Permissions
//------------------------------------------------------------------
-void
-Section::SetPermissions(uint32_t permissions)
-{
- m_readable = (permissions & ePermissionsReadable) != 0;
- m_writable = (permissions & ePermissionsWritable) != 0;
- m_executable = (permissions & ePermissionsExecutable) != 0;
+void Section::SetPermissions(uint32_t permissions) {
+ m_readable = (permissions & ePermissionsReadable) != 0;
+ m_writable = (permissions & ePermissionsWritable) != 0;
+ m_executable = (permissions & ePermissionsExecutable) != 0;
}
-lldb::offset_t
-Section::GetSectionData (void *dst, lldb::offset_t dst_len, lldb::offset_t offset)
-{
- if (m_obj_file)
- return m_obj_file->ReadSectionData (this,
- offset,
- dst,
- dst_len);
- return 0;
+lldb::offset_t Section::GetSectionData(void *dst, lldb::offset_t dst_len,
+ lldb::offset_t offset) {
+ if (m_obj_file)
+ return m_obj_file->ReadSectionData(this, offset, dst, dst_len);
+ return 0;
}
-lldb::offset_t
-Section::GetSectionData (DataExtractor& section_data) const
-{
- if (m_obj_file)
- return m_obj_file->ReadSectionData (this, section_data);
- return 0;
+lldb::offset_t Section::GetSectionData(DataExtractor &section_data) const {
+ if (m_obj_file)
+ return m_obj_file->ReadSectionData(this, section_data);
+ return 0;
}
#pragma mark SectionList
-SectionList::SectionList () :
- m_sections()
-{
-}
-
+SectionList::SectionList() : m_sections() {}
-SectionList::~SectionList ()
-{
-}
+SectionList::~SectionList() {}
-SectionList &
-SectionList::operator = (const SectionList& rhs)
-{
- if (this != &rhs)
- m_sections = rhs.m_sections;
- return *this;
+SectionList &SectionList::operator=(const SectionList &rhs) {
+ if (this != &rhs)
+ m_sections = rhs.m_sections;
+ return *this;
}
-size_t
-SectionList::AddSection (const lldb::SectionSP& section_sp)
-{
- if (section_sp)
- {
- size_t section_index = m_sections.size();
- m_sections.push_back(section_sp);
- return section_index;
- }
+size_t SectionList::AddSection(const lldb::SectionSP &section_sp) {
+ if (section_sp) {
+ size_t section_index = m_sections.size();
+ m_sections.push_back(section_sp);
+ return section_index;
+ }
- return std::numeric_limits<size_t>::max ();
+ return std::numeric_limits<size_t>::max();
}
// Warning, this can be slow as it's removing items from a std::vector.
-bool
-SectionList::DeleteSection (size_t idx)
-{
- if (idx < m_sections.size())
- {
- m_sections.erase (m_sections.begin() + idx);
- return true;
- }
- return false;
-}
-
-size_t
-SectionList::FindSectionIndex (const Section* sect)
-{
- iterator sect_iter;
- iterator begin = m_sections.begin();
- iterator end = m_sections.end();
- for (sect_iter = begin; sect_iter != end; ++sect_iter)
- {
- if (sect_iter->get() == sect)
- {
- // The secton was already in this section list
- return std::distance (begin, sect_iter);
- }
- }
- return UINT32_MAX;
-}
-
-size_t
-SectionList::AddUniqueSection (const lldb::SectionSP& sect_sp)
-{
- size_t sect_idx = FindSectionIndex (sect_sp.get());
- if (sect_idx == UINT32_MAX)
- {
- sect_idx = AddSection (sect_sp);
- }
- return sect_idx;
-}
-
-bool
-SectionList::ReplaceSection (user_id_t sect_id, const lldb::SectionSP& sect_sp, uint32_t depth)
-{
- iterator sect_iter, end = m_sections.end();
- for (sect_iter = m_sections.begin(); sect_iter != end; ++sect_iter)
- {
- if ((*sect_iter)->GetID() == sect_id)
- {
- *sect_iter = sect_sp;
- return true;
- }
- else if (depth > 0)
- {
- if ((*sect_iter)->GetChildren().ReplaceSection(sect_id, sect_sp, depth - 1))
- return true;
- }
+bool SectionList::DeleteSection(size_t idx) {
+ if (idx < m_sections.size()) {
+ m_sections.erase(m_sections.begin() + idx);
+ return true;
+ }
+ return false;
+}
+
+size_t SectionList::FindSectionIndex(const Section *sect) {
+ iterator sect_iter;
+ iterator begin = m_sections.begin();
+ iterator end = m_sections.end();
+ for (sect_iter = begin; sect_iter != end; ++sect_iter) {
+ if (sect_iter->get() == sect) {
+ // The secton was already in this section list
+ return std::distance(begin, sect_iter);
}
- return false;
-}
-
-size_t
-SectionList::GetNumSections (uint32_t depth) const
-{
- size_t count = m_sections.size();
- if (depth > 0)
- {
- const_iterator sect_iter, end = m_sections.end();
- for (sect_iter = m_sections.begin(); sect_iter != end; ++sect_iter)
- {
- count += (*sect_iter)->GetChildren().GetNumSections(depth - 1);
- }
+ }
+ return UINT32_MAX;
+}
+
+size_t SectionList::AddUniqueSection(const lldb::SectionSP &sect_sp) {
+ size_t sect_idx = FindSectionIndex(sect_sp.get());
+ if (sect_idx == UINT32_MAX) {
+ sect_idx = AddSection(sect_sp);
+ }
+ return sect_idx;
+}
+
+bool SectionList::ReplaceSection(user_id_t sect_id,
+ const lldb::SectionSP &sect_sp,
+ uint32_t depth) {
+ iterator sect_iter, end = m_sections.end();
+ for (sect_iter = m_sections.begin(); sect_iter != end; ++sect_iter) {
+ if ((*sect_iter)->GetID() == sect_id) {
+ *sect_iter = sect_sp;
+ return true;
+ } else if (depth > 0) {
+ if ((*sect_iter)
+ ->GetChildren()
+ .ReplaceSection(sect_id, sect_sp, depth - 1))
+ return true;
}
- return count;
+ }
+ return false;
}
-SectionSP
-SectionList::GetSectionAtIndex (size_t idx) const
-{
- SectionSP sect_sp;
- if (idx < m_sections.size())
- sect_sp = m_sections[idx];
- return sect_sp;
-}
-
-SectionSP
-SectionList::FindSectionByName (const ConstString &section_dstr) const
-{
- SectionSP sect_sp;
- // Check if we have a valid section string
- if (section_dstr && !m_sections.empty())
- {
- const_iterator sect_iter;
- const_iterator end = m_sections.end();
- for (sect_iter = m_sections.begin(); sect_iter != end && sect_sp.get() == NULL; ++sect_iter)
- {
- Section *child_section = sect_iter->get();
- if (child_section)
- {
- if (child_section->GetName() == section_dstr)
- {
- sect_sp = *sect_iter;
- }
- else
- {
- sect_sp = child_section->GetChildren().FindSectionByName(section_dstr);
- }
- }
- }
+size_t SectionList::GetNumSections(uint32_t depth) const {
+ size_t count = m_sections.size();
+ if (depth > 0) {
+ const_iterator sect_iter, end = m_sections.end();
+ for (sect_iter = m_sections.begin(); sect_iter != end; ++sect_iter) {
+ count += (*sect_iter)->GetChildren().GetNumSections(depth - 1);
}
- return sect_sp;
+ }
+ return count;
}
-SectionSP
-SectionList::FindSectionByID (user_id_t sect_id) const
-{
- SectionSP sect_sp;
- if (sect_id)
- {
- const_iterator sect_iter;
- const_iterator end = m_sections.end();
- for (sect_iter = m_sections.begin(); sect_iter != end && sect_sp.get() == NULL; ++sect_iter)
- {
- if ((*sect_iter)->GetID() == sect_id)
- {
- sect_sp = *sect_iter;
- break;
- }
- else
- {
- sect_sp = (*sect_iter)->GetChildren().FindSectionByID (sect_id);
- }
- }
- }
- return sect_sp;
+SectionSP SectionList::GetSectionAtIndex(size_t idx) const {
+ SectionSP sect_sp;
+ if (idx < m_sections.size())
+ sect_sp = m_sections[idx];
+ return sect_sp;
}
-
SectionSP
-SectionList::FindSectionByType (SectionType sect_type, bool check_children, size_t start_idx) const
-{
- SectionSP sect_sp;
- size_t num_sections = m_sections.size();
- for (size_t idx = start_idx; idx < num_sections; ++idx)
- {
- if (m_sections[idx]->GetType() == sect_type)
- {
- sect_sp = m_sections[idx];
- break;
- }
- else if (check_children)
- {
- sect_sp = m_sections[idx]->GetChildren().FindSectionByType (sect_type, check_children, 0);
- if (sect_sp)
- break;
+SectionList::FindSectionByName(const ConstString &section_dstr) const {
+ SectionSP sect_sp;
+ // Check if we have a valid section string
+ if (section_dstr && !m_sections.empty()) {
+ const_iterator sect_iter;
+ const_iterator end = m_sections.end();
+ for (sect_iter = m_sections.begin();
+ sect_iter != end && sect_sp.get() == NULL; ++sect_iter) {
+ Section *child_section = sect_iter->get();
+ if (child_section) {
+ if (child_section->GetName() == section_dstr) {
+ sect_sp = *sect_iter;
+ } else {
+ sect_sp =
+ child_section->GetChildren().FindSectionByName(section_dstr);
}
+ }
}
- return sect_sp;
+ }
+ return sect_sp;
}
-SectionSP
-SectionList::FindSectionContainingFileAddress (addr_t vm_addr, uint32_t depth) const
-{
- SectionSP sect_sp;
+SectionSP SectionList::FindSectionByID(user_id_t sect_id) const {
+ SectionSP sect_sp;
+ if (sect_id) {
const_iterator sect_iter;
const_iterator end = m_sections.end();
- for (sect_iter = m_sections.begin(); sect_iter != end && sect_sp.get() == NULL; ++sect_iter)
- {
- Section *sect = sect_iter->get();
- if (sect->ContainsFileAddress (vm_addr))
- {
- // The file address is in this section. We need to make sure one of our child
- // sections doesn't contain this address as well as obeying the depth limit
- // that was passed in.
- if (depth > 0)
- sect_sp = sect->GetChildren().FindSectionContainingFileAddress(vm_addr, depth - 1);
-
- if (sect_sp.get() == NULL && !sect->IsFake())
- sect_sp = *sect_iter;
- }
+ for (sect_iter = m_sections.begin();
+ sect_iter != end && sect_sp.get() == NULL; ++sect_iter) {
+ if ((*sect_iter)->GetID() == sect_id) {
+ sect_sp = *sect_iter;
+ break;
+ } else {
+ sect_sp = (*sect_iter)->GetChildren().FindSectionByID(sect_id);
+ }
}
- return sect_sp;
-}
-
-bool
-SectionList::ContainsSection(user_id_t sect_id) const
-{
- return FindSectionByID (sect_id).get() != NULL;
-}
-
-void
-SectionList::Dump (Stream *s, Target *target, bool show_header, uint32_t depth) const
-{
- bool target_has_loaded_sections = target && !target->GetSectionLoadList().IsEmpty();
- if (show_header && !m_sections.empty())
- {
- s->Indent();
- s->Printf("SectID Type %s Address Perm File Off. File Size Flags "
- " Section Name\n",
- target_has_loaded_sections ? "Load" : "File");
- s->Indent();
- s->PutCString("---------- ---------------- --------------------------------------- ---- ---------- ---------- "
- "---------- ----------------------------\n");
+ }
+ return sect_sp;
+}
+
+SectionSP SectionList::FindSectionByType(SectionType sect_type,
+ bool check_children,
+ size_t start_idx) const {
+ SectionSP sect_sp;
+ size_t num_sections = m_sections.size();
+ for (size_t idx = start_idx; idx < num_sections; ++idx) {
+ if (m_sections[idx]->GetType() == sect_type) {
+ sect_sp = m_sections[idx];
+ break;
+ } else if (check_children) {
+ sect_sp = m_sections[idx]->GetChildren().FindSectionByType(
+ sect_type, check_children, 0);
+ if (sect_sp)
+ break;
}
-
-
- const_iterator sect_iter;
- const_iterator end = m_sections.end();
- for (sect_iter = m_sections.begin(); sect_iter != end; ++sect_iter)
- {
- (*sect_iter)->Dump(s, target_has_loaded_sections ? target : NULL, depth);
+ }
+ return sect_sp;
+}
+
+SectionSP SectionList::FindSectionContainingFileAddress(addr_t vm_addr,
+ uint32_t depth) const {
+ SectionSP sect_sp;
+ const_iterator sect_iter;
+ const_iterator end = m_sections.end();
+ for (sect_iter = m_sections.begin();
+ sect_iter != end && sect_sp.get() == NULL; ++sect_iter) {
+ Section *sect = sect_iter->get();
+ if (sect->ContainsFileAddress(vm_addr)) {
+ // The file address is in this section. We need to make sure one of our
+ // child
+ // sections doesn't contain this address as well as obeying the depth
+ // limit
+ // that was passed in.
+ if (depth > 0)
+ sect_sp = sect->GetChildren().FindSectionContainingFileAddress(
+ vm_addr, depth - 1);
+
+ if (sect_sp.get() == NULL && !sect->IsFake())
+ sect_sp = *sect_iter;
}
+ }
+ return sect_sp;
+}
- if (show_header && !m_sections.empty())
- s->IndentLess();
-
+bool SectionList::ContainsSection(user_id_t sect_id) const {
+ return FindSectionByID(sect_id).get() != NULL;
}
-size_t
-SectionList::Slide (addr_t slide_amount, bool slide_children)
-{
- size_t count = 0;
- const_iterator pos, end = m_sections.end();
- for (pos = m_sections.begin(); pos != end; ++pos)
- {
- if ((*pos)->Slide(slide_amount, slide_children))
- ++count;
- }
- return count;
+void SectionList::Dump(Stream *s, Target *target, bool show_header,
+ uint32_t depth) const {
+ bool target_has_loaded_sections =
+ target && !target->GetSectionLoadList().IsEmpty();
+ if (show_header && !m_sections.empty()) {
+ s->Indent();
+ s->Printf("SectID Type %s Address "
+ " Perm File Off. File Size Flags "
+ " Section Name\n",
+ target_has_loaded_sections ? "Load" : "File");
+ s->Indent();
+ s->PutCString("---------- ---------------- "
+ "--------------------------------------- ---- ---------- "
+ "---------- "
+ "---------- ----------------------------\n");
+ }
+
+ const_iterator sect_iter;
+ const_iterator end = m_sections.end();
+ for (sect_iter = m_sections.begin(); sect_iter != end; ++sect_iter) {
+ (*sect_iter)->Dump(s, target_has_loaded_sections ? target : NULL, depth);
+ }
+
+ if (show_header && !m_sections.empty())
+ s->IndentLess();
+}
+
+size_t SectionList::Slide(addr_t slide_amount, bool slide_children) {
+ size_t count = 0;
+ const_iterator pos, end = m_sections.end();
+ for (pos = m_sections.begin(); pos != end; ++pos) {
+ if ((*pos)->Slide(slide_amount, slide_children))
+ ++count;
+ }
+ return count;
}
OpenPOWER on IntegriCloud