[Lldb-commits] [lldb] [lldb] Fix FindProcessImpl() for iOS simulators (PR #139174)
via lldb-commits
lldb-commits at lists.llvm.org
Thu May 8 16:48:03 PDT 2025
https://github.com/royitaqi created https://github.com/llvm/llvm-project/pull/139174
# Benefit
This patch fixes:
1. After `platform select ios-simulator`, `platform process list` will now print processes which are running in the iOS simulator. Previously, no process will be listed.
2. After `platform select ios-simulator`, `platform attach --name <name>` will succeed. Previously, it will error out saying no process is found.
# Changes
1. During the process listing, add `aarch64` to the list of CPU types for which iOS simulators are checked for.
2. Fix a bug in the code which checks for simulators, where for a process running on simulator, the original code will find the desired environment variable and set the OS to iOS, but then the immediate next environment variable will set it back to macOS.
3. For processes running on simulator, set the triple's `Environment` to `Simulator`, so that such processes can pass the filtering [in this line](https://fburl.com/8nivnrjx). The original code leave it as the default `UnknownEnvironment`.
# Manual test
**With this patch:**
```
royshi-mac-home ~/public_llvm/build % bin/lldb
(lldb) platform select ios-simulator
(lldb) platform process list
240 matching processes were found on "ios-simulator"
PID PARENT USER TRIPLE NAME
====== ====== ========== ============================== ============================
40511 28844 royshi arm64-apple-ios-simulator FocusPlayground // my toy iOS app running on simulator
... // omit
28844 1 royshi arm64-apple-ios-simulator launchd_sim
(lldb) process attach --name FocusPlayground
Process 40511 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x0000000104e3cb70 libsystem_kernel.dylib`mach_msg2_trap + 8
libsystem_kernel.dylib`mach_msg2_trap:
-> 0x104e3cb70 <+8>: ret
... // omit
```
**Without this patch:**
```
royshi-mac-home ~/public_llvm/build % bin/lldb
(lldb) platform select ios-simulator
(lldb) platform process list
error: no processes were found on the "ios-simulator" platform
(lldb) process attach --name FocusPlayground
error: attach failed: could not find a process named FocusPlayground
```
# Unittest
I did a couple of code searches ([1](https://github.com/search?q=repo%3Allvm%2Fllvm-project+FindProcessesImpl+test&type=code), [2](https://github.com/search?q=repo%3Allvm%2Fllvm-project+GetMacOSXProcessArgs+test&type=code)) and didn't seem to find any existing tests.
Any suggestion about how to test this?
>From d98210b81f7b49f5384e968b1a18e00e432aaf2c Mon Sep 17 00:00:00 2001
From: Roy Shi <royshi at meta.com>
Date: Thu, 8 May 2025 16:21:53 -0700
Subject: [PATCH] Fix macOS FindProcessImpl()
---
lldb/source/Host/macosx/objcxx/Host.mm | 25 +++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/lldb/source/Host/macosx/objcxx/Host.mm b/lldb/source/Host/macosx/objcxx/Host.mm
index e187bf98188ae..e8a1c597eea53 100644
--- a/lldb/source/Host/macosx/objcxx/Host.mm
+++ b/lldb/source/Host/macosx/objcxx/Host.mm
@@ -595,7 +595,9 @@ DataExtractor data(arg_data.GetBytes(), arg_data_size,
const llvm::Triple::ArchType triple_arch = triple.getArch();
const bool check_for_ios_simulator =
(triple_arch == llvm::Triple::x86 ||
- triple_arch == llvm::Triple::x86_64);
+ triple_arch == llvm::Triple::x86_64 ||
+ triple_arch == llvm::Triple::aarch64);
+
const char *cstr = data.GetCStr(&offset);
if (cstr) {
process_info.GetExecutableFile().SetFile(cstr, FileSpec::Style::native);
@@ -621,22 +623,25 @@ DataExtractor data(arg_data.GetBytes(), arg_data_size,
}
Environment &proc_env = process_info.GetEnvironment();
+ bool is_simulator = false;
while ((cstr = data.GetCStr(&offset))) {
if (cstr[0] == '\0')
break;
- if (check_for_ios_simulator) {
- if (strncmp(cstr, "SIMULATOR_UDID=", strlen("SIMULATOR_UDID=")) ==
- 0)
- process_info.GetArchitecture().GetTriple().setOS(
- llvm::Triple::IOS);
- else
- process_info.GetArchitecture().GetTriple().setOS(
- llvm::Triple::MacOSX);
- }
+ if (check_for_ios_simulator &&
+ strncmp(cstr, "SIMULATOR_UDID=", strlen("SIMULATOR_UDID=")) ==
+ 0)
+ is_simulator = true;
proc_env.insert(cstr);
}
+ llvm::Triple &triple = process_info.GetArchitecture().GetTriple();
+ if (is_simulator) {
+ triple.setOS(llvm::Triple::IOS);
+ triple.setEnvironment(llvm::Triple::Simulator);
+ } else {
+ triple.setOS(llvm::Triple::MacOSX);
+ }
return true;
}
}
More information about the lldb-commits
mailing list