aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--llvm/test/tools/llvm-symbolizer/symbol-search.test3
-rw-r--r--llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp9
2 files changed, 8 insertions, 4 deletions
diff --git a/llvm/test/tools/llvm-symbolizer/symbol-search.test b/llvm/test/tools/llvm-symbolizer/symbol-search.test
index 6729c4b..b785cf1 100644
--- a/llvm/test/tools/llvm-symbolizer/symbol-search.test
+++ b/llvm/test/tools/llvm-symbolizer/symbol-search.test
@@ -66,7 +66,8 @@ RUN: llvm-addr2line --obj=%p/Inputs/symbols.so func_01+0A | FileCheck --check-pr
# If '+' is not preceded by a symbol, it is part of a symbol name, not an offset separator.
RUN: llvm-symbolizer --obj=%p/Inputs/symbols.so +0x1138 | FileCheck --check-prefix=NONEXISTENT %s
-RUN: llvm-addr2line --obj=%p/Inputs/symbols.so +0x1138 | FileCheck --check-prefix=NONEXISTENT %s
+# in addr2line address starting with a `+` sign is a valid address
+RUN: llvm-addr2line --obj=%p/Inputs/symbols.so +0x1138 | FileCheck --check-prefix=CODE-CMD %s
# Show that C++ mangled names may be specified.
RUN: llvm-addr2line --obj=%p/Inputs/symbols.so _ZL14static_func_01i | FileCheck --check-prefix=MULTI-CXX %s
diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
index b80f792..a682a07 100644
--- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
+++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
@@ -238,9 +238,12 @@ static Error parseCommand(StringRef BinaryName, bool IsAddr2Line,
bool StartsWithDigit = std::isdigit(AddrSpec.front());
// GNU addr2line assumes the address is hexadecimal and allows a redundant
- // "0x" or "0X" prefix; do the same for compatibility.
- if (IsAddr2Line)
- AddrSpec.consume_front("0x") || AddrSpec.consume_front("0X");
+ // "0x" or "0X" prefix or with an optional `+` sign; do the same for
+ // compatibility.
+ if (IsAddr2Line) {
+ AddrSpec.consume_front_insensitive("0x") ||
+ AddrSpec.consume_front_insensitive("+0x");
+ }
// If address specification is a number, treat it as a module offset.
if (!AddrSpec.getAsInteger(IsAddr2Line ? 16 : 0, Offset)) {