[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