[llvm] [llvm-objdump] Fix --disassembler-color with --macho flag (PR #163815)
Ryan Mansfield via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 20 06:28:24 PDT 2025
https://github.com/rjmansfield updated https://github.com/llvm/llvm-project/pull/163815
>From f43372049d65a37af8492b2e78d1cb2e104914e5 Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Thu, 16 Oct 2025 09:41:48 -0400
Subject: [PATCH 1/3] [llvm-objdump] Fix --disassembler-color with --macho flag
The --disassembler-color option was being ignored when using the --macho
flag because DisassembleMachO() never called setUseColor() on the
instruction printer.
---
.../MachO/arm64-disassembly-color.s | 4 +++
llvm/tools/llvm-objdump/MachODump.cpp | 26 +++++++++++++++++++
llvm/tools/llvm-objdump/llvm-objdump.cpp | 9 +------
llvm/tools/llvm-objdump/llvm-objdump.h | 8 ++++++
4 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/llvm/test/tools/llvm-objdump/MachO/arm64-disassembly-color.s b/llvm/test/tools/llvm-objdump/MachO/arm64-disassembly-color.s
index 50cd24c766763..b612e9a1b3f81 100644
--- a/llvm/test/tools/llvm-objdump/MachO/arm64-disassembly-color.s
+++ b/llvm/test/tools/llvm-objdump/MachO/arm64-disassembly-color.s
@@ -6,6 +6,10 @@
// RUN: llvm-objdump --disassembler-color=off --disassemble %t | FileCheck %s --check-prefix=NOCOLOR
// RUN: llvm-objdump --disassembler-color=terminal --disassemble %t | FileCheck %s --check-prefix=NOCOLOR
+// Test with --macho flag to ensure DisassembleMachO respects color settings
+// RUN: llvm-objdump --disassembler-color=on --macho --disassemble %t | FileCheck %s --check-prefix=COLOR
+// RUN: llvm-objdump --disassembler-color=off --macho --disassemble %t | FileCheck %s --check-prefix=NOCOLOR
+
sub sp, sp, #16
str w0, [sp, #12]
ldr w8, [sp, #12]
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index 8e9c91fde544d..b707617928f95 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -7321,6 +7321,19 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
CHECK_TARGET_INFO_CREATION(IP);
// Set the display preference for hex vs. decimal immediates.
IP->setPrintImmHex(PrintImmHex);
+ // Set up disassembler color output.
+ switch (DisassemblyColor) {
+ case ColorOutput::Enable:
+ IP->setUseColor(true);
+ break;
+ case ColorOutput::Auto:
+ IP->setUseColor(outs().has_colors());
+ break;
+ case ColorOutput::Disable:
+ case ColorOutput::Invalid:
+ IP->setUseColor(false);
+ break;
+ }
// Comment stream and backing vector.
SmallString<128> CommentsToEmit;
raw_svector_ostream CommentStream(CommentsToEmit);
@@ -7374,6 +7387,19 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
CHECK_THUMB_TARGET_INFO_CREATION(ThumbIP);
// Set the display preference for hex vs. decimal immediates.
ThumbIP->setPrintImmHex(PrintImmHex);
+ // Set up disassembler color output.
+ switch (DisassemblyColor) {
+ case ColorOutput::Enable:
+ ThumbIP->setUseColor(true);
+ break;
+ case ColorOutput::Auto:
+ ThumbIP->setUseColor(outs().has_colors());
+ break;
+ case ColorOutput::Disable:
+ case ColorOutput::Invalid:
+ ThumbIP->setUseColor(false);
+ break;
+ }
}
#undef CHECK_TARGET_INFO_CREATION
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 3ec644a472bfc..aa3106f268397 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -291,13 +291,6 @@ class BBAddrMapInfo {
#define DEBUG_TYPE "objdump"
-enum class ColorOutput {
- Auto,
- Enable,
- Disable,
- Invalid,
-};
-
static uint64_t AdjustVMA;
static bool AllHeaders;
static std::string ArchName;
@@ -310,7 +303,7 @@ bool objdump::SymbolDescription;
bool objdump::TracebackTable;
static std::vector<std::string> DisassembleSymbols;
static bool DisassembleZeroes;
-static ColorOutput DisassemblyColor;
+ColorOutput objdump::DisassemblyColor;
DIDumpType objdump::DwarfDumpType;
static bool DynamicRelocations;
static bool FaultMapSection;
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h
index 3525be9a5314a..ed0918c93c28e 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.h
+++ b/llvm/tools/llvm-objdump/llvm-objdump.h
@@ -43,6 +43,13 @@ namespace objdump {
enum DebugFormat { DFASCII, DFDisabled, DFInvalid, DFLimitsOnly, DFUnicode };
+enum class ColorOutput {
+ Auto,
+ Enable,
+ Disable,
+ Invalid,
+};
+
extern bool ArchiveHeaders;
extern int DbgIndent;
extern DebugFormat DbgVariables;
@@ -51,6 +58,7 @@ extern bool Demangle;
extern bool Disassemble;
extern bool DisassembleAll;
extern std::vector<std::string> DisassemblerOptions;
+extern ColorOutput DisassemblyColor;
extern DIDumpType DwarfDumpType;
extern std::vector<std::string> FilterSections;
extern bool LeadingAddr;
>From 57f1c98f0ec4eebdb1756bb48476606c2adad1ae Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Fri, 17 Oct 2025 11:18:35 -0400
Subject: [PATCH 2/3] Address reviewer feedback.
Add missing period.
Add setupMachOInstPrinter function.
---
.../MachO/arm64-disassembly-color.s | 2 +-
llvm/tools/llvm-objdump/MachODump.cpp | 49 +++++++------------
2 files changed, 20 insertions(+), 31 deletions(-)
diff --git a/llvm/test/tools/llvm-objdump/MachO/arm64-disassembly-color.s b/llvm/test/tools/llvm-objdump/MachO/arm64-disassembly-color.s
index b612e9a1b3f81..af58cd61902df 100644
--- a/llvm/test/tools/llvm-objdump/MachO/arm64-disassembly-color.s
+++ b/llvm/test/tools/llvm-objdump/MachO/arm64-disassembly-color.s
@@ -6,7 +6,7 @@
// RUN: llvm-objdump --disassembler-color=off --disassemble %t | FileCheck %s --check-prefix=NOCOLOR
// RUN: llvm-objdump --disassembler-color=terminal --disassemble %t | FileCheck %s --check-prefix=NOCOLOR
-// Test with --macho flag to ensure DisassembleMachO respects color settings
+//// Test with --macho flag to ensure DisassembleMachO respects color settings.
// RUN: llvm-objdump --disassembler-color=on --macho --disassemble %t | FileCheck %s --check-prefix=COLOR
// RUN: llvm-objdump --disassembler-color=off --macho --disassemble %t | FileCheck %s --check-prefix=NOCOLOR
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index b707617928f95..e0535d68a4da3 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -7235,6 +7235,22 @@ objdump::getMachODSymObject(const MachOObjectFile *MachOOF, StringRef Filename,
return DbgObj;
}
+static void setupMachOInstPrinter(MCInstPrinter *IP) {
+ IP->setPrintImmHex(PrintImmHex);
+ switch (DisassemblyColor) {
+ case ColorOutput::Enable:
+ IP->setUseColor(true);
+ break;
+ case ColorOutput::Auto:
+ IP->setUseColor(outs().has_colors());
+ break;
+ case ColorOutput::Disable:
+ case ColorOutput::Invalid:
+ IP->setUseColor(false);
+ break;
+ }
+}
+
static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
StringRef DisSegName, StringRef DisSectName) {
const char *McpuDefault = nullptr;
@@ -7319,21 +7335,8 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter(
TheTriple, AsmPrinterVariant, *AsmInfo, *InstrInfo, *MRI));
CHECK_TARGET_INFO_CREATION(IP);
- // Set the display preference for hex vs. decimal immediates.
- IP->setPrintImmHex(PrintImmHex);
- // Set up disassembler color output.
- switch (DisassemblyColor) {
- case ColorOutput::Enable:
- IP->setUseColor(true);
- break;
- case ColorOutput::Auto:
- IP->setUseColor(outs().has_colors());
- break;
- case ColorOutput::Disable:
- case ColorOutput::Invalid:
- IP->setUseColor(false);
- break;
- }
+ setupMachOInstPrinter(IP.get());
+
// Comment stream and backing vector.
SmallString<128> CommentsToEmit;
raw_svector_ostream CommentStream(CommentsToEmit);
@@ -7385,21 +7388,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
ThumbTriple, ThumbAsmPrinterVariant, *ThumbAsmInfo, *ThumbInstrInfo,
*ThumbMRI));
CHECK_THUMB_TARGET_INFO_CREATION(ThumbIP);
- // Set the display preference for hex vs. decimal immediates.
- ThumbIP->setPrintImmHex(PrintImmHex);
- // Set up disassembler color output.
- switch (DisassemblyColor) {
- case ColorOutput::Enable:
- ThumbIP->setUseColor(true);
- break;
- case ColorOutput::Auto:
- ThumbIP->setUseColor(outs().has_colors());
- break;
- case ColorOutput::Disable:
- case ColorOutput::Invalid:
- ThumbIP->setUseColor(false);
- break;
- }
+ setupMachOInstPrinter(ThumbIP.get());
}
#undef CHECK_TARGET_INFO_CREATION
>From c2f893e4913c2c97929ded036baec2df031e6400 Mon Sep 17 00:00:00 2001
From: Ryan Mansfield <ryan_mansfield at apple.com>
Date: Mon, 20 Oct 2025 09:27:27 -0400
Subject: [PATCH 3/3] Rename setupMachOInstPrinter to setUpMachOInstPrinter.
---
llvm/tools/llvm-objdump/MachODump.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index e0535d68a4da3..812d0f26d984f 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -7235,7 +7235,7 @@ objdump::getMachODSymObject(const MachOObjectFile *MachOOF, StringRef Filename,
return DbgObj;
}
-static void setupMachOInstPrinter(MCInstPrinter *IP) {
+static void setUpMachOInstPrinter(MCInstPrinter *IP) {
IP->setPrintImmHex(PrintImmHex);
switch (DisassemblyColor) {
case ColorOutput::Enable:
@@ -7335,7 +7335,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter(
TheTriple, AsmPrinterVariant, *AsmInfo, *InstrInfo, *MRI));
CHECK_TARGET_INFO_CREATION(IP);
- setupMachOInstPrinter(IP.get());
+ setUpMachOInstPrinter(IP.get());
// Comment stream and backing vector.
SmallString<128> CommentsToEmit;
@@ -7388,7 +7388,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
ThumbTriple, ThumbAsmPrinterVariant, *ThumbAsmInfo, *ThumbInstrInfo,
*ThumbMRI));
CHECK_THUMB_TARGET_INFO_CREATION(ThumbIP);
- setupMachOInstPrinter(ThumbIP.get());
+ setUpMachOInstPrinter(ThumbIP.get());
}
#undef CHECK_TARGET_INFO_CREATION
More information about the llvm-commits
mailing list