summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/ObjectFile/ELF
diff options
context:
space:
mode:
authorMohit K. Bhakkad <mohit.bhakkad@gmail.com>2015-09-09 10:32:20 +0000
committerMohit K. Bhakkad <mohit.bhakkad@gmail.com>2015-09-09 10:32:20 +0000
commit9514a383c871d790930a30b2ed69df61f54f3bf8 (patch)
tree8995262fddbfd10949e81175231c8bb179d49d95 /lldb/source/Plugins/ObjectFile/ELF
parent025103cc61efded742b95e0a3b1e3d2f75b0c965 (diff)
downloadbcm5719-llvm-9514a383c871d790930a30b2ed69df61f54f3bf8.tar.gz
bcm5719-llvm-9514a383c871d790930a30b2ed69df61f54f3bf8.zip
[LLDB][MIPS] Added support for the debugging of N32/O32 applications on MIPS64 target.
Patch by Nitesh Jain Reviewers: clayborg, ovyalov. Subscribers: jaydeep, bhushan, mohit.bhakkad, sagar, nitesh.jain, lldb-commits. Differential Revision: http://reviews.llvm.org/D12671 llvm-svn: 247134
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/ELF')
-rw-r--r--lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 5e2d39c2483..c9b1e0d9313 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -1517,8 +1517,8 @@ ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl &section_headers,
I != section_headers.end(); ++I)
{
static ConstString g_sect_name_gnu_debuglink (".gnu_debuglink");
- const ELFSectionHeaderInfo &header = *I;
- const uint64_t section_size = header.sh_type == SHT_NOBITS ? 0 : header.sh_size;
+ const ELFSectionHeaderInfo &sheader = *I;
+ const uint64_t section_size = sheader.sh_type == SHT_NOBITS ? 0 : sheader.sh_size;
ConstString name(shstr_data.PeekCStr(I->sh_name));
I->section_name = name;
@@ -1526,23 +1526,33 @@ ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl &section_headers,
if (arch_spec.GetMachine() == llvm::Triple::mips || arch_spec.GetMachine() == llvm::Triple::mipsel
|| arch_spec.GetMachine() == llvm::Triple::mips64 || arch_spec.GetMachine() == llvm::Triple::mips64el)
{
- if (header.sh_type == SHT_MIPS_ABIFLAGS)
+ uint32_t arch_flags = arch_spec.GetFlags ();
+ DataExtractor data;
+ if (sheader.sh_type == SHT_MIPS_ABIFLAGS)
{
- DataExtractor data;
- if (section_size && (data.SetData (object_data, header.sh_offset, section_size) == section_size))
+
+ if (section_size && (data.SetData (object_data, sheader.sh_offset, section_size) == section_size))
{
lldb::offset_t ase_offset = 12; // MIPS ABI Flags Version: 0
- uint32_t arch_flags = arch_spec.GetFlags ();
arch_flags |= data.GetU32 (&ase_offset);
- arch_spec.SetFlags (arch_flags);
}
}
+ // Settings appropriate ArchSpec ABI Flags
+ if (header.e_flags & llvm::ELF::EF_MIPS_ABI2)
+ {
+ arch_flags |= lldb_private::ArchSpec::eMIPSABI_N32;
+ }
+ else if (header.e_flags & llvm::ELF::EF_MIPS_ABI_O32)
+ {
+ arch_flags |= lldb_private::ArchSpec::eMIPSABI_O32;
+ }
+ arch_spec.SetFlags (arch_flags);
}
if (name == g_sect_name_gnu_debuglink)
{
DataExtractor data;
- if (section_size && (data.SetData (object_data, header.sh_offset, section_size) == section_size))
+ if (section_size && (data.SetData (object_data, sheader.sh_offset, section_size) == section_size))
{
lldb::offset_t gnu_debuglink_offset = 0;
gnu_debuglink_file = data.GetCStr (&gnu_debuglink_offset);
@@ -1552,7 +1562,7 @@ ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl &section_headers,
}
// Process ELF note section entries.
- bool is_note_header = (header.sh_type == SHT_NOTE);
+ bool is_note_header = (sheader.sh_type == SHT_NOTE);
// The section header ".note.android.ident" is stored as a
// PROGBITS type header but it is actually a note header.
@@ -1564,7 +1574,7 @@ ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl &section_headers,
{
// Allow notes to refine module info.
DataExtractor data;
- if (section_size && (data.SetData (object_data, header.sh_offset, section_size) == section_size))
+ if (section_size && (data.SetData (object_data, sheader.sh_offset, section_size) == section_size))
{
Error error = RefineModuleDetailsFromNote (data, arch_spec, uuid);
if (error.Fail ())
OpenPOWER on IntegriCloud