summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2010-06-28 23:51:11 +0000
committerGreg Clayton <gclayton@apple.com>2010-06-28 23:51:11 +0000
commit8d38ac453673a0cbad6d2a6b5332cbf2c2847d1a (patch)
tree946670ae4bac7d57b5a7480c9c7a6e3a2eb6b4dc /lldb/source
parent3dd716c3c31f8cd2172fa53ca5a85b94db2dea65 (diff)
downloadbcm5719-llvm-8d38ac453673a0cbad6d2a6b5332cbf2c2847d1a.tar.gz
bcm5719-llvm-8d38ac453673a0cbad6d2a6b5332cbf2c2847d1a.zip
Fixed debug map in executable + DWARF in .o debugging on Mac OS X.
Added the ability to dump any file in the global module cache using any of the "image dump" commands. This allows us to dump the .o files that are used with DWARF + .o since they don't belong the the target list for the current target. llvm-svn: 107100
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Commands/CommandObjectImage.cpp56
-rw-r--r--lldb/source/Core/ModuleList.cpp14
-rw-r--r--lldb/source/Core/Section.cpp121
-rw-r--r--lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp14
4 files changed, 76 insertions, 129 deletions
diff --git a/lldb/source/Commands/CommandObjectImage.cpp b/lldb/source/Commands/CommandObjectImage.cpp
index cb717c41bbd..0bf339c0165 100644
--- a/lldb/source/Commands/CommandObjectImage.cpp
+++ b/lldb/source/Commands/CommandObjectImage.cpp
@@ -544,8 +544,18 @@ public:
{
FileSpec image_file(arg_cstr);
ModuleList matching_modules;
- const size_t num_matching_modules = target->GetImages().FindModules(&image_file, NULL, NULL, NULL, matching_modules);
-
+ size_t num_matching_modules = target->GetImages().FindModules(&image_file, NULL, NULL, NULL, matching_modules);
+
+ // Not found in our module list for our target, check the main
+ // shared module list in case it is a extra file used somewhere
+ // else
+ if (num_matching_modules == 0)
+ num_matching_modules = ModuleList::FindSharedModules (image_file,
+ target->GetArchitecture(),
+ NULL,
+ NULL,
+ matching_modules);
+
if (num_matching_modules > 0)
{
for (size_t i=0; i<num_matching_modules; ++i)
@@ -642,8 +652,18 @@ public:
{
FileSpec image_file(arg_cstr);
ModuleList matching_modules;
- const size_t num_matching_modules = target->GetImages().FindModules(&image_file, NULL, NULL, NULL, matching_modules);
-
+ size_t num_matching_modules = target->GetImages().FindModules(&image_file, NULL, NULL, NULL, matching_modules);
+
+ // Not found in our module list for our target, check the main
+ // shared module list in case it is a extra file used somewhere
+ // else
+ if (num_matching_modules == 0)
+ num_matching_modules = ModuleList::FindSharedModules (image_file,
+ target->GetArchitecture(),
+ NULL,
+ NULL,
+ matching_modules);
+
if (num_matching_modules > 0)
{
for (size_t i=0; i<num_matching_modules; ++i)
@@ -739,8 +759,18 @@ public:
{
FileSpec image_file(arg_cstr);
ModuleList matching_modules;
- const size_t num_matching_modules = target->GetImages().FindModules(&image_file, NULL, NULL, NULL, matching_modules);
-
+ size_t num_matching_modules = target->GetImages().FindModules(&image_file, NULL, NULL, NULL, matching_modules);
+
+ // Not found in our module list for our target, check the main
+ // shared module list in case it is a extra file used somewhere
+ // else
+ if (num_matching_modules == 0)
+ num_matching_modules = ModuleList::FindSharedModules (image_file,
+ target->GetArchitecture(),
+ NULL,
+ NULL,
+ matching_modules);
+
if (num_matching_modules > 0)
{
for (size_t i=0; i<num_matching_modules; ++i)
@@ -1343,8 +1373,18 @@ public:
{
FileSpec image_file(arg_cstr);
ModuleList matching_modules;
- const size_t num_matching_modules = target->GetImages().FindModules(&image_file, NULL, NULL, NULL, matching_modules);
-
+ size_t num_matching_modules = target->GetImages().FindModules(&image_file, NULL, NULL, NULL, matching_modules);
+
+ // Not found in our module list for our target, check the main
+ // shared module list in case it is a extra file used somewhere
+ // else
+ if (num_matching_modules == 0)
+ num_matching_modules = ModuleList::FindSharedModules (image_file,
+ target->GetArchitecture(),
+ NULL,
+ NULL,
+ matching_modules);
+
if (num_matching_modules > 0)
{
for (size_t i=0; i<num_matching_modules; ++i)
diff --git a/lldb/source/Core/ModuleList.cpp b/lldb/source/Core/ModuleList.cpp
index c928508b340..ae9bb880a20 100644
--- a/lldb/source/Core/ModuleList.cpp
+++ b/lldb/source/Core/ModuleList.cpp
@@ -437,6 +437,20 @@ ModuleList::GetModuleSP (lldb_private::Module *module_ptr)
return module_sp;
}
+size_t
+ModuleList::FindSharedModules
+(
+ const FileSpec& in_file_spec,
+ const ArchSpec& arch,
+ const UUID *uuid_ptr,
+ const ConstString *object_name_ptr,
+ ModuleList &matching_module_list
+)
+{
+ ModuleList &shared_module_list = GetSharedModuleList ();
+ Mutex::Locker locker(shared_module_list.m_modules_mutex);
+ return shared_module_list.FindModules (&in_file_spec, &arch, uuid_ptr, object_name_ptr, matching_module_list);
+}
Error
ModuleList::GetSharedModule
diff --git a/lldb/source/Core/Section.cpp b/lldb/source/Core/Section.cpp
index 57c519918f2..6ed47730c6f 100644
--- a/lldb/source/Core/Section.cpp
+++ b/lldb/source/Core/Section.cpp
@@ -45,32 +45,6 @@ Section::Section
{
}
-//Section::Section
-//(
-// Section *parent,
-// Module* module,
-// user_id_t sect_id,
-// const ConstString &name,
-// const AddressRange *file_vm_range,
-// uint64_t file_offset,
-// uint64_t file_size,
-// uint32_t flags
-//) :
-// ModuleChild (module),
-// UserID (sect_id),
-// Flags (flags),
-// m_parent (parent),
-// m_name (name),
-// m_range (),
-// m_file_offset (file_offset),
-// m_file_size (file_size),
-// m_children (),
-// m_fake (false)
-//{
-// if (file_vm_range)
-// m_range = *file_vm_range;
-//}
-
Section::~Section()
{
}
@@ -114,18 +88,6 @@ Section::GetName() const
return m_name;
}
-SectionList&
-Section::GetChildren()
-{
- return m_children;
-}
-
-const SectionList&
-Section::GetChildren() const
-{
- return m_children;
-}
-
addr_t
Section::GetFileAddress () const
{
@@ -148,31 +110,6 @@ Section::GetLinkedFileAddress () const
return LLDB_INVALID_ADDRESS;
}
-addr_t
-Section::GetOffset () const
-{
- if (m_parent)
- {
- // This section has a parent which means m_file_addr is an offset.
- return m_file_addr;
- }
-
- // This section has no parent, so there is no offset to be had
- return 0;
-}
-
-addr_t
-Section::GetByteSize () const
-{
- return m_byte_size;
-}
-
-void
-Section::SetByteSize (addr_t byte_size)
-{
- m_byte_size = byte_size;
-}
-
addr_t
Section::GetLoadBaseAddress (Process *process) const
@@ -225,18 +162,6 @@ Section::ResolveContainedAddress (addr_t offset, Address &so_addr) const
return true;
}
-uint64_t
-Section::GetFileOffset() const
-{
- return m_file_offset;
-}
-
-uint64_t
-Section::GetFileSize() const
-{
- return m_file_size;
-}
-
bool
Section::ContainsFileAddress (addr_t vm_addr) const
{
@@ -449,19 +374,6 @@ Section::MemoryMapSectionDataFromObjectFile(const ObjectFile* objfile, DataExtra
}
bool
-Section::IsFake() const
-{
- return m_fake;
-}
-
-void
-Section::SetIsFake(bool fake)
-{
- m_fake = fake;
-}
-
-
-bool
Section::IsDescendant (const Section *section)
{
if (this == section)
@@ -498,18 +410,6 @@ Section::SetLinkedLocation (const Section *linked_section, uint64_t linked_offse
m_linked_offset = linked_offset;
}
-const Section *
-Section::GetLinkedSection () const
-{
- return m_linked_section;
-}
-
-uint64_t
-Section::GetLinkedOffset () const
-{
- return m_linked_offset;
-}
-
#pragma mark SectionList
SectionList::SectionList () :
@@ -579,12 +479,6 @@ SectionList::ReplaceSection (user_id_t sect_id, SectionSP& sect_sp, uint32_t dep
size_t
-SectionList::GetSize () const
-{
- return m_sections.size();
-}
-
-size_t
SectionList::GetNumSections (uint32_t depth) const
{
size_t count = m_sections.size();
@@ -631,21 +525,6 @@ SectionList::FindSectionByName (const ConstString &section_dstr) const
}
return sect_sp;
}
-//
-//SectionSP
-//SectionList::FindSectionByNames (const char *s, ...) const
-//{
-// SectionSP sect_sp;
-// va_list ap;
-// va_start(ap, s);
-// uint32_t idx = 0;
-// for (const char *sect_name = s; sect_name != NULL; sect_name = va_arg(ap, const char *))
-// {
-// printf("[%u] %s\n", idx++, sect_name);
-// }
-// va_end(ap);
-// return sect_sp;
-//}
SectionSP
SectionList::FindSectionByID (user_id_t sect_id) const
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index 21860e1e4fb..89b0bce4be7 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -341,6 +341,20 @@ ObjectFileMachO::ParseSections ()
segment->GetChildren().Slide (-slide_amount, false);
segment->SetByteSize (curr_seg_max_addr - sect64_min_addr);
}
+
+ // Grow the section size as needed.
+ if (sect64.offset)
+ {
+ const lldb::addr_t segment_min_file_offset = segment->GetFileOffset();
+ const lldb::addr_t segment_max_file_offset = segment_min_file_offset + segment->GetFileSize();
+
+ const lldb::addr_t section_min_file_offset = sect64.offset;
+ const lldb::addr_t section_max_file_offset = section_min_file_offset + sect64.size;
+ const lldb::addr_t new_file_offset = std::min (section_min_file_offset, segment_min_file_offset);
+ const lldb::addr_t new_file_size = std::max (section_max_file_offset, segment_max_file_offset) - new_file_offset;
+ segment->SetFileOffset (new_file_offset);
+ segment->SetFileSize (new_file_size);
+ }
}
else
{
OpenPOWER on IntegriCloud