[ELF] toString(const InputFile *): synchronize toStringCache

The function may be called currently for diagnostics.

GitOrigin-RevId: e45a5696bb2ae5d12ada5000135e45366f6582b1
diff --git a/ELF/InputFiles.cpp b/ELF/InputFiles.cpp
index 3650065..c0961b4 100644
--- a/ELF/InputFiles.cpp
+++ b/ELF/InputFiles.cpp
@@ -47,14 +47,18 @@
 
 // Returns "<internal>", "foo.a(bar.o)" or "baz.o".
 std::string lld::toString(const InputFile *f) {
+  static std::mutex mu;
   if (!f)
     return "<internal>";
 
-  if (f->toStringCache.empty()) {
-    if (f->archiveName.empty())
-      f->toStringCache = f->getName();
-    else
-      (f->archiveName + "(" + f->getName() + ")").toVector(f->toStringCache);
+  {
+    std::lock_guard<std::mutex> lock(mu);
+    if (f->toStringCache.empty()) {
+      if (f->archiveName.empty())
+        f->toStringCache = f->getName();
+      else
+        (f->archiveName + "(" + f->getName() + ")").toVector(f->toStringCache);
+    }
   }
   return std::string(f->toStringCache);
 }