From f43372049d65a37af8492b2e78d1cb2e104914e5 Mon Sep 17 00:00:00 2001 From: Ryan Mansfield 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 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 DisassemblerOptions; +extern ColorOutput DisassemblyColor; extern DIDumpType DwarfDumpType; extern std::vector FilterSections; extern bool LeadingAddr; From 57f1c98f0ec4eebdb1756bb48476606c2adad1ae Mon Sep 17 00:00:00 2001 From: Ryan Mansfield 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 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 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 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