llvm-symbolizer: correctly parse filenames given in quotes
authorAlexey Samsonov <samsonov@google.com>
Fri, 5 Apr 2013 09:22:24 +0000 (09:22 +0000)
committerAlexey Samsonov <samsonov@google.com>
Fri, 5 Apr 2013 09:22:24 +0000 (09:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178859 91177308-0d34-0410-b5e6-96231b3b80d8

test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 [deleted file]
test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 space [new file with mode: 0755]
test/DebugInfo/dwarfdump-test.test
test/DebugInfo/llvm-symbolizer.test
tools/llvm-symbolizer/llvm-symbolizer.cpp

diff --git a/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 b/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64
deleted file mode 100755 (executable)
index 7330cd8..0000000
Binary files a/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 and /dev/null differ
diff --git a/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 space b/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 space
new file mode 100755 (executable)
index 0000000..7330cd8
Binary files /dev/null and b/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 space differ
index 355445e6495b3cac4011c44f3fda5ec2cc31e3af..058d6a36981a86c54ca11b9826836472c6b8200d 100644 (file)
@@ -8,11 +8,11 @@ RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test2.elf-x86-64 \
 RUN:   --address=0x4004e8 --functions | FileCheck %s -check-prefix MANY_CU_1
 RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test2.elf-x86-64 \
 RUN:   --address=0x4004f4 --functions | FileCheck %s -check-prefix MANY_CU_2
 RUN:   --address=0x4004e8 --functions | FileCheck %s -check-prefix MANY_CU_1
 RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test2.elf-x86-64 \
 RUN:   --address=0x4004f4 --functions | FileCheck %s -check-prefix MANY_CU_2
-RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test3.elf-x86-64 \
+RUN: llvm-dwarfdump "%p/Inputs/dwarfdump-test3.elf-x86-64 space" \
 RUN:   --address=0x640 --functions | FileCheck %s -check-prefix ABS_ORIGIN_1
 RUN:   --address=0x640 --functions | FileCheck %s -check-prefix ABS_ORIGIN_1
-RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test3.elf-x86-64 \
+RUN: llvm-dwarfdump "%p/Inputs/dwarfdump-test3.elf-x86-64 space" \
 RUN:   --address=0x633 --functions | FileCheck %s -check-prefix INCLUDE_TEST_1
 RUN:   --address=0x633 --functions | FileCheck %s -check-prefix INCLUDE_TEST_1
-RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test3.elf-x86-64 \
+RUN: llvm-dwarfdump "%p/Inputs/dwarfdump-test3.elf-x86-64 space" \
 RUN:   --address=0x62d --functions | FileCheck %s -check-prefix INCLUDE_TEST_2
 RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test4.elf-x86-64 \
 RUN:   --address=0x62c --functions \
 RUN:   --address=0x62d --functions | FileCheck %s -check-prefix INCLUDE_TEST_2
 RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test4.elf-x86-64 \
 RUN:   --address=0x62c --functions \
index 7776ec59783108c29e912ca049157fa206fd0d18..842a5e603eb487a59c4c33b61bbdca75ccfcc605 100644 (file)
@@ -1,6 +1,7 @@
 RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x400559" > %t.input
 RUN: echo "%p/Inputs/dwarfdump-test4.elf-x86-64 0x62c" >> %t.input
 RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x710" >> %t.input
 RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x400559" > %t.input
 RUN: echo "%p/Inputs/dwarfdump-test4.elf-x86-64 0x62c" >> %t.input
 RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x710" >> %t.input
+RUN: echo '"%p/Inputs/dwarfdump-test3.elf-x86-64 space" 0x633' >> %t.input
 
 RUN: llvm-symbolizer --functions --inlining --demangle=false < %t.input \
 RUN:    | FileCheck %s
 
 RUN: llvm-symbolizer --functions --inlining --demangle=false < %t.input \
 RUN:    | FileCheck %s
@@ -18,4 +19,7 @@ CHECK-NEXT: dwarfdump-inl-test.h:7
 CHECK-NEXT: inlined_f
 CHECK-NEXT: dwarfdump-inl-test.cc:3
 CHECK-NEXT: main
 CHECK-NEXT: inlined_f
 CHECK-NEXT: dwarfdump-inl-test.cc:3
 CHECK-NEXT: main
-CHECK-NEXT: dwarfdump-inl-test.cc:8
+CHECK-NEXT: dwarfdump-inl-test.cc:
+
+CHECK:       _Z3do1v
+CHECK-NEXT: dwarfdump-test3-decl.h:7
index d039ec691f1ef0642979fadb070d92bf2971296d..0cafffaf7126387c5807bb2132d872ed59fdcc0b 100644 (file)
@@ -70,12 +70,25 @@ static bool parseCommand(bool &IsData, std::string &ModuleName,
     // If no cmd, assume it's CODE.
     IsData = false;
   }
     // If no cmd, assume it's CODE.
     IsData = false;
   }
-  // FIXME: Handle case when filename is given in quotes.
-  if (char *FilePath = strtok(pos, kDelimiters)) {
-    ModuleName = FilePath;
-    if (char *OffsetStr = strtok((char *)0, kDelimiters))
-      ModuleOffsetStr = OffsetStr;
+  // Skip delimiters and parse input filename.
+  pos += strspn(pos, kDelimiters);
+  if (*pos == '"' || *pos == '\'') {
+    char quote = *pos;
+    pos++;
+    char *end = strchr(pos, quote);
+    if (end == 0)
+      return false;
+    ModuleName = std::string(pos, end - pos);
+    pos = end + 1;
+  } else {
+    int name_length = strcspn(pos, kDelimiters);
+    ModuleName = std::string(pos, name_length);
+    pos += name_length;
   }
   }
+  // Skip delimiters and parse module offset.
+  pos += strspn(pos, kDelimiters);
+  int offset_length = strcspn(pos, kDelimiters);
+  ModuleOffsetStr = std::string(pos, offset_length);
   if (StringRef(ModuleOffsetStr).getAsInteger(0, ModuleOffset))
     return false;
   return true;
   if (StringRef(ModuleOffsetStr).getAsInteger(0, ModuleOffset))
     return false;
   return true;