[llvm] [llvm-otool] Add -m flag and archive(member) input syntax (PR #194234)
Ryan Mansfield via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 27 06:01:27 PDT 2026
https://github.com/rjmansfield updated https://github.com/llvm/llvm-project/pull/194234
>From d8a84e1881803ad6530cb44c0967b7418bf5876d Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Sun, 26 Apr 2026 08:53:59 -0400
Subject: [PATCH 1/5] [llvm-otool] Add -m flag and archive(member) input syntax
Support classic otool's archive(member) input syntax where a filename
like 'foo.a(bar.o)' extracts and processes only the named member from
the archive. The -m flag disables this syntax parsing, treating the
entire string as a literal filename.
Fixes #126272
---
llvm/docs/CommandGuide/llvm-otool.rst | 4 ++
.../MachO/otool-archive-member.test | 37 +++++++++++
llvm/tools/llvm-objdump/MachODump.cpp | 61 +++++++++++++++++++
llvm/tools/llvm-objdump/MachODump.h | 1 +
llvm/tools/llvm-objdump/OtoolOpts.td | 4 +-
llvm/tools/llvm-objdump/llvm-objdump.cpp | 2 +
6 files changed, 108 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
diff --git a/llvm/docs/CommandGuide/llvm-otool.rst b/llvm/docs/CommandGuide/llvm-otool.rst
index ab92673092c9c..17aa9089b3875 100644
--- a/llvm/docs/CommandGuide/llvm-otool.rst
+++ b/llvm/docs/CommandGuide/llvm-otool.rst
@@ -83,6 +83,10 @@ OPTIONS
Print load commands.
+.. option:: -m
+
+ Don't use archive(member) syntax.
+
.. option:: -mcpu=<value>
Select cpu for disassembly.
diff --git a/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test b/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
new file mode 100644
index 0000000000000..534d5fe45c6a4
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
@@ -0,0 +1,37 @@
+# Test llvm-otool archive(member) input syntax and -m flag.
+
+RUN: mkdir -p %t.dir
+RUN: cp %p/Inputs/hello.obj.macho-x86_64 %t.dir/foo.o
+RUN: cp %p/Inputs/ObjC.obj.macho-x86_64 %t.dir/bar.o
+RUN: llvm-ar rcs %t.dir/lib.a %t.dir/foo.o %t.dir/bar.o
+
+# archive(member) syntax extracts only the named member.
+RUN: llvm-otool -l '%t.dir/lib.a(bar.o)' \
+RUN: | FileCheck %s --check-prefix=MEMBER --implicit-check-not="foo.o"
+
+MEMBER: bar.o
+
+# Without archive(member), both members are shown.
+RUN: llvm-otool -l %t.dir/lib.a \
+RUN: | FileCheck %s --check-prefix=BOTH
+
+BOTH: foo.o
+BOTH: bar.o
+
+# -m disables archive(member) parsing, treating the filename literally.
+RUN: not llvm-otool -mh '%t.dir/lib.a(bar.o)' 2>&1 \
+RUN: | FileCheck %s --check-prefix=NOPAREN
+
+NOPAREN: error: {{.*}}: No such file or directory
+
+# Non-existent member gives an error.
+RUN: not llvm-otool -h '%t.dir/lib.a(nonexistent)' 2>&1 \
+RUN: | FileCheck %s --check-prefix=BADMEMBER
+
+BADMEMBER: error: {{.*}}: archive does not contain a member named: nonexistent
+
+# archive(member) on a non-archive file gives an error.
+RUN: not llvm-otool -h '%p/Inputs/hello.obj.macho-x86_64(foo)' 2>&1 \
+RUN: | FileCheck %s --check-prefix=NOTARCHIVE
+
+NOTARCHIVE: error: {{.*}}: not an archive (cannot extract member: foo)
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index 25fbd4d60ecc3..5374c895894da 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -81,10 +81,12 @@ bool objdump::Verbose;
bool objdump::ObjcMetaData;
std::string objdump::DisSymName;
bool objdump::IsOtool;
+bool objdump::NoUseMemberSyntax;
bool objdump::SymbolicOperands;
std::vector<std::string> objdump::ArchFlags;
static bool ArchAll = false;
+static std::string ArchiveMemberFilter;
static std::string ThumbTripleName;
static StringRef ordinalName(const object::MachOObjectFile *, int);
@@ -2533,6 +2535,17 @@ static bool ValidateArchFlags() {
return true;
}
+static bool skipArchiveMember(const object::Archive::Child &C) {
+ if (ArchiveMemberFilter.empty())
+ return false;
+ Expected<StringRef> NameOrErr = C.getName();
+ if (!NameOrErr) {
+ consumeError(NameOrErr.takeError());
+ return true;
+ }
+ return *NameOrErr != ArchiveMemberFilter;
+}
+
// ParseInputMachO() parses the named Mach-O file in Filename and handles the
// -arch flags selecting just those slices as specified by them and also parses
// archive files. Then for each individual Mach-O file ProcessMachO() is
@@ -2541,6 +2554,19 @@ void objdump::parseInputMachO(StringRef Filename) {
if (!ValidateArchFlags())
return;
+ // In otool mode, support archive(member) syntax: if the filename ends
+ // with ')' and contains '(', split it into the archive path and member
+ // name. The -m option disables this parsing.
+ ArchiveMemberFilter.clear();
+ if (IsOtool && !NoUseMemberSyntax && !Filename.empty() &&
+ Filename.back() == ')') {
+ auto Pos = Filename.rfind('(');
+ if (Pos != StringRef::npos && Pos > 0) {
+ ArchiveMemberFilter = Filename.substr(Pos + 1).drop_back().str();
+ Filename = Filename.substr(0, Pos);
+ }
+ }
+
// Attempt to open the binary.
Expected<OwningBinary<Binary>> BinaryOrErr = createBinary(Filename);
if (!BinaryOrErr) {
@@ -2559,8 +2585,12 @@ void objdump::parseInputMachO(StringRef Filename) {
Error Err = Error::success();
unsigned I = -1;
+ bool FoundMember = false;
for (auto &C : A->children(Err)) {
++I;
+ if (skipArchiveMember(C))
+ continue;
+ FoundMember = true;
Expected<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary();
if (!ChildOrErr) {
if (Error E = isNotObjectErrorInvalidFileType(ChildOrErr.takeError()))
@@ -2575,12 +2605,20 @@ void objdump::parseInputMachO(StringRef Filename) {
}
if (Err)
reportError(std::move(Err), Filename);
+ if (!FoundMember && !ArchiveMemberFilter.empty())
+ reportError(Filename, "archive does not contain a member named: " +
+ ArchiveMemberFilter);
return;
}
if (MachOUniversalBinary *UB = dyn_cast<MachOUniversalBinary>(&Bin)) {
parseInputMachO(UB);
return;
}
+ if (!ArchiveMemberFilter.empty()) {
+ reportError(Filename, "not an archive (cannot extract member: " +
+ ArchiveMemberFilter + ")");
+ return;
+ }
if (ObjectFile *O = dyn_cast<ObjectFile>(&Bin)) {
if (!checkMachOAndArchFlags(O, Filename))
return;
@@ -2640,8 +2678,12 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
ArchiveMemberOffsets, ArchitectureName);
Error Err = Error::success();
unsigned I = -1;
+ bool FoundMember = false;
for (auto &C : A->children(Err)) {
++I;
+ if (skipArchiveMember(C))
+ continue;
+ FoundMember = true;
Expected<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary();
if (!ChildOrErr) {
if (Error E =
@@ -2656,6 +2698,10 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
}
if (Err)
reportError(std::move(Err), Filename);
+ if (!FoundMember && !ArchiveMemberFilter.empty())
+ reportError(Filename,
+ "archive does not contain a member named: " +
+ ArchiveMemberFilter);
} else {
consumeError(AOrErr.takeError());
reportError(Filename,
@@ -2702,8 +2748,12 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
ArchiveMemberOffsets);
Error Err = Error::success();
unsigned I = -1;
+ bool FoundMember = false;
for (auto &C : A->children(Err)) {
++I;
+ if (skipArchiveMember(C))
+ continue;
+ FoundMember = true;
Expected<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary();
if (!ChildOrErr) {
if (Error E =
@@ -2717,6 +2767,10 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
}
if (Err)
reportError(std::move(Err), Filename);
+ if (!FoundMember && !ArchiveMemberFilter.empty())
+ reportError(Filename,
+ "archive does not contain a member named: " +
+ ArchiveMemberFilter);
} else {
consumeError(AOrErr.takeError());
reportError(Filename, "Mach-O universal file for architecture " +
@@ -2755,8 +2809,12 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
ArchitectureName);
Error Err = Error::success();
unsigned I = -1;
+ bool FoundMember = false;
for (auto &C : A->children(Err)) {
++I;
+ if (skipArchiveMember(C))
+ continue;
+ FoundMember = true;
Expected<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary();
if (!ChildOrErr) {
if (Error E = isNotObjectErrorInvalidFileType(ChildOrErr.takeError()))
@@ -2771,6 +2829,9 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
}
if (Err)
reportError(std::move(Err), Filename);
+ if (!FoundMember && !ArchiveMemberFilter.empty())
+ reportError(Filename, "archive does not contain a member named: " +
+ ArchiveMemberFilter);
} else {
consumeError(AOrErr.takeError());
reportError(Filename, "Mach-O universal file for architecture " +
diff --git a/llvm/tools/llvm-objdump/MachODump.h b/llvm/tools/llvm-objdump/MachODump.h
index 81fd8775e1d20..e8f51ad0002cb 100644
--- a/llvm/tools/llvm-objdump/MachODump.h
+++ b/llvm/tools/llvm-objdump/MachODump.h
@@ -54,6 +54,7 @@ extern bool InfoPlist;
extern bool LazyBind;
extern bool LeadingHeaders;
extern bool LinkOptHints;
+extern bool NoUseMemberSyntax;
extern bool ObjcMetaData;
extern bool Rebase;
extern bool Rpaths;
diff --git a/llvm/tools/llvm-objdump/OtoolOpts.td b/llvm/tools/llvm-objdump/OtoolOpts.td
index 8cc70d3207245..e14c09aee42f4 100644
--- a/llvm/tools/llvm-objdump/OtoolOpts.td
+++ b/llvm/tools/llvm-objdump/OtoolOpts.td
@@ -43,9 +43,11 @@ def chained_fixups : Flag<["-"], "chained_fixups">,
def dyld_info : Flag<["-"], "dyld_info">,
HelpText<"print bind and rebase information">;
+def m : Flag<["-"], "m">,
+ HelpText<"don't use archive(member) syntax">;
+
// Not (yet?) implemented:
// -c print argument strings of a core file
-// -m don't use archive(member) syntax
// -dyld_opcodes
// -addr_slide=arg
// -function_offsets
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index a8a856e79dff8..c0f0250564228 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -3693,6 +3693,8 @@ static void parseOtoolOptions(const llvm::opt::InputArgList &InputArgs) {
ChainedFixups = InputArgs.hasArg(OTOOL_chained_fixups);
DyldInfo = InputArgs.hasArg(OTOOL_dyld_info);
+ NoUseMemberSyntax = InputArgs.hasArg(OTOOL_m);
+
InputFilenames = InputArgs.getAllArgValues(OTOOL_INPUT);
if (InputFilenames.empty())
reportCmdLineError("no input file");
>From 6d97ba66f892cfbed01f750f797e857cefcd9a2d Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Sun, 26 Apr 2026 09:47:06 -0400
Subject: [PATCH 2/5] Fix formatting issue.
---
llvm/tools/llvm-objdump/MachODump.cpp | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index 5374c895894da..a60a16b9ced45 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -2768,9 +2768,8 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
if (Err)
reportError(std::move(Err), Filename);
if (!FoundMember && !ArchiveMemberFilter.empty())
- reportError(Filename,
- "archive does not contain a member named: " +
- ArchiveMemberFilter);
+ reportError(Filename, "archive does not contain a member named: " +
+ ArchiveMemberFilter);
} else {
consumeError(AOrErr.takeError());
reportError(Filename, "Mach-O universal file for architecture " +
>From d479ce5b684478ff0a4bf40ccd4205e027fc54e4 Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Sun, 26 Apr 2026 10:46:05 -0400
Subject: [PATCH 3/5] Use double quotes in tests.
---
.../tools/llvm-objdump/MachO/otool-archive-member.test | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test b/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
index 534d5fe45c6a4..836f64667546a 100644
--- a/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
+++ b/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
@@ -6,7 +6,7 @@ RUN: cp %p/Inputs/ObjC.obj.macho-x86_64 %t.dir/bar.o
RUN: llvm-ar rcs %t.dir/lib.a %t.dir/foo.o %t.dir/bar.o
# archive(member) syntax extracts only the named member.
-RUN: llvm-otool -l '%t.dir/lib.a(bar.o)' \
+RUN: llvm-otool -l "%t.dir/lib.a(bar.o)" \
RUN: | FileCheck %s --check-prefix=MEMBER --implicit-check-not="foo.o"
MEMBER: bar.o
@@ -19,19 +19,19 @@ BOTH: foo.o
BOTH: bar.o
# -m disables archive(member) parsing, treating the filename literally.
-RUN: not llvm-otool -mh '%t.dir/lib.a(bar.o)' 2>&1 \
+RUN: not llvm-otool -mh "%t.dir/lib.a(bar.o)" 2>&1 \
RUN: | FileCheck %s --check-prefix=NOPAREN
NOPAREN: error: {{.*}}: No such file or directory
# Non-existent member gives an error.
-RUN: not llvm-otool -h '%t.dir/lib.a(nonexistent)' 2>&1 \
+RUN: not llvm-otool -h "%t.dir/lib.a(nonexistent)" 2>&1 \
RUN: | FileCheck %s --check-prefix=BADMEMBER
BADMEMBER: error: {{.*}}: archive does not contain a member named: nonexistent
# archive(member) on a non-archive file gives an error.
-RUN: not llvm-otool -h '%p/Inputs/hello.obj.macho-x86_64(foo)' 2>&1 \
+RUN: not llvm-otool -h "%p/Inputs/hello.obj.macho-x86_64(foo)" 2>&1 \
RUN: | FileCheck %s --check-prefix=NOTARCHIVE
NOTARCHIVE: error: {{.*}}: not an archive (cannot extract member: foo)
>From ba8dfca6a0472ecf4958a15048609f289dd216cb Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Sun, 26 Apr 2026 11:44:03 -0400
Subject: [PATCH 4/5] Skip OS-dependent error message in test.
---
llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test b/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
index 836f64667546a..917ec0915c37c 100644
--- a/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
+++ b/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
@@ -22,7 +22,7 @@ BOTH: bar.o
RUN: not llvm-otool -mh "%t.dir/lib.a(bar.o)" 2>&1 \
RUN: | FileCheck %s --check-prefix=NOPAREN
-NOPAREN: error: {{.*}}: No such file or directory
+NOPAREN: '{{.*}}lib.a(bar.o)':
# Non-existent member gives an error.
RUN: not llvm-otool -h "%t.dir/lib.a(nonexistent)" 2>&1 \
>From a7bcc27ad24875949d6bcc70fd883ca8f02f6bc9 Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Mon, 27 Apr 2026 08:53:34 -0400
Subject: [PATCH 5/5] Address reviewer feedback.
- Rename to UseMemberSyntax
- Report getName errors
- Use %errc_ENOENT and tighten test checks
- Add multi input test
---
.../MachO/otool-archive-member.test | 21 ++++++++++++++-----
llvm/tools/llvm-objdump/MachODump.cpp | 17 ++++++++-------
llvm/tools/llvm-objdump/MachODump.h | 2 +-
llvm/tools/llvm-objdump/llvm-objdump.cpp | 2 +-
4 files changed, 27 insertions(+), 15 deletions(-)
diff --git a/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test b/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
index 917ec0915c37c..3aaa2028b98ca 100644
--- a/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
+++ b/llvm/test/tools/llvm-objdump/MachO/otool-archive-member.test
@@ -20,18 +20,29 @@ BOTH: bar.o
# -m disables archive(member) parsing, treating the filename literally.
RUN: not llvm-otool -mh "%t.dir/lib.a(bar.o)" 2>&1 \
-RUN: | FileCheck %s --check-prefix=NOPAREN
+RUN: | FileCheck %s --check-prefix=NOPAREN -DMSG=%errc_ENOENT -DPATH=%t.dir
-NOPAREN: '{{.*}}lib.a(bar.o)':
+NOPAREN: error: '[[PATH]]/lib.a(bar.o)': [[MSG]]
# Non-existent member gives an error.
RUN: not llvm-otool -h "%t.dir/lib.a(nonexistent)" 2>&1 \
-RUN: | FileCheck %s --check-prefix=BADMEMBER
+RUN: | FileCheck %s --check-prefix=BADMEMBER -DPATH=%t.dir
-BADMEMBER: error: {{.*}}: archive does not contain a member named: nonexistent
+BADMEMBER: error: '[[PATH]]/lib.a': archive does not contain a member named: nonexistent
# archive(member) on a non-archive file gives an error.
RUN: not llvm-otool -h "%p/Inputs/hello.obj.macho-x86_64(foo)" 2>&1 \
RUN: | FileCheck %s --check-prefix=NOTARCHIVE
-NOTARCHIVE: error: {{.*}}: not an archive (cannot extract member: foo)
+NOTARCHIVE: error: '{{.*}}hello.obj.macho-x86_64': not an archive (cannot extract member: foo)
+
+# Handle multiple inputs with archive(member) syntax.
+RUN: llvm-otool -h "%t.dir/lib.a(foo.o)" "%t.dir/lib.a(bar.o)" \
+RUN: | FileCheck %s --check-prefix=MULTI
+
+MULTI: Archive :
+MULTI-NEXT: Mach header
+MULTI: 496
+MULTI-NEXT: Archive :
+MULTI-NEXT: Mach header
+MULTI: 896
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index a60a16b9ced45..2ef551c6c961f 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -81,7 +81,7 @@ bool objdump::Verbose;
bool objdump::ObjcMetaData;
std::string objdump::DisSymName;
bool objdump::IsOtool;
-bool objdump::NoUseMemberSyntax;
+bool objdump::UseMemberSyntax;
bool objdump::SymbolicOperands;
std::vector<std::string> objdump::ArchFlags;
@@ -2535,12 +2535,13 @@ static bool ValidateArchFlags() {
return true;
}
-static bool skipArchiveMember(const object::Archive::Child &C) {
+static bool skipArchiveMember(const object::Archive::Child &C,
+ StringRef Filename) {
if (ArchiveMemberFilter.empty())
return false;
Expected<StringRef> NameOrErr = C.getName();
if (!NameOrErr) {
- consumeError(NameOrErr.takeError());
+ reportError(NameOrErr.takeError(), Filename);
return true;
}
return *NameOrErr != ArchiveMemberFilter;
@@ -2558,7 +2559,7 @@ void objdump::parseInputMachO(StringRef Filename) {
// with ')' and contains '(', split it into the archive path and member
// name. The -m option disables this parsing.
ArchiveMemberFilter.clear();
- if (IsOtool && !NoUseMemberSyntax && !Filename.empty() &&
+ if (IsOtool && UseMemberSyntax && !Filename.empty() &&
Filename.back() == ')') {
auto Pos = Filename.rfind('(');
if (Pos != StringRef::npos && Pos > 0) {
@@ -2588,7 +2589,7 @@ void objdump::parseInputMachO(StringRef Filename) {
bool FoundMember = false;
for (auto &C : A->children(Err)) {
++I;
- if (skipArchiveMember(C))
+ if (skipArchiveMember(C, Filename))
continue;
FoundMember = true;
Expected<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary();
@@ -2681,7 +2682,7 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
bool FoundMember = false;
for (auto &C : A->children(Err)) {
++I;
- if (skipArchiveMember(C))
+ if (skipArchiveMember(C, Filename))
continue;
FoundMember = true;
Expected<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary();
@@ -2751,7 +2752,7 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
bool FoundMember = false;
for (auto &C : A->children(Err)) {
++I;
- if (skipArchiveMember(C))
+ if (skipArchiveMember(C, Filename))
continue;
FoundMember = true;
Expected<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary();
@@ -2811,7 +2812,7 @@ void objdump::parseInputMachO(MachOUniversalBinary *UB) {
bool FoundMember = false;
for (auto &C : A->children(Err)) {
++I;
- if (skipArchiveMember(C))
+ if (skipArchiveMember(C, Filename))
continue;
FoundMember = true;
Expected<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary();
diff --git a/llvm/tools/llvm-objdump/MachODump.h b/llvm/tools/llvm-objdump/MachODump.h
index e8f51ad0002cb..b9a316a4deb16 100644
--- a/llvm/tools/llvm-objdump/MachODump.h
+++ b/llvm/tools/llvm-objdump/MachODump.h
@@ -54,12 +54,12 @@ extern bool InfoPlist;
extern bool LazyBind;
extern bool LeadingHeaders;
extern bool LinkOptHints;
-extern bool NoUseMemberSyntax;
extern bool ObjcMetaData;
extern bool Rebase;
extern bool Rpaths;
extern bool SymbolicOperands;
extern bool UniversalHeaders;
+extern bool UseMemberSyntax;
extern bool Verbose;
extern bool WeakBind;
extern std::vector<std::string> ArchFlags;
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index c0f0250564228..3cdaf64b1c99d 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -3693,7 +3693,7 @@ static void parseOtoolOptions(const llvm::opt::InputArgList &InputArgs) {
ChainedFixups = InputArgs.hasArg(OTOOL_chained_fixups);
DyldInfo = InputArgs.hasArg(OTOOL_dyld_info);
- NoUseMemberSyntax = InputArgs.hasArg(OTOOL_m);
+ UseMemberSyntax = !InputArgs.hasArg(OTOOL_m);
InputFilenames = InputArgs.getAllArgValues(OTOOL_INPUT);
if (InputFilenames.empty())
More information about the llvm-commits
mailing list