diff options
author | Ed Maste <emaste@freebsd.org> | 2013-10-11 01:16:08 +0000 |
---|---|---|
committer | Ed Maste <emaste@freebsd.org> | 2013-10-11 01:16:08 +0000 |
commit | 04a8bab0477b9b916a6d6d04df6b8ebd55b4f721 (patch) | |
tree | 13de7cb21a20f5f9a6e26432d2ee7993a2721cb8 /lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp | |
parent | 9218f5178d36e54eda4362e65585e360a88f1aa6 (diff) | |
download | bcm5719-llvm-04a8bab0477b9b916a6d6d04df6b8ebd55b4f721.tar.gz bcm5719-llvm-04a8bab0477b9b916a6d6d04df6b8ebd55b4f721.zip |
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
Diffstat (limited to 'lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp')
-rw-r--r-- | lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp index b46c9375802..a1511014009 100644 --- a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp +++ b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp @@ -289,12 +289,24 @@ ProcessPOSIX::GetImageInfoAddress() { Target *target = &GetTarget(); ObjectFile *obj_file = target->GetExecutableModule()->GetObjectFile(); - Address addr = obj_file->GetImageInfoAddress(); + bool indirect; + Address addr = obj_file->GetImageInfoAddress(indirect); - if (addr.IsValid()) - return addr.GetLoadAddress(target); - else - return LLDB_INVALID_ADDRESS; + 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 LLDB_INVALID_ADDRESS; } Error |