[Lldb-commits] [PATCH] D115001: Simplify logic to identify dyld_sim in Simulator debugging on macos

Jason Molenda via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Dec 2 14:45:21 PST 2021


jasonmolenda created this revision.
jasonmolenda added a reviewer: jingham.
jasonmolenda added a project: LLDB.
Herald added a subscriber: kristof.beyls.
jasonmolenda requested review of this revision.

The DynamicLoader plugin for macOS needs to identify which binary is the dynamic loader (dyld, aka ld.so) so it can set a breakpoint to be notified about newly added binaries.  When debugging a simulator process (iOS process running on a mac, etc), there is both a "dyld" and a "dyld_sim" binary in the process, which both have the same filetype of dynamic loader, but we need to ignore dyld_sim.

The DynamicLoader previously was implementing this by checking if the inferior system is Intel, and if so, if the possibly-dyld binary was actually an iOS/watchOS/tvOS/etc binary.  If so, then this is dyld_sim, and we would skip it.

This has the obvious shortcoming on an Apple Silicon system; now we've got an arm64 system running a possibly-dyld with OS type iOS.  The inferior system may be iOS.

I took advantage of the fact that we track the simulator in the triple as the Environment.  If the environment is simulator, then we only register the possibly-dyld if its OS is macOS.

I also removed an old bit of code to handle old (before 2016) debugserver responses.  This code block is only relevant on macOS native systems, so we don't need to worry about debugging an old iOS etc device that might be older than this, running an old debugserver.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D115001

Files:
  lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp


Index: lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
===================================================================
--- lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
+++ lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp
@@ -540,35 +540,18 @@
   const size_t image_infos_size = image_infos.size();
   for (size_t i = 0; i < image_infos_size; i++) {
     if (image_infos[i].header.filetype == llvm::MachO::MH_DYLINKER) {
-      // In a "simulator" process (an x86 process that is 
-      // ios/tvos/watchos/bridgeos) we will have two dyld modules -- 
+      // In a "simulator" process we will have two dyld modules -- 
       // a "dyld" that we want to keep track of, and a "dyld_sim" which 
-      // we don't need to keep track of here. If the target is an x86 
-      // system and the OS of the dyld binary is ios/tvos/watchos/bridgeos, 
-      // then we are looking at dyld_sym.
-
-      // debugserver has only recently (late 2016) started sending up the os
-      // type for each binary it sees -- so if we don't have an os type, use a
-      // filename check as our next best guess.
-      if (image_infos[i].os_type == llvm::Triple::OSType::UnknownOS) {
-        if (image_infos[i].file_spec.GetFilename() != g_dyld_sim_filename) {
-          dyld_idx = i;
-        }
-      } else if (target_arch.GetTriple().getArch() == llvm::Triple::x86 ||
-                 target_arch.GetTriple().getArch() == llvm::Triple::x86_64) {
-        if (image_infos[i].os_type != llvm::Triple::OSType::IOS &&
-            image_infos[i].os_type != llvm::Triple::TvOS &&
-            image_infos[i].os_type != llvm::Triple::WatchOS) {
-            // NEED_BRIDGEOS_TRIPLE image_infos[i].os_type != llvm::Triple::BridgeOS) {
-          dyld_idx = i;
-        }
+      // we don't need to keep track of here.  dyld_sim will have a non-macosx
+      // OS.
+      if (target_arch.GetTriple().getEnvironment() == llvm::Triple::Simulator &&
+          image_infos[i].os_type != llvm::Triple::OSType::MacOSX) {
+        continue;
       }
-      else {
-        // catch-all for any other environment -- trust that dyld is actually
-        // dyld
-        dyld_idx = i;
-      }
-    } else if (image_infos[i].header.filetype == llvm::MachO::MH_EXECUTE) {
+
+      dyld_idx = i;
+    } 
+    if (image_infos[i].header.filetype == llvm::MachO::MH_EXECUTE) {
       exe_idx = i;
     }
   }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115001.391467.patch
Type: text/x-patch
Size: 2452 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20211202/2574c758/attachment-0001.bin>


More information about the lldb-commits mailing list