[Lldb-commits] [lldb] [lldb] Fix FindProcessImpl() for iOS simulators (PR #139174)
via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 18 17:22:30 PDT 2025
https://github.com/royitaqi updated https://github.com/llvm/llvm-project/pull/139174
>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 1/5] 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;
}
}
>From 8377bc3b61fb30c003d1d188d6e8d879baea58ab Mon Sep 17 00:00:00 2001
From: Roy Shi <royshi at meta.com>
Date: Mon, 16 Jun 2025 11:06:47 -0700
Subject: [PATCH 2/5] Add test
---
lldb/test/API/macosx/simulator/TestSimulatorPlatform.py | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py b/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
index 74ba0ee6c83bb..8406ee45479fd 100644
--- a/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
+++ b/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
@@ -39,7 +39,7 @@ def check_debugserver(self, log, expected_platform, expected_version):
if expected_version:
self.assertEqual(aout_info["min_version_os_sdk"], expected_version)
- def run_with(self, arch, os, vers, env, expected_load_command):
+ def run_with(self, arch, os, vers, env, expected_load_command, expected_platform=None):
env_list = [env] if env else []
triple = "-".join([arch, "apple", os + vers] + env_list)
sdk = lldbutil.get_xcode_sdk(os, env)
@@ -75,6 +75,11 @@ def run_with(self, arch, os, vers, env, expected_load_command):
self, "break here", lldb.SBFileSpec("hello.c")
)
triple_re = "-".join([arch, "apple", os + vers + ".*"] + env_list)
+ if expected_platform is not None:
+ # The current platform should be expected
+ self.expect("platform status", patterns=[r"Platform: " + expected_platform])
+ # Should be able to list processes on the current platform
+ self.expect("platform process list", patterns=[r"\d+ matching processes were found on \"%s\"" % expected_platform])
self.expect("image list -b -t", patterns=[r"a\.out " + triple_re])
self.check_debugserver(log, os + env, vers)
@@ -90,6 +95,7 @@ def test_ios(self):
vers="",
env="simulator",
expected_load_command="LC_BUILD_VERSION",
+ expected_platform="ios-simulator",
)
@skipIfAsan
>From 2c31b44d01a7a8bc0fece27fed8162c599aa8387 Mon Sep 17 00:00:00 2001
From: Roy Shi <royshi at meta.com>
Date: Mon, 16 Jun 2025 15:02:56 -0700
Subject: [PATCH 3/5] Fix format
---
.../API/macosx/simulator/TestSimulatorPlatform.py | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py b/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
index 8406ee45479fd..44a5a942ab513 100644
--- a/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
+++ b/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
@@ -39,7 +39,9 @@ def check_debugserver(self, log, expected_platform, expected_version):
if expected_version:
self.assertEqual(aout_info["min_version_os_sdk"], expected_version)
- def run_with(self, arch, os, vers, env, expected_load_command, expected_platform=None):
+ def run_with(
+ self, arch, os, vers, env, expected_load_command, expected_platform=None
+ ):
env_list = [env] if env else []
triple = "-".join([arch, "apple", os + vers] + env_list)
sdk = lldbutil.get_xcode_sdk(os, env)
@@ -79,7 +81,12 @@ def run_with(self, arch, os, vers, env, expected_load_command, expected_platform
# The current platform should be expected
self.expect("platform status", patterns=[r"Platform: " + expected_platform])
# Should be able to list processes on the current platform
- self.expect("platform process list", patterns=[r"\d+ matching processes were found on \"%s\"" % expected_platform])
+ self.expect(
+ "platform process list",
+ patterns=[
+ r"\d+ matching processes were found on \"%s\"" % expected_platform
+ ],
+ )
self.expect("image list -b -t", patterns=[r"a\.out " + triple_re])
self.check_debugserver(log, os + env, vers)
>From 3d6715699007bb22bda26cf196bee91f24ef9e91 Mon Sep 17 00:00:00 2001
From: Roy Shi <royshi at meta.com>
Date: Tue, 17 Jun 2025 07:39:17 -0700
Subject: [PATCH 4/5] Minor updates to code and comments
---
lldb/source/Host/macosx/objcxx/Host.mm | 4 ++--
.../API/macosx/simulator/TestSimulatorPlatform.py | 11 ++++++++---
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/lldb/source/Host/macosx/objcxx/Host.mm b/lldb/source/Host/macosx/objcxx/Host.mm
index e8a1c597eea53..66e7741fc53e7 100644
--- a/lldb/source/Host/macosx/objcxx/Host.mm
+++ b/lldb/source/Host/macosx/objcxx/Host.mm
@@ -746,8 +746,8 @@ static bool GetMacOSXProcessUserAndGroup(ProcessInstanceInfo &process_info) {
!match_info.ProcessIDsMatch(process_info))
continue;
- // Get CPU type first so we can know to look for iOS simulator is we have
- // x86 or x86_64
+ // Get CPU type first so we can know to look for iOS simulator if we have
+ // a compatible type.
if (GetMacOSXProcessCPUType(process_info)) {
if (GetMacOSXProcessArgs(&match_info, process_info)) {
if (match_info.Matches(process_info))
diff --git a/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py b/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
index 44a5a942ab513..0d09bfee9b961 100644
--- a/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
+++ b/lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
@@ -77,17 +77,22 @@ def run_with(
self, "break here", lldb.SBFileSpec("hello.c")
)
triple_re = "-".join([arch, "apple", os + vers + ".*"] + env_list)
+ self.expect("image list -b -t", patterns=[r"a\.out " + triple_re])
if expected_platform is not None:
- # The current platform should be expected
+ # Verify the platform name.
self.expect("platform status", patterns=[r"Platform: " + expected_platform])
- # Should be able to list processes on the current platform
+ # Verify that processes on the platform can be listed.
+ #
+ # Note: The `Host::FindProcessesImpl()` of some of the Hosts filters out processes which are being debugged.
+ # (e.g. code for iOS simulator linked below). So we cannot verify that `a.out` is in the process list
+ # (because its already being debugged by this test).
+ # https://github.com/llvm/llvm-project/blob/b5dbf8210a57b986b9802304745f4c5c108cf37b/lldb/source/Host/macosx/objcxx/Host.mm#L724
self.expect(
"platform process list",
patterns=[
r"\d+ matching processes were found on \"%s\"" % expected_platform
],
)
- self.expect("image list -b -t", patterns=[r"a\.out " + triple_re])
self.check_debugserver(log, os + env, vers)
@skipIfAsan
>From a8fbaca547727a393a8e906a211c69650bfb4099 Mon Sep 17 00:00:00 2001
From: Roy Shi <royshi at meta.com>
Date: Wed, 18 Jun 2025 17:17:39 -0700
Subject: [PATCH 5/5] A small cleanup
---
lldb/source/Host/macosx/objcxx/Host.mm | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/lldb/source/Host/macosx/objcxx/Host.mm b/lldb/source/Host/macosx/objcxx/Host.mm
index 66e7741fc53e7..633495e835450 100644
--- a/lldb/source/Host/macosx/objcxx/Host.mm
+++ b/lldb/source/Host/macosx/objcxx/Host.mm
@@ -624,16 +624,13 @@ 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;
-
+ for (llvm::StringRef env_var;
+ !(env_var = data.GetCStr(&offset)).empty();) {
if (check_for_ios_simulator &&
- strncmp(cstr, "SIMULATOR_UDID=", strlen("SIMULATOR_UDID=")) ==
- 0)
+ env_var.starts_with("SIMULATOR_UDID="))
is_simulator = true;
- proc_env.insert(cstr);
+ proc_env.insert(env_var);
}
llvm::Triple &triple = process_info.GetArchitecture().GetTriple();
if (is_simulator) {
More information about the lldb-commits
mailing list