[llvm] [llvm-objdump] Add -mllvm (PR #75892)

via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 18 21:30:29 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-binary-utilities

Author: Fangrui Song (MaskRay)

<details>
<summary>Changes</summary>

When llvm-objdump switched from cl:: to OptTable
(https://reviews.llvm.org/D100433), we dropped support for LLVM cl::
options. Some LLVM_DEBUG in `llvm/lib/Target/$target/MCDisassembler/`
files might be useful. Add -mllvm to allow dumping the information.

```
llvm-objdump -d -mllvm -debug a.o > /dev/null
```

Link: https://discourse.llvm.org/t/how-to-enable-debug-logs-in-llvm-objdump/75758


---
Full diff: https://github.com/llvm/llvm-project/pull/75892.diff


4 Files Affected:

- (modified) llvm/docs/CommandGuide/llvm-objdump.rst (+4) 
- (added) llvm/test/tools/llvm-objdump/mllvm.s (+8) 
- (modified) llvm/tools/llvm-objdump/ObjdumpOpts.td (+3) 
- (modified) llvm/tools/llvm-objdump/llvm-objdump.cpp (+7-4) 


``````````diff
diff --git a/llvm/docs/CommandGuide/llvm-objdump.rst b/llvm/docs/CommandGuide/llvm-objdump.rst
index b156b212e461f2..959452a74b23ea 100644
--- a/llvm/docs/CommandGuide/llvm-objdump.rst
+++ b/llvm/docs/CommandGuide/llvm-objdump.rst
@@ -198,6 +198,10 @@ OPTIONS
   Enable/disable target-specific attributes. Specify ``--mattr=help`` to display
   the available attributes.
 
+.. option:: -mllvm <arg>
+
+   Specify an argument to forward to LLVM's CommandLine library.
+
 .. option:: --no-leading-addr, --no-addresses
 
   When disassembling, do not print leading addresses for instructions or inline
diff --git a/llvm/test/tools/llvm-objdump/mllvm.s b/llvm/test/tools/llvm-objdump/mllvm.s
new file mode 100644
index 00000000000000..7fb14ff085fa94
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/mllvm.s
@@ -0,0 +1,8 @@
+# REQUIRES: x86-registered-target
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t
+# RUN: llvm-objdump --no-print-imm-hex -d -mllvm --x86-asm-syntax=intel %t | FileCheck %s
+# RUN: llvm-objdump --no-print-imm-hex -d -mllvm=--x86-asm-syntax=intel %t | FileCheck %s
+
+# CHECK: lea rax, [rsi + 4*rdi + 5]
+
+  leaq 5(%rsi,%rdi,4), %rax
diff --git a/llvm/tools/llvm-objdump/ObjdumpOpts.td b/llvm/tools/llvm-objdump/ObjdumpOpts.td
index 100a95d3d92542..c1dec5ced89d31 100644
--- a/llvm/tools/llvm-objdump/ObjdumpOpts.td
+++ b/llvm/tools/llvm-objdump/ObjdumpOpts.td
@@ -137,6 +137,9 @@ def mattr_EQ : Joined<["--"], "mattr=">,
   MetaVarName<"a1,+a2,-a3,...">,
   HelpText<"Target specific attributes (--mattr=help for details)">;
 
+def mllvm : Separate<["-"], "mllvm">, HelpText<"Specify an argument to forward to LLVM's CommandLine library">, MetaVarName<"<arg>">;
+def : Joined<["-"], "mllvm=">, Alias<mllvm>;
+
 def no_show_raw_insn : Flag<["--"], "no-show-raw-insn">,
   HelpText<"When disassembling instructions, "
            "do not print the instruction bytes.">;
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 1cdd84b20970fe..463d73e73ef82a 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -3320,10 +3320,13 @@ static void parseObjdumpOptions(const llvm::opt::InputArgList &InputArgs) {
         DisassemblerOptions.push_back(V.str());
     }
   }
-  if (AsmSyntax) {
-    const char *Argv[] = {"llvm-objdump", AsmSyntax};
-    llvm::cl::ParseCommandLineOptions(2, Argv);
-  }
+  SmallVector<const char *> Args = {"llvm-objdump"};
+  for (const opt::Arg *A : InputArgs.filtered(OBJDUMP_mllvm))
+    Args.push_back(A->getValue());
+  if (AsmSyntax)
+    Args.push_back(AsmSyntax);
+  if (Args.size() > 1)
+    llvm::cl::ParseCommandLineOptions(Args.size(), Args.data());
 
   // Look up any provided build IDs, then append them to the input filenames.
   for (const opt::Arg *A : InputArgs.filtered(OBJDUMP_build_id)) {

``````````

</details>


https://github.com/llvm/llvm-project/pull/75892


More information about the llvm-commits mailing list