llvm-symbolizer: be more careful with colons in file names
authorAlexey Samsonov <samsonov@google.com>
Wed, 17 Jul 2013 06:45:36 +0000 (06:45 +0000)
committerAlexey Samsonov <samsonov@google.com>
Wed, 17 Jul 2013 06:45:36 +0000 (06:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186493 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-symbolizer/LLVMSymbolize.cpp

index 1945d689dee4d8d7365093d8850d0c5f15c2e421..4f6e0cf6dc7925f25805dfef1f8bb2c7d4436af0 100644 (file)
@@ -278,15 +278,14 @@ LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName) {
     return I->second;
   std::string BinaryName = ModuleName;
   std::string ArchName = Opts.DefaultArch;
-  size_t ColonPos = ModuleName.find(':');
-#if defined(_WIN32)
-  // Recognize a drive letter on win32.
-  if (ColonPos == 1 && isalpha(ModuleName[0]))
-    ColonPos = ModuleName.find(':', 2);
-#endif
+  size_t ColonPos = ModuleName.find_last_of(':');
+  // Verify that substring after colon form a valid arch name.
   if (ColonPos != std::string::npos) {
-    BinaryName = ModuleName.substr(0, ColonPos);
-    ArchName = ModuleName.substr(ColonPos + 1);
+    std::string ArchStr = ModuleName.substr(ColonPos + 1);
+    if (Triple(ArchStr).getArch() != Triple::ArchType::UnknownArch) {
+      BinaryName = ModuleName.substr(0, ColonPos);
+      ArchName = ArchStr;
+    }
   }
   BinaryPair Binaries = getOrCreateBinary(BinaryName);
   ObjectFile *Obj = getObjectFileFromBinary(Binaries.first, ArchName);