labath added inline comments.

================
Comment at: lldb/source/Host/linux/Host.cpp:178-185
     LLDB_LOG(log, "failed to read link exe link for {0}: {1}", pid,
              Status(errno, eErrorTypePOSIX));
-    return false;
+    ExePath.resize(0);
+#if defined(__ANDROID__)
+    // On android we fallback to Arg0, which commonly is an apk package name.
+    if (!process_info.GetArg0().empty()) {
+      ExePath = process_info.GetArg0();
----------------
wallace wrote:
> labath wrote:
> > Why does this fail on android exactly? Is it some seccomp thingy? I'm 
> > surprised that we're allowed to read `/proc/cmdline`, but not the 
> > `/proc/exe` link..
> > 
> > Anyway, I don't think that pretending that "com.my.app" is an executable 
> > file name is a good idea. Maybe it would be better to implement something 
> > on the other end. I.e., we print out argv[0]  if the file name is not 
> > present?
> From what I've been seeing, /proc/cmdline is always available, even for root 
> processes. On the other hand, /proc/exe is only available for the user that 
> is seeing it. In fact, if you use run-as, you can see the contents of 
> /proc/exe, but that would involve making too many slow calls (run-as is slow).
> 
> I do think that having "com.my.app" as executable name is okay, because 
> android doesn't let you interact with an apk by any other means, unless you 
> root your device. When using android commands, "com.my.app" is just like any 
> other process.
> 
> I don't have any strong opinions though, so I'm okay with following your 
> suggestion if you prefer so.
> 
> Handling the android case from the host by doing exePath =  argv[0] would 
> look like this:
> 
> - the Arg0 fallback is done inside the client when the exe path is empty 
> - a special additional handling would be required for cases when lldb is 
> running on Android. With the approach of this diff, that case is covered.
> - the current function, in the case of android, returns a possible empty exe 
> path. For anything not android, empty exe paths are not allowed
> 
> 
> what do you think?
Having "com.my.app" as an executable (more like, process)  name is probably 
fine. However, having that as an executable _path_ (of type FileSpec!) is 
streching it too far, I believe. If this function was returning some 
higher-level concept of a process, which had a "name" as a separate property, 
then putting argv[0] there would be fine. However, for something of type 
FileSpec, I think it's better to have nothing rather than something that is 
definitely _not_ a file.

> the Arg0 fallback is done inside the client when the exe path is empty
agreed, and this doesn't need to be android-specific

> a special additional handling would be required for cases when lldb is 
> running on Android. With the approach of this diff, that case is covered.
I am not sure what you mean by that. Can you elaborate?

> the current function, in the case of android, returns a possible empty exe 
> path. For anything not android, empty exe paths are not allowed
yes, and I think we should, like for the case of environment, just permit a 
ProcessInstanceInfo result with no executable path, regardless of the OS.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D68289/new/

https://reviews.llvm.org/D68289



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to