Author: emaste Date: Fri Oct 11 12:39:07 2013 New Revision: 192469 URL: http://llvm.org/viewvc/llvm-project?rev=192469&view=rev Log: Simplify indirect rld_map for mips (rework r192408).
Just pass a Target* into ObjectFileELF::GetImageInfoAddress so that it can do the extra dereference necessary on MIPS, instead of passing a flag back to the caller. Review: http://llvm-reviews.chandlerc.com/D1899 Modified: lldb/trunk/include/lldb/Symbol/ObjectFile.h lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp Modified: lldb/trunk/include/lldb/Symbol/ObjectFile.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ObjectFile.h?rev=192469&r1=192468&r2=192469&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/ObjectFile.h (original) +++ lldb/trunk/include/lldb/Symbol/ObjectFile.h Fri Oct 11 12:39:07 2013 @@ -506,7 +506,7 @@ public: /// The address of any auxiliary tables, or an invalid address if this /// object file format does not support or contain such information. virtual lldb_private::Address - GetImageInfoAddress (bool &indirect) { indirect = false; return Address(); } + GetImageInfoAddress (Target *target) { return Address(); } //------------------------------------------------------------------ /// Returns the address of the Entry Point in this object file - if Modified: lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp?rev=192469&r1=192468&r2=192469&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp (original) +++ lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp Fri Oct 11 12:39:07 2013 @@ -23,6 +23,7 @@ #include "lldb/Core/Stream.h" #include "lldb/Symbol/DWARFCallFrameInfo.h" #include "lldb/Symbol/SymbolContext.h" +#include "lldb/Target/Target.h" #include "lldb/Host/Host.h" #include "llvm/ADT/PointerUnion.h" @@ -515,7 +516,7 @@ ObjectFileELF::GetDependentModules(FileS } Address -ObjectFileELF::GetImageInfoAddress(bool &indirect) +ObjectFileELF::GetImageInfoAddress(Target *target) { if (!ParseDynamicSymbols()) return Address(); @@ -539,14 +540,24 @@ ObjectFileELF::GetImageInfoAddress(bool { ELFDynamic &symbol = m_dynamic_symbols[i]; - if (symbol.d_tag == DT_DEBUG || symbol.d_tag == DT_MIPS_RLD_MAP) + if (symbol.d_tag == DT_DEBUG) { - 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(); return Address(dynsym_section_sp, offset); } + else if (symbol.d_tag == DT_MIPS_RLD_MAP && target) + { + addr_t offset = i * dynsym_hdr->sh_entsize + GetAddressByteSize(); + addr_t dyn_base = dynsym_section_sp->GetLoadBaseAddress(target); + if (dyn_base == LLDB_INVALID_ADDRESS) + return Address(); + Address addr; + Error error; + if (target->ReadPointerFromMemory(dyn_base + offset, false, error, addr)) + return addr; + } } return Address(); Modified: lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h?rev=192469&r1=192468&r2=192469&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h (original) +++ lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h Fri Oct 11 12:39:07 2013 @@ -127,7 +127,7 @@ public: GetDependentModules(lldb_private::FileSpecList& files); virtual lldb_private::Address - GetImageInfoAddress(bool &indirect); + GetImageInfoAddress(lldb_private::Target *target); virtual lldb_private::Address GetEntryPointAddress (); Modified: lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp?rev=192469&r1=192468&r2=192469&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp (original) +++ lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp Fri Oct 11 12:39:07 2013 @@ -289,23 +289,10 @@ ProcessPOSIX::GetImageInfoAddress() { Target *target = &GetTarget(); ObjectFile *obj_file = target->GetExecutableModule()->GetObjectFile(); - bool indirect; - Address addr = obj_file->GetImageInfoAddress(indirect); + Address addr = obj_file->GetImageInfoAddress(target); if (addr.IsValid()) - { - if (indirect) - { - Address ind_addr; - Error error; - if (target->ReadPointerFromMemory(addr.GetLoadAddress(target), false, error, ind_addr)) - return ind_addr.GetLoadAddress(target); - } - else - { - return addr.GetLoadAddress(target); - } - } + return addr.GetLoadAddress(target); return LLDB_INVALID_ADDRESS; } Modified: lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp?rev=192469&r1=192468&r2=192469&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp (original) +++ lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp Fri Oct 11 12:39:07 2013 @@ -338,23 +338,10 @@ ProcessElfCore::GetImageInfoAddress() { Target *target = &GetTarget(); ObjectFile *obj_file = target->GetExecutableModule()->GetObjectFile(); - bool indirect; - Address addr = obj_file->GetImageInfoAddress(indirect); + Address addr = obj_file->GetImageInfoAddress(target); if (addr.IsValid()) - { - if (indirect) - { - Address ind_addr; - Error error; - if (target->ReadPointerFromMemory(addr.GetLoadAddress(target), false, error, ind_addr)) - return ind_addr.GetLoadAddress(target); - } - else - { - return addr.GetLoadAddress(target); - } - } + return addr.GetLoadAddress(target); return LLDB_INVALID_ADDRESS; } _______________________________________________ lldb-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
