[llvm] [llvm-otool] Fix -arch flag for universal binary slice selection (PR #184810)

via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 5 07:40:40 PST 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

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

Author: Ryan Mansfield (rjmansfield)

<details>
<summary>Changes</summary>

In otool mode, -arch was only used for disassembler target selection but not for picking the right slice from a universal binary.

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


4 Files Affected:

- (added) llvm/test/tools/llvm-objdump/MachO/otool-arch-flag.test (+10) 
- (modified) llvm/tools/llvm-objdump/MachODump.cpp (+1-1) 
- (modified) llvm/tools/llvm-objdump/MachODump.h (+1) 
- (modified) llvm/tools/llvm-objdump/llvm-objdump.cpp (+2) 


``````````diff
diff --git a/llvm/test/tools/llvm-objdump/MachO/otool-arch-flag.test b/llvm/test/tools/llvm-objdump/MachO/otool-arch-flag.test
new file mode 100644
index 0000000000000..1b145ac1002d4
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/MachO/otool-arch-flag.test
@@ -0,0 +1,10 @@
+# Test that llvm-otool -arch selects the correct slice from a universal binary.
+
+RUN: llvm-otool -h -arch x86_64 %p/Inputs/macho-universal.x86_64.i386 \
+RUN: | FileCheck %s --check-prefix=X86_64
+
+RUN: llvm-otool -h -arch i386 %p/Inputs/macho-universal.x86_64.i386 \
+RUN: | FileCheck %s --check-prefix=I386
+
+X86_64: 0xfeedfacf
+I386:   0xfeedface
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index e882af2dd1b90..1a574997cf4d0 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -82,7 +82,7 @@ bool objdump::ObjcMetaData;
 std::string objdump::DisSymName;
 bool objdump::IsOtool;
 bool objdump::SymbolicOperands;
-static std::vector<std::string> ArchFlags;
+std::vector<std::string> objdump::ArchFlags;
 
 static bool ArchAll = false;
 static std::string ThumbTripleName;
diff --git a/llvm/tools/llvm-objdump/MachODump.h b/llvm/tools/llvm-objdump/MachODump.h
index b54652b801c90..81fd8775e1d20 100644
--- a/llvm/tools/llvm-objdump/MachODump.h
+++ b/llvm/tools/llvm-objdump/MachODump.h
@@ -61,6 +61,7 @@ extern bool SymbolicOperands;
 extern bool UniversalHeaders;
 extern bool Verbose;
 extern bool WeakBind;
+extern std::vector<std::string> ArchFlags;
 
 Error getMachORelocationValueString(const object::MachOObjectFile *Obj,
                                     const object::RelocationRef &RelRef,
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index a01b44a06b859..4929c1b840770 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -3658,6 +3658,8 @@ static void parseOtoolOptions(const llvm::opt::InputArgList &InputArgs) {
   PrintImmHex = true;
 
   ArchName = InputArgs.getLastArgValue(OTOOL_arch).str();
+  if (!ArchName.empty())
+    ArchFlags.push_back(ArchName);
   LinkOptHints = InputArgs.hasArg(OTOOL_C);
   if (InputArgs.hasArg(OTOOL_d))
     FilterSections.push_back("__DATA,__data");

``````````

</details>


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


More information about the llvm-commits mailing list