llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: None (jimingham)

<details>
<summary>Changes</summary>

There's a bad interaction between the macOS 14 dyld and the "dyld_sim" shim 
that comes from older (iOS 15) simulator downloads  that results in dyld 
reporting some modules twice in the return from the dyld callback to list 
modules. The records were identical, but lldb wasn't happy with seeing the 
duplicates...

Since it's not possible to load two different modules at the same address, this 
change just picks the first instance of any entries that have the same load 
address.

There really isn't a good way to test this patch.

---
Full diff: https://github.com/llvm/llvm-project/pull/78004.diff


1 Files Affected:

- (modified) lldb/tools/debugserver/source/MacOSX/MachProcess.mm (+8) 


``````````diff
diff --git a/lldb/tools/debugserver/source/MacOSX/MachProcess.mm 
b/lldb/tools/debugserver/source/MacOSX/MachProcess.mm
index 29fabd087ecbe1..93b976127ba45c 100644
--- a/lldb/tools/debugserver/source/MacOSX/MachProcess.mm
+++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.mm
@@ -33,6 +33,7 @@
 #include <algorithm>
 #include <chrono>
 #include <map>
+#include <unordered_set>
 
 #include <TargetConditionals.h>
 #import <Foundation/Foundation.h>
@@ -1053,9 +1054,16 @@ static bool mach_header_validity_test(uint32_t magic, 
uint32_t cputype) {
     dyld_process_info info =
         m_dyld_process_info_create(m_task.TaskPort(), 0, &kern_ret);
     if (info) {
+      // There's a bug in the interaction between dyld and older dyld_sim's
+      // (e.g. from the iOS 15 simulator) that causes dyld to report the same
+      // binary twice.  We use this set to eliminate the duplicates.
+      __block std::unordered_set<uint64_t> seen_header_addrs;
       m_dyld_process_info_for_each_image(
           info,
           ^(uint64_t mach_header_addr, const uuid_t uuid, const char *path) {
+            auto res_pair = seen_header_addrs.insert(mach_header_addr);
+            if (!res_pair.second)
+              return;
             struct binary_image_information image;
             image.filename = path;
             uuid_copy(image.macho_info.uuid, uuid);

``````````

</details>


https://github.com/llvm/llvm-project/pull/78004
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to