From b119b4606502ab6bc080b0e0520a71b77384afb3 Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Wed, 17 Jul 2013 06:45:36 +0000 Subject: [PATCH] llvm-symbolizer: be more careful with colons in file names llvm-svn: 186493 --- llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp b/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp index 1945d689dee4..4f6e0cf6dc79 100644 --- a/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp +++ b/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp @@ -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);