[llvm] 1f53da0 - [llvm-objdump] Default --symbolize-operands for BPF (#184043)

via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 5 00:55:57 PST 2026


Author: Fangrui Song
Date: 2026-03-05T08:55:51Z
New Revision: 1f53da098f7c6a1257b8f02a139c0d26ce99aa7c

URL: https://github.com/llvm/llvm-project/commit/1f53da098f7c6a1257b8f02a139c0d26ce99aa7c
DIFF: https://github.com/llvm/llvm-project/commit/1f53da098f7c6a1257b8f02a139c0d26ce99aa7c.diff

LOG: [llvm-objdump] Default --symbolize-operands for BPF (#184043)

BPF users expect to see basic block labels (e.g. <L0>, <L1>) in
disassembly output

(https://github.com/llvm/llvm-project/pull/95103#issuecomment-3771234810).
Default --symbolize-operands to on for BPF targets when neither
--symbolize-operands nor --no-symbolize-operands is explicitly
specified.

Add --no-symbolize-operands to allow users to opt out.

Added: 
    

Modified: 
    llvm/docs/CommandGuide/llvm-objdump.rst
    llvm/test/CodeGen/BPF/objdump_cond_op.ll
    llvm/test/CodeGen/BPF/objdump_cond_op_2.ll
    llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s
    llvm/tools/llvm-objdump/ObjdumpOpts.td
    llvm/tools/llvm-objdump/llvm-objdump.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/docs/CommandGuide/llvm-objdump.rst b/llvm/docs/CommandGuide/llvm-objdump.rst
index 44649c670dd42..c7732c0ba69c3 100644
--- a/llvm/docs/CommandGuide/llvm-objdump.rst
+++ b/llvm/docs/CommandGuide/llvm-objdump.rst
@@ -271,7 +271,7 @@ OPTIONS
 
   When printing symbols, only print symbols with a value up to ``address``.
 
-.. option:: --symbolize-operands
+.. option:: --symbolize-operands, --no-symbolize-operands
 
   When disassembling, symbolize a branch target operand to print a label instead of a real address.
 
@@ -284,7 +284,8 @@ OPTIONS
   any analysis with a special representation (i.e. BlockFrequency,
   BranchProbability, etc) are printed as raw hex values.
 
-  Only supported for AArch64, BPF, PowerPC, RISC-V, and X86.
+  Only supported for AArch64, BPF, PowerPC, RISC-V, and X86. Enabled by default
+  for BPF; use ``--no-symbolize-operands`` to disable.
 
   Example:
     A non-symbolized branch instruction with a local target and pc-relative memory access like

diff  --git a/llvm/test/CodeGen/BPF/objdump_cond_op.ll b/llvm/test/CodeGen/BPF/objdump_cond_op.ll
index 26d7f0942c540..f466a2ab301ac 100644
--- a/llvm/test/CodeGen/BPF/objdump_cond_op.ll
+++ b/llvm/test/CodeGen/BPF/objdump_cond_op.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=bpfel -mcpu=v1 -filetype=obj -o - %s | llvm-objdump --no-print-imm-hex --mcpu=v1 -d - | FileCheck %s
+; RUN: llc -mtriple=bpfel -mcpu=v1 -filetype=obj < %s | llvm-objdump --no-print-imm-hex --no-symbolize-operands --mcpu=v1 -d - | FileCheck %s
 
 ; Source Code:
 ; int gbl;

diff  --git a/llvm/test/CodeGen/BPF/objdump_cond_op_2.ll b/llvm/test/CodeGen/BPF/objdump_cond_op_2.ll
index 895b68b5a9145..e357b557d3d06 100644
--- a/llvm/test/CodeGen/BPF/objdump_cond_op_2.ll
+++ b/llvm/test/CodeGen/BPF/objdump_cond_op_2.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=bpfel -mcpu=v1 -filetype=obj -o - %s | llvm-objdump --no-print-imm-hex -d - | FileCheck %s
+; RUN: llc -mtriple=bpfel -mcpu=v1 -filetype=obj < %s | llvm-objdump --no-print-imm-hex --no-symbolize-operands -d - | FileCheck %s
 
 ; Source Code:
 ; int test(int a, int b) {

diff  --git a/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s b/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s
index 38c10de67c447..8a4ca2ae2c36d 100644
--- a/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s
+++ b/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s
@@ -1,11 +1,23 @@
 # REQUIRES: bpf-registered-target
 
-## Verify generation of 'Lxx' labels for local jump targets, when
-## --symbolize-operands option is specified.
+## --symbolize-operands is the default for BPF. Verify that it works
+## both explicitly and by default, and that --no-symbolize-operands
+## disables it.
 
 # RUN: llvm-mc -triple=bpfel %s -filetype=obj -o %t
+
+## Default (implicit --symbolize-operands for BPF).
+# RUN: llvm-objdump -d --no-show-raw-insn --no-leading-addr %t | \
+# RUN:   FileCheck %s
+
+## Explicit --symbolize-operands.
 # RUN: llvm-objdump -d --symbolize-operands --no-show-raw-insn --no-leading-addr %t | \
 # RUN:   FileCheck %s
+
+## --no-symbolize-operands disables the default.
+# RUN: llvm-objdump -d --no-symbolize-operands --no-show-raw-insn --no-leading-addr %t | \
+# RUN:   FileCheck %s --check-prefix=NOSYM
+
         .text
 main:
         if r1 > 42 goto +2
@@ -22,3 +34,10 @@ main:
 # CHECK-NEXT: <L1>:
 # CHECK-NEXT: 	r0 = 0x0
 # CHECK-NEXT: 	exit
+
+# NOSYM:      <main>:
+# NOSYM-NEXT: 	if r1 > 0x2a goto +0x2
+# NOSYM-NEXT: 	r1 -= 0xa
+# NOSYM-NEXT: 	goto -0x3
+# NOSYM-NEXT: 	r0 = 0x0
+# NOSYM-NEXT: 	exit

diff  --git a/llvm/tools/llvm-objdump/ObjdumpOpts.td b/llvm/tools/llvm-objdump/ObjdumpOpts.td
index c97e06f3ed173..146674a6eb714 100644
--- a/llvm/tools/llvm-objdump/ObjdumpOpts.td
+++ b/llvm/tools/llvm-objdump/ObjdumpOpts.td
@@ -207,8 +207,9 @@ def syms : Flag<["--"], "syms">,
   HelpText<"Display the symbol table">;
 def : Flag<["-"], "t">, Alias<syms>, HelpText<"Alias for --syms">;
 
-def symbolize_operands : Flag<["--"], "symbolize-operands">,
-  HelpText<"Symbolize instruction operands when disassembling">;
+defm symbolize_operands : B<"symbolize-operands",
+  "Symbolize instruction operands when disassembling (default for BPF)",
+  "Do not symbolize instruction operands when disassembling">;
 
 def pretty_pgo_analysis_map : Flag<["--"], "pretty-pgo-analysis-map">,
                               HelpText<"Display PGO analysis values with "

diff  --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 7981ec8f6d713..a01b44a06b859 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -334,6 +334,7 @@ static uint64_t StopAddress = UINT64_MAX;
 static bool HasStopAddressFlag;
 
 bool objdump::SymbolTable;
+static std::optional<bool> SymbolizeOperandsOption;
 static bool SymbolizeOperands;
 static bool PrettyPGOAnalysisMap;
 static bool DynamicSymbolTable;
@@ -2674,6 +2675,11 @@ static void disassembleObject(ObjectFile *Obj, bool InlineRelocs,
 
   const Target *TheTarget = getTarget(Obj);
 
+  // Default --symbolize-operands to on for BPF, since BPF users expect to see
+  // basic block labels in disassembly.
+  SymbolizeOperands =
+      SymbolizeOperandsOption.value_or(Obj->makeTriple().isBPF());
+
   // Package up features to be passed to target/subtarget
   Expected<SubtargetFeatures> FeaturesValue = Obj->getFeatures();
   if (!FeaturesValue)
@@ -3744,9 +3750,12 @@ static void parseObjdumpOptions(const llvm::opt::InputArgList &InputArgs) {
   parseIntArg(InputArgs, OBJDUMP_stop_address_EQ, StopAddress);
   HasStopAddressFlag = InputArgs.hasArg(OBJDUMP_stop_address_EQ);
   SymbolTable = InputArgs.hasArg(OBJDUMP_syms);
-  SymbolizeOperands = InputArgs.hasArg(OBJDUMP_symbolize_operands);
+  if (const opt::Arg *A = InputArgs.getLastArg(OBJDUMP_symbolize_operands,
+                                               OBJDUMP_no_symbolize_operands))
+    SymbolizeOperandsOption =
+        A->getOption().matches(OBJDUMP_symbolize_operands);
   PrettyPGOAnalysisMap = InputArgs.hasArg(OBJDUMP_pretty_pgo_analysis_map);
-  if (PrettyPGOAnalysisMap && !SymbolizeOperands)
+  if (PrettyPGOAnalysisMap && !SymbolizeOperandsOption.value_or(false))
     reportCmdLineWarning("--symbolize-operands must be enabled for "
                          "--pretty-pgo-analysis-map to have an effect");
   DynamicSymbolTable = InputArgs.hasArg(OBJDUMP_dynamic_syms);


        


More information about the llvm-commits mailing list