diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-07-17 06:45:36 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-07-17 06:45:36 +0000 |
commit | b119b4606502ab6bc080b0e0520a71b77384afb3 (patch) | |
tree | 84b73b9157138e0556a8b192e0dba512da2b8a42 /llvm/tools | |
parent | 39eb51e89a519c77d0a50f1d7fd94d4cea3896f6 (diff) | |
download | bcm5719-llvm-b119b4606502ab6bc080b0e0520a71b77384afb3.tar.gz bcm5719-llvm-b119b4606502ab6bc080b0e0520a71b77384afb3.zip |
llvm-symbolizer: be more careful with colons in file names
llvm-svn: 186493
Diffstat (limited to 'llvm/tools')
-rw-r--r-- | llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp b/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp index 1945d689dee..4f6e0cf6dc7 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); |