diff options
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 |