[llvm] 71ba852 - [symbolizer] Address starting with a plus sign is valid. (#135857)

via llvm-commits llvm-commits at lists.llvm.org
Fri May 30 06:15:54 PDT 2025


Author: Ebuka Ezike
Date: 2025-05-30T14:15:50+01:00
New Revision: 71ba85247499294f73c91ca39055cc6d40e8bc96

URL: https://github.com/llvm/llvm-project/commit/71ba85247499294f73c91ca39055cc6d40e8bc96
DIFF: https://github.com/llvm/llvm-project/commit/71ba85247499294f73c91ca39055cc6d40e8bc96.diff

LOG: [symbolizer] Address starting with a plus sign is valid. (#135857)

this is also the same behaviour in `gnu addr2line`.

The change only applies if the binary is llvm-addr2line
---------

Signed-off-by: Ebuka Ezike <yerimyah1 at gmail.com>

Added: 
    

Modified: 
    llvm/test/tools/llvm-symbolizer/symbol-search.test
    llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp

Removed: 
    


################################################################################
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)) {


        


More information about the llvm-commits mailing list