This revision was automatically updated to reflect the committed changes.
Closed by commit rG58d84eb53425: debugserver: Support ios simulator load
command disambiguation in qProcessInfo (authored by aprantl).
Herald added a project: LLDB.
Changed prior to commit:
https://reviews.llvm.org/D84480?vs=280307&id=280505#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84480/new/
https://reviews.llvm.org/D84480
Files:
lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
lldb/tools/debugserver/source/DNB.cpp
lldb/tools/debugserver/source/MacOSX/MachProcess.h
lldb/tools/debugserver/source/MacOSX/MachProcess.mm
Index: lldb/tools/debugserver/source/MacOSX/MachProcess.mm
===================================================================
--- lldb/tools/debugserver/source/MacOSX/MachProcess.mm
+++ lldb/tools/debugserver/source/MacOSX/MachProcess.mm
@@ -617,7 +617,28 @@
info.major_version = vers_cmd.version >> 16;
info.minor_version = (vers_cmd.version >> 8) & 0xffu;
info.patch_version = vers_cmd.version & 0xffu;
- info.maybe_simulator = true;
+
+ // Disambiguate legacy simulator platforms.
+#if (defined(__x86_64__) || defined(__i386__))
+ // If we are running on Intel macOS, it is safe to assume this is
+ // really a back-deploying simulator binary.
+ switch (info.platform) {
+ case PLATFORM_IOS:
+ info.platform = PLATFORM_IOSSIMULATOR;
+ break;
+ case PLATFORM_TVOS:
+ info.platform = PLATFORM_TVOSSIMULATOR;
+ break;
+ case PLATFORM_WATCHOS:
+ info.platform = PLATFORM_WATCHOSSIMULATOR;
+ break;
+ }
+#else
+ // On an Apple Silicon macOS host, there is no ambiguity. The only
+ // binaries that use legacy load commands are back-deploying
+ // native iOS binaries. All simulator binaries use the newer,
+ // unambiguous LC_BUILD_VERSION load commands.
+#endif
};
switch (cmd) {
case LC_VERSION_MIN_IPHONEOS:
@@ -778,34 +799,6 @@
uuid_copy(inf.uuid, uuidcmd.uuid);
}
if (DeploymentInfo deployment_info = GetDeploymentInfo(lc, load_cmds_p)) {
- // Simulator support. If the platform is ambiguous, use the dyld info.
- if (deployment_info.maybe_simulator) {
- if (deployment_info.maybe_simulator) {
-#if (defined(__x86_64__) || defined(__i386__))
- // If dyld doesn't return a platform, use a heuristic.
- // If we are running on Intel macOS, it is safe to assume
- // this is really a back-deploying simulator binary.
- switch (deployment_info.platform) {
- case PLATFORM_IOS:
- deployment_info.platform = PLATFORM_IOSSIMULATOR;
- break;
- case PLATFORM_TVOS:
- deployment_info.platform = PLATFORM_TVOSSIMULATOR;
- break;
- case PLATFORM_WATCHOS:
- deployment_info.platform = PLATFORM_WATCHOSSIMULATOR;
- break;
- }
-#else
- // On an Apple Silicon macOS host, there is no
- // ambiguity. The only binaries that use legacy load
- // commands are back-deploying native iOS binaries. All
- // simulator binaries use the newer, unambiguous
- // LC_BUILD_VERSION load commands.
- deployment_info.maybe_simulator = false;
-#endif
- }
- }
const char *lc_platform = GetPlatformString(deployment_info.platform);
// macCatalyst support.
//
Index: lldb/tools/debugserver/source/MacOSX/MachProcess.h
===================================================================
--- lldb/tools/debugserver/source/MacOSX/MachProcess.h
+++ lldb/tools/debugserver/source/MacOSX/MachProcess.h
@@ -236,9 +236,6 @@
operator bool() { return platform > 0; }
/// The Mach-O platform type;
unsigned char platform = 0;
- /// Pre-LC_BUILD_VERSION files don't disambiguate between ios and ios
- /// simulator.
- bool maybe_simulator = false;
uint32_t major_version = 0;
uint32_t minor_version = 0;
uint32_t patch_version = 0;
Index: lldb/tools/debugserver/source/DNB.cpp
===================================================================
--- lldb/tools/debugserver/source/DNB.cpp
+++ lldb/tools/debugserver/source/DNB.cpp
@@ -1393,7 +1393,10 @@
uint32_t& patch_version) {
MachProcessSP procSP;
if (GetProcessSP(pid, procSP)) {
- // FIXME: This doesn't correct for older ios simulator and macCatalyst.
+ // FIXME: This doesn't return the correct result when xctest (a
+ // macOS binary) is loaded with the macCatalyst dyld platform
+ // override. The image info corrects for this, but qProcessInfo
+ // will return what is in the binary.
auto info = procSP->GetDeploymentInfo(lc, load_command_address);
major_version = info.major_version;
minor_version = info.minor_version;
Index: lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
===================================================================
--- lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
+++ lldb/test/API/macosx/simulator/TestSimulatorPlatform.py
@@ -27,18 +27,28 @@
"""scan the debugserver packet log"""
logfile = open(log, "r")
dylib_info = None
- response = False
+ process_info_ostype = None
+ expect_dylib_info_response = False
+ expect_process_info_response = False
for line in logfile:
- if response:
+ if expect_dylib_info_response:
while line[0] != '$':
line = line[1:]
line = line[1:]
# Unescape '}'.
dylib_info = json.loads(line.replace('}]','}')[:-4])
- response = False
+ expect_dylib_info_response = False
if 'send packet: $jGetLoadedDynamicLibrariesInfos:{' in line:
- response = True
-
+ expect_dylib_info_response = True
+ if expect_process_info_response:
+ for pair in line.split(';'):
+ keyval = pair.split(':')
+ if len(keyval) == 2 and keyval[0] == 'ostype':
+ process_info_ostype = keyval[1]
+ if 'send packet: $qProcessInfo#' in line:
+ expect_process_info_response = True
+
+ self.assertEquals(process_info_ostype, expected_platform)
self.assertTrue(dylib_info)
aout_info = None
for image in dylib_info['images']:
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits