Support mips shared object debug info

MIPS's .dyanamic section is read-only.  Instead of using DT_DEBUG for
the pointer to dyld information it uses a separate tag DT_MIPS_RLD_MAP
which points to storage in the read-write .rld_map section, which in
turn points to the dyld information.

Review: http://llvm-reviews.chandlerc.com/D1890
llvm-svn: 192408
This commit is contained in:
Ed Maste
2013-10-11 01:16:08 +00:00
parent 9218f5178d
commit 04a8bab047
5 changed files with 38 additions and 12 deletions

View File

@@ -515,7 +515,7 @@ ObjectFileELF::GetDependentModules(FileSpecList &files)
}
Address
ObjectFileELF::GetImageInfoAddress()
ObjectFileELF::GetImageInfoAddress(bool &indirect)
{
if (!ParseDynamicSymbols())
return Address();
@@ -539,8 +539,9 @@ ObjectFileELF::GetImageInfoAddress()
{
ELFDynamic &symbol = m_dynamic_symbols[i];
if (symbol.d_tag == DT_DEBUG)
if (symbol.d_tag == DT_DEBUG || symbol.d_tag == DT_MIPS_RLD_MAP)
{
indirect = (symbol.d_tag == DT_MIPS_RLD_MAP);
// Compute the offset as the number of previous entries plus the
// size of d_tag.
addr_t offset = i * dynsym_hdr->sh_entsize + GetAddressByteSize();