summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2013-07-17 06:45:36 +0000
committerAlexey Samsonov <samsonov@google.com>2013-07-17 06:45:36 +0000
commitb119b4606502ab6bc080b0e0520a71b77384afb3 (patch)
tree84b73b9157138e0556a8b192e0dba512da2b8a42 /llvm/tools
parent39eb51e89a519c77d0a50f1d7fd94d4cea3896f6 (diff)
downloadbcm5719-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.cpp15
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);
OpenPOWER on IntegriCloud