[llvm] big archive recognition by the llvm-symbolizer (PR #150401)

via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 20 23:07:44 PDT 2025


================
@@ -616,27 +649,27 @@ Expected<ObjectFile *> LLVMSymbolizer::getOrCreateObjectFromArchive(
         RequestedTriple.setArch(Triple::getArchTypeForLLVMName(ArchName));
         if (ObjArch != RequestedTriple.getArch())
           continue;
+
         ArchiveCacheKey CacheKey{ArchivePath.str(), MemberName.str(),
                                  ArchName.str()};
-        auto I = ObjectForArchivePathAndArch.find(CacheKey);
-        if (I != ObjectForArchivePathAndArch.end())
-          return I->second.get();
-
-        auto CachedObj = std::unique_ptr<ObjectFile>(Obj);
-        auto NewEntry =
-            ObjectForArchivePathAndArch.emplace(CacheKey, std::move(CachedObj));
+        Expected<ObjectFile *> Res = findOrCacheObject(
+            CacheKey,
+            [O = std::unique_ptr<ObjectFile>(
+                 Obj)]() mutable -> Expected<std::unique_ptr<ObjectFile>> {
+              return std::move(O);
+            },
+            ArchivePath.str());
         Binary.release();
-        BinaryForPath.find(ArchivePath.str())
-            ->second.pushEvictor([this, Iter = NewEntry.first]() {
-              ObjectForArchivePathAndArch.erase(Iter);
-            });
-        return NewEntry.first->second.get();
+        return Res;
       }
     }
   }
   if (Err)
     return std::move(Err);
-  return errorCodeToError(object_error::arch_not_found);
+  return createStringError(std::errc::invalid_argument,
+                           "No matching member '%s' with arch '%s' in '%s'",
----------------
midhuncodes7 wrote:

addressed

https://github.com/llvm/llvm-project/pull/150401


More information about the llvm-commits mailing list