diff --git a/llvm/test/tools/llvm-symbolizer/symbol-search.test b/llvm/test/tools/llvm-symbolizer/symbol-search.test index 6729c4b01bfef..b785cf1596fad 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 b80f79200ba42..a682a0762c393 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)) {