[Lldb-commits] [lldb] r228057 - Use basename of main executable in POSIX-DYLD on Android.

Hans Wennborg hans at hanshq.net
Tue Feb 3 16:10:29 PST 2015


I've merged it in r228081.

Thanks,
Hans

On Wed, February 4, 2015 00:07, Stephane Sezer wrote:
> Hey Hans,
>
> Can this be ported to the 3.6 branch of LLDB?
>
> Thanks.
>
> --
> Stephane Sezer
>
>> On Feb 3, 2015, at 2:48 PM, Stephane Sezer <sas at cd80.net> wrote:
>>
>> Author: sas
>> Date: Tue Feb  3 16:48:34 2015
>> New Revision: 228057
>>
>> URL:
>> https://urldefense.proofpoint.com/v1/url?u=http://llvm.org/viewvc/llvm-project?rev%3D228057%26view%3Drev&k=ZVNjlDMF0FElm4dQtryO4A%3D%3D%0A&r=g1GoAnQQskSBaWLJWw6X6w%3D%3D%0A&m=59IdNCzsjVmLCYoH6sIwbxMTZP7uvzg3InmARPWwFS0%3D%0A&s=ec067bbec1642366d5ad451a53f8672fd7785685b36e92dba00dc26b33a9dbba
>> Log:
>> Use basename of main executable in POSIX-DYLD on Android.
>>
>> Summary:
>> The Android dynamic linker reports only the basename of each SO entry,
>> so for
>> the above check to be successful, we need to compare it to the basename
>> of the
>> main executable.
>>
>> This also has a nasty side-effect when working with older version of
>> Android (verified on platform version 16), and debugging PIE
>> executables: the dynamic linker has a bug and reports the load address
>> of the main executable (which is a shared object, because PIE) to be 0.
>> We then try to update the list of loaded sections for all shared
>> objects, including the main executable, and set the load address to 0,
>> which breaks everything that relies on resolving addresses in the main
>> executable (breakpoints, stepping, etc). This commit also fixes that
>> broken
>> behavior when debugging on older Androids. This bug doesn't happen on
>> newer
>> Android versions (verified for Android L).
>>
>> Test Plan: Run test suite on linux.
>>
>> Reviewers: clayborg, tfiala, richard.mitton
>>
>> Subscribers: lldb-commits
>>
>> Differential Revision:
>> https://urldefense.proofpoint.com/v1/url?u=http://reviews.llvm.org/D7188&k=ZVNjlDMF0FElm4dQtryO4A%3D%3D%0A&r=g1GoAnQQskSBaWLJWw6X6w%3D%3D%0A&m=59IdNCzsjVmLCYoH6sIwbxMTZP7uvzg3InmARPWwFS0%3D%0A&s=bda4554590bf50859e131fc28a01065e0d29a1117e3b852a72eecdef2ecc2d3c
>>
>> Modified:
>>    lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
>>    lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h
>>
>> Modified:
>> lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
>> URL:
>> https://urldefense.proofpoint.com/v1/url?u=http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp?rev%3D228057%26r1%3D228056%26r2%3D228057%26view%3Ddiff&k=ZVNjlDMF0FElm4dQtryO4A%3D%3D%0A&r=g1GoAnQQskSBaWLJWw6X6w%3D%3D%0A&m=59IdNCzsjVmLCYoH6sIwbxMTZP7uvzg3InmARPWwFS0%3D%0A&s=0cffcd470300f81bb07d25e0c9020b7ad3e6969d9cec3bde446a58fed40b7430
>> ==============================================================================
>> ---
>> lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
>> (original)
>> +++
>> lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
>> Tue Feb  3 16:48:34 2015
>> @@ -19,6 +19,8 @@
>> #include "lldb/Target/Process.h"
>> #include "lldb/Target/Target.h"
>>
>> +#include "llvm/Support/Path.h"
>> +
>> #include "DYLDRendezvous.h"
>>
>> using namespace lldb;
>> @@ -238,9 +240,7 @@ DYLDRendezvous::UpdateSOEntriesForAdditi
>>             return false;
>>
>>         // Only add shared libraries and not the executable.
>> -        // On Linux this is indicated by an empty path in the entry.
>> -        // On FreeBSD it is the name of the executable.
>> -        if (entry.path.empty() || ::strcmp(entry.path.c_str(),
>> m_exe_path) == 0)
>> +        if (SOEntryIsMainExecutable(entry))
>>             continue;
>>
>>         pos = std::find(m_soentries.begin(), m_soentries.end(), entry);
>> @@ -277,6 +277,28 @@ DYLDRendezvous::UpdateSOEntriesForDeleti
>> }
>>
>> bool
>> +DYLDRendezvous::SOEntryIsMainExecutable(const SOEntry &entry)
>> +{
>> +    // On Linux the executable is indicated by an empty path in the
>> entry. On
>> +    // FreeBSD it is the full path to the executable. On Android, it is
>> the
>> +    // basename of the executable.
>> +
>> +    auto triple = m_process->GetTarget().GetArchitecture().GetTriple();
>> +    auto os_type = triple.getOS();
>> +    auto env_type = triple.getEnvironment();
>> +
>> +    switch (os_type) {
>> +        case llvm::Triple::FreeBSD:
>> +            return ::strcmp(entry.path.c_str(), m_exe_path) == 0;
>> +        case llvm::Triple::Linux:
>> +            return entry.path.empty() || (env_type ==
>> llvm::Triple::Android &&
>> +                   llvm::sys::path::filename(m_exe_path) ==
>> entry.path);
>> +        default:
>> +            return false;
>> +    }
>> +}
>> +
>> +bool
>> DYLDRendezvous::TakeSnapshot(SOEntryList &entry_list)
>> {
>>     SOEntry entry;
>> @@ -290,9 +312,7 @@ DYLDRendezvous::TakeSnapshot(SOEntryList
>>             return false;
>>
>>         // Only add shared libraries and not the executable.
>> -        // On Linux this is indicated by an empty path in the entry.
>> -        // On FreeBSD it is the name of the executable.
>> -        if (entry.path.empty() || ::strcmp(entry.path.c_str(),
>> m_exe_path) == 0)
>> +        if (SOEntryIsMainExecutable(entry))
>>             continue;
>>
>>         entry_list.push_back(entry);
>>
>> Modified:
>> lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h
>> URL:
>> https://urldefense.proofpoint.com/v1/url?u=http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h?rev%3D228057%26r1%3D228056%26r2%3D228057%26view%3Ddiff&k=ZVNjlDMF0FElm4dQtryO4A%3D%3D%0A&r=g1GoAnQQskSBaWLJWw6X6w%3D%3D%0A&m=59IdNCzsjVmLCYoH6sIwbxMTZP7uvzg3InmARPWwFS0%3D%0A&s=4c0b33cb650b88c145d35e26787b0690b1c10c7cd8459ef9982917fdc0860a60
>> ==============================================================================
>> --- lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h
>> (original)
>> +++ lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h
>> Tue Feb  3 16:48:34 2015
>> @@ -247,6 +247,9 @@ protected:
>>     bool
>>     UpdateSOEntriesForDeletion();
>>
>> +    bool
>> +    SOEntryIsMainExecutable(const SOEntry &entry);
>> +
>>     /// Reads the current list of shared objects according to the link
>> map
>>     /// supplied by the runtime linker.
>>     bool
>>
>>
>> _______________________________________________
>> lldb-commits mailing list
>> lldb-commits at cs.uiuc.edu
>> https://urldefense.proofpoint.com/v1/url?u=http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits&k=ZVNjlDMF0FElm4dQtryO4A%3D%3D%0A&r=g1GoAnQQskSBaWLJWw6X6w%3D%3D%0A&m=59IdNCzsjVmLCYoH6sIwbxMTZP7uvzg3InmARPWwFS0%3D%0A&s=d9c6255ba0b44c1e2dce881d47aed73a13fefaa87e883b378b2fc548e9db31ef
>
>




More information about the lldb-commits mailing list