https://github.com/Michael137 updated 
https://github.com/llvm/llvm-project/pull/182002

>From 5ed8496176f020d9014bdab9075e9e3de7af823c Mon Sep 17 00:00:00 2001
From: Michael Buch <[email protected]>
Date: Wed, 18 Feb 2026 11:59:17 +0000
Subject: [PATCH 1/2] [lldb][PlatformDarwin][NFCI] Factor out dSYM script
 auto-loading into helper function

Depends on:
* https://github.com/llvm/llvm-project/pull/182001

(only second commit is relevant for this review)

This patch factors out the logic to load dSYM scripting resources into a
helper function. In the process we eliminate some redundant copying of
`FileSpec` and pass it to the helper by `const-ref` instead
(specifically the `symfile_spec`).
---
 .../Platform/MacOSX/PlatformDarwin.cpp        | 190 +++++++++---------
 1 file changed, 99 insertions(+), 91 deletions(-)

diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp 
b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index ae0f6cabe90f8..1991777a6cb29 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -199,6 +199,99 @@ PlatformDarwin::PutFile(const lldb_private::FileSpec 
&source,
   return PlatformPOSIX::PutFile(source, destination, uid, gid);
 }
 
+static FileSpecList LoadExecutableScriptingResourceFromDSYM(
+    Stream &feedback_stream, FileSpec module_spec, const Target &target,
+    const FileSpec &symfile_spec, ) {
+  FileSpecList file_list;
+  while (module_spec.GetFilename()) {
+    std::string module_basename(module_spec.GetFilename().GetCString());
+    std::string original_module_basename(module_basename);
+
+    bool was_keyword = false;
+
+    // FIXME: for Python, we cannot allow certain characters in
+    // module
+    // filenames we import. Theoretically, different scripting
+    // languages may have different sets of forbidden tokens in
+    // filenames, and that should be dealt with by each
+    // ScriptInterpreter. For now, we just replace dots with
+    // underscores, but if we ever support anything other than
+    // Python we will need to rework this
+    llvm::replace(module_basename, '.', '_');
+    llvm::replace(module_basename, ' ', '_');
+    llvm::replace(module_basename, '-', '_');
+    ScriptInterpreter *script_interpreter =
+        target.GetDebugger().GetScriptInterpreter();
+    if (script_interpreter &&
+        script_interpreter->IsReservedWord(module_basename.c_str())) {
+      module_basename.insert(module_basename.begin(), '_');
+      was_keyword = true;
+    }
+
+    StreamString path_string;
+    StreamString original_path_string;
+    // for OSX we are going to be in
+    // .dSYM/Contents/Resources/DWARF/<basename> let us go to
+    // .dSYM/Contents/Resources/Python/<basename>.py and see if the
+    // file exists
+    path_string.Printf("%s/../Python/%s.py",
+                       symfile_spec.GetDirectory().GetCString(),
+                       module_basename.c_str());
+    original_path_string.Printf("%s/../Python/%s.py",
+                                symfile_spec.GetDirectory().GetCString(),
+                                original_module_basename.c_str());
+    FileSpec script_fspec(path_string.GetString());
+    FileSystem::Instance().Resolve(script_fspec);
+    FileSpec orig_script_fspec(original_path_string.GetString());
+    FileSystem::Instance().Resolve(orig_script_fspec);
+
+    // if we did some replacements of reserved characters, and a
+    // file with the untampered name exists, then warn the user
+    // that the file as-is shall not be loaded
+    if (module_basename != original_module_basename &&
+        FileSystem::Instance().Exists(orig_script_fspec)) {
+      const char *reason_for_complaint = was_keyword
+                                             ? "conflicts with a keyword"
+                                             : "contains reserved characters";
+      if (FileSystem::Instance().Exists(script_fspec))
+        feedback_stream.Printf(
+            "warning: the symbol file '%s' contains a debug "
+            "script. However, its name"
+            " '%s' %s and as such cannot be loaded. LLDB will"
+            " load '%s' instead. Consider removing the file with "
+            "the malformed name to"
+            " eliminate this warning.\n",
+            symfile_spec.GetPath().c_str(), original_path_string.GetData(),
+            reason_for_complaint, path_string.GetData());
+      else
+        feedback_stream.Printf(
+            "warning: the symbol file '%s' contains a debug "
+            "script. However, its name"
+            " %s and as such cannot be loaded. If you intend"
+            " to have this script loaded, please rename '%s' to "
+            "'%s' and retry.\n",
+            symfile_spec.GetPath().c_str(), reason_for_complaint,
+            original_path_string.GetData(), path_string.GetData());
+    }
+
+    if (FileSystem::Instance().Exists(script_fspec)) {
+      file_list.Append(script_fspec);
+      break;
+    }
+
+    // If we didn't find the python file, then keep stripping the
+    // extensions and try again
+    ConstString filename_no_extension(
+        module_spec.GetFileNameStrippingExtension());
+    if (module_spec.GetFilename() == filename_no_extension)
+      break;
+
+    module_spec.SetFilename(filename_no_extension);
+  }
+
+  return file_list;
+}
+
 FileSpecList PlatformDarwin::LocateExecutableScriptingResources(
     Target *target, Module &module, Stream &feedback_stream) {
   if (!target)
@@ -215,7 +308,7 @@ FileSpecList 
PlatformDarwin::LocateExecutableScriptingResources(
   // extensions (".exe", ".app", ".dSYM", ".framework") which should be
   // stripped while leaving "this.binary.file" as-is.
 
-  FileSpec module_spec = module.GetFileSpec();
+  const FileSpec &module_spec = module.GetFileSpec();
 
   if (!module_spec)
     return {};
@@ -228,100 +321,15 @@ FileSpecList 
PlatformDarwin::LocateExecutableScriptingResources(
   if (!objfile)
     return {};
 
-  FileSpecList file_list;
-  FileSpec symfile_spec(objfile->GetFileSpec());
+  const FileSpec &symfile_spec = objfile->GetFileSpec();
   if (symfile_spec &&
       llvm::StringRef(symfile_spec.GetPath())
           .contains_insensitive(".dSYM/Contents/Resources/DWARF") &&
-      FileSystem::Instance().Exists(symfile_spec)) {
-    while (module_spec.GetFilename()) {
-      std::string module_basename(module_spec.GetFilename().GetCString());
-      std::string original_module_basename(module_basename);
-
-      bool was_keyword = false;
-
-      // FIXME: for Python, we cannot allow certain characters in
-      // module
-      // filenames we import. Theoretically, different scripting
-      // languages may have different sets of forbidden tokens in
-      // filenames, and that should be dealt with by each
-      // ScriptInterpreter. For now, we just replace dots with
-      // underscores, but if we ever support anything other than
-      // Python we will need to rework this
-      llvm::replace(module_basename, '.', '_');
-      llvm::replace(module_basename, ' ', '_');
-      llvm::replace(module_basename, '-', '_');
-      ScriptInterpreter *script_interpreter =
-          target->GetDebugger().GetScriptInterpreter();
-      if (script_interpreter &&
-          script_interpreter->IsReservedWord(module_basename.c_str())) {
-        module_basename.insert(module_basename.begin(), '_');
-        was_keyword = true;
-      }
-
-      StreamString path_string;
-      StreamString original_path_string;
-      // for OSX we are going to be in
-      // .dSYM/Contents/Resources/DWARF/<basename> let us go to
-      // .dSYM/Contents/Resources/Python/<basename>.py and see if the
-      // file exists
-      path_string.Printf("%s/../Python/%s.py",
-                         symfile_spec.GetDirectory().GetCString(),
-                         module_basename.c_str());
-      original_path_string.Printf("%s/../Python/%s.py",
-                                  symfile_spec.GetDirectory().GetCString(),
-                                  original_module_basename.c_str());
-      FileSpec script_fspec(path_string.GetString());
-      FileSystem::Instance().Resolve(script_fspec);
-      FileSpec orig_script_fspec(original_path_string.GetString());
-      FileSystem::Instance().Resolve(orig_script_fspec);
-
-      // if we did some replacements of reserved characters, and a
-      // file with the untampered name exists, then warn the user
-      // that the file as-is shall not be loaded
-      if (module_basename != original_module_basename &&
-          FileSystem::Instance().Exists(orig_script_fspec)) {
-        const char *reason_for_complaint = was_keyword
-                                               ? "conflicts with a keyword"
-                                               : "contains reserved 
characters";
-        if (FileSystem::Instance().Exists(script_fspec))
-          feedback_stream.Printf(
-              "warning: the symbol file '%s' contains a debug "
-              "script. However, its name"
-              " '%s' %s and as such cannot be loaded. LLDB will"
-              " load '%s' instead. Consider removing the file with "
-              "the malformed name to"
-              " eliminate this warning.\n",
-              symfile_spec.GetPath().c_str(), original_path_string.GetData(),
-              reason_for_complaint, path_string.GetData());
-        else
-          feedback_stream.Printf(
-              "warning: the symbol file '%s' contains a debug "
-              "script. However, its name"
-              " %s and as such cannot be loaded. If you intend"
-              " to have this script loaded, please rename '%s' to "
-              "'%s' and retry.\n",
-              symfile_spec.GetPath().c_str(), reason_for_complaint,
-              original_path_string.GetData(), path_string.GetData());
-      }
-
-      if (FileSystem::Instance().Exists(script_fspec)) {
-        file_list.Append(script_fspec);
-        break;
-      }
+      FileSystem::Instance().Exists(symfile_spec))
+    return LoadExecutableScriptingResourceFromDSYM(feedback_stream, 
module_spec,
+                                                   *target, symfile_spec);
 
-      // If we didn't find the python file, then keep stripping the
-      // extensions and try again
-      ConstString filename_no_extension(
-          module_spec.GetFileNameStrippingExtension());
-      if (module_spec.GetFilename() == filename_no_extension)
-        break;
-
-      module_spec.SetFilename(filename_no_extension);
-    }
-  }
-
-  return file_list;
+  return {};
 }
 
 Status PlatformDarwin::ResolveSymbolFile(Target &target,

>From d454cb6086a4c96cee7cc4e503347f2019986222 Mon Sep 17 00:00:00 2001
From: Michael Buch <[email protected]>
Date: Wed, 18 Feb 2026 13:23:43 +0000
Subject: [PATCH 2/2] fixup! fix build; rework comment

---
 .../Plugins/Platform/MacOSX/PlatformDarwin.cpp   | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp 
b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index 1991777a6cb29..fa74172758f38 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -201,7 +201,7 @@ PlatformDarwin::PutFile(const lldb_private::FileSpec 
&source,
 
 static FileSpecList LoadExecutableScriptingResourceFromDSYM(
     Stream &feedback_stream, FileSpec module_spec, const Target &target,
-    const FileSpec &symfile_spec, ) {
+    const FileSpec &symfile_spec) {
   FileSpecList file_list;
   while (module_spec.GetFilename()) {
     std::string module_basename(module_spec.GetFilename().GetCString());
@@ -209,14 +209,12 @@ static FileSpecList 
LoadExecutableScriptingResourceFromDSYM(
 
     bool was_keyword = false;
 
-    // FIXME: for Python, we cannot allow certain characters in
-    // module
-    // filenames we import. Theoretically, different scripting
-    // languages may have different sets of forbidden tokens in
-    // filenames, and that should be dealt with by each
-    // ScriptInterpreter. For now, we just replace dots with
-    // underscores, but if we ever support anything other than
-    // Python we will need to rework this
+    // FIXME: for Python, don't allow certain characters in imported module
+    // filenames. Theoretically, different scripting languages may have
+    // different sets of forbidden tokens in filenames, and that should
+    // be dealt with by each ScriptInterpreter. For now, just replace dots
+    // with underscores. In order to support anything other than Python
+    // this will need to be reworked.
     llvm::replace(module_basename, '.', '_');
     llvm::replace(module_basename, ' ', '_');
     llvm::replace(module_basename, '-', '_');

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to