Skip to content

Commit b0f0705

Browse files
committed
added tests
1 parent 4da5ebd commit b0f0705

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

llvm/lib/DebugInfo/Symbolize/Symbolize.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -676,13 +676,12 @@ LLVMSymbolizer::getOrCreateObject(const std::string &Path,
676676
const std::string &ArchName) {
677677
// First check for archive(member) format - more efficient to check closing
678678
// paren first.
679-
size_t CloseParen = Path.rfind(')');
680-
if (CloseParen != std::string::npos && CloseParen == Path.length() - 1) {
681-
size_t OpenParen = Path.rfind('(', CloseParen);
679+
if (!Path.empty() && Path.back() == ')') {
680+
size_t OpenParen = Path.rfind('(', Path.size() - 1);
682681
if (OpenParen != std::string::npos) {
683682
StringRef ArchivePath = StringRef(Path).substr(0, OpenParen);
684683
StringRef MemberName =
685-
StringRef(Path).substr(OpenParen + 1, CloseParen - OpenParen - 1);
684+
StringRef(Path).substr(OpenParen + 1, Path.size() - OpenParen - 2);
686685
return getOrCreateObjectFromArchive(ArchivePath, MemberName, ArchName);
687686
}
688687
}

llvm/test/DebugInfo/symbolize-big-archive-elf.test

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
// RUN: llvm-symbolizer --obj="%t.a(%{t:stem}.tmp-1.o):ppc64le" 0x0 | FileCheck %s --check-prefix=CHECK-1
1414
// RUN: llvm-symbolizer --default-arch=ppc64le --obj="%t.a(%{t:stem}.tmp-2.o)" 0x0 | FileCheck %s --check-prefix=CHECK-2
1515
// RUN: llvm-symbolizer --obj="%t.a(%{t:stem}.tmp-2.o):ppc64le" 0x0 | FileCheck %s --check-prefix=CHECK-2
16+
// RUN: llvm-symbolizer --default-arch=ppc64le --obj="%t.a(%t-1.o)" 0x0 | FileCheck %s --check-prefix=CHECK-1
17+
// RUN: llvm-symbolizer --default-arch=ppc64le --obj="%t.a(%t-2.o)" 0x0 | FileCheck %s --check-prefix=CHECK-2
1618
// CHECK-1: foo1
1719
// CHECK-2: foo2
1820

@@ -21,3 +23,9 @@
2123
// CHECK-ERROR: error: {{.*}}no matching member{{.*}}
2224
// RUN: not llvm-symbolizer --obj="%t-1.o(%{t:stem}.tmp-1.o)" 0x1000 2>&1 | FileCheck %s --check-prefix=CHECK-NOTARCHIVE
2325
// CHECK-NOTARCHIVE: error: '{{.*}}' is not a valid archive
26+
// RUN: not llvm-symbolizer --obj="%t.a()" 0x1000 2>&1 | FileCheck %s --check-prefix=CHECK-EMPTY
27+
// CHECK-EMPTY: {{.*}}no matching member{{.*}}
28+
// RUN: not llvm-symbolizer --obj="%t.a(%t.o" 0x1000 2>&1 | FileCheck %s --check-prefix=CHECK-INCORRECT-FORMAT-1
29+
// CHECK-INCORRECT-FORMAT-1: {{.*}}No such file or directory{{.*}}
30+
// RUN: not llvm-symbolizer --obj="%t.a%t.o)" 0x1000 2>&1 | FileCheck %s --check-prefix=CHECK-INCORRECT-FORMAT-2
31+
// CHECK-INCORRECT-FORMAT-2: {{.*}}Not a directory{{.*}}

llvm/test/DebugInfo/symbolize-big-archive-xcoff.test

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
// RUN: llvm-symbolizer --default-arch=ppc64 --obj="%t.a(%{t:stem}.tmp.o)" 0x0 | FileCheck %s --check-prefix=CHECK-64
2222
// RUN: llvm-symbolizer --obj="%t.a(%{t:stem}.tmp.o):ppc" 0x0 | FileCheck %s --check-prefix=CHECK-32
2323
// RUN: llvm-symbolizer --obj="%t.a(%{t:stem}.tmp.o):ppc64" 0x0 | FileCheck %s --check-prefix=CHECK-64
24+
// RUN: llvm-symbolizer --default-arch=ppc --obj="%t.a(%t.o)" 0x0 | FileCheck %s --check-prefix=CHECK-32
25+
// RUN: llvm-symbolizer --default-arch=ppc64 --obj="%t.a(%t.o)" 0x0 | FileCheck %s --check-prefix=CHECK-64
2426
// CHECK-32: foo
2527
// CHECK-64: foo
2628

@@ -29,3 +31,10 @@
2931
// CHECK-ERROR: error: {{.*}}no matching member{{.*}}
3032
// RUN: not llvm-symbolizer --obj="%t.o(%{t:stem}.tmp.o)" 0x1000 2>&1 | FileCheck %s --check-prefix=CHECK-NOTARCHIVE
3133
// CHECK-NOTARCHIVE: error: '{{.*}}' is not a valid archive
34+
// RUN: not llvm-symbolizer --obj="%t.a()" 0x1000 2>&1 | FileCheck %s --check-prefix=CHECK-EMPTY
35+
// CHECK-EMPTY: {{.*}}no matching member{{.*}}
36+
// RUN: not llvm-symbolizer --obj="%t.a(%t.o" 0x1000 2>&1 | FileCheck %s --check-prefix=CHECK-INCORRECT-FORMAT-1
37+
// CHECK-INCORRECT-FORMAT-1: {{.*}}No such file or directory{{.*}}
38+
// RUN: not llvm-symbolizer --obj="%t.a%t.o)" 0x1000 2>&1 | FileCheck %s --check-prefix=CHECK-INCORRECT-FORMAT-2
39+
// CHECK-INCORRECT-FORMAT-2: {{.*}}Not a directory{{.*}}
40+

0 commit comments

Comments
 (0)