[Lldb-commits] [PATCH] Fix SO entry is main executable detection on android

Tamas Berghammer tberghammer at google.com
Thu Mar 12 09:23:32 PDT 2015


Hi clayborg, sas, ovyalov,

Fix SO entry is main executable detection on android

* On Android (at least on platfrom-21 x86) the dynamic linker reports the executable with its full path
* Use the platform path of the executable when storing it into the cache (used to identify the SO entry for the executable) as this is the path what will be reported by the dynamic linker. If the platform path isn't set (local debugging) then it falls back to the normal file path.

http://reviews.llvm.org/D8296

Files:
  source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp

Index: source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
===================================================================
--- source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
+++ source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
@@ -120,7 +120,7 @@
         Module *exe_mod = m_process->GetTarget().GetExecutableModulePointer();
         if (exe_mod)
         {
-            exe_mod->GetFileSpec().GetPath(m_exe_path, PATH_MAX);
+            exe_mod->GetPlatformFileSpec().GetPath(m_exe_path, PATH_MAX);
             if (log)
                 log->Printf ("DYLDRendezvous::%s exe module executable path set: '%s'", __FUNCTION__, m_exe_path);
         }
@@ -281,8 +281,7 @@
 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.
+    // FreeBSD and on Android it is the full path to the executable.
 
     auto triple = m_process->GetTarget().GetArchitecture().GetTriple();
     auto os_type = triple.getOS();
@@ -292,8 +291,12 @@
         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);
+            switch (env_type) {
+                case llvm::Triple::Android:
+                    return ::strcmp(entry.path.c_str(), m_exe_path) == 0;
+                default:
+                    entry.path.empty();
+            }
         default:
             return false;
     }

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D8296.21841.patch
Type: text/x-patch
Size: 1744 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150312/b20470d0/attachment.bin>


More information about the lldb-commits mailing list