Skip to content

[DirectX][objdump] Add support for printing signatures #152531

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Aug 12, 2025

Conversation

llvm-beanz
Copy link
Collaborator

This adds support for printing the signature sections as part of the -p flag for printing private headers.

The formatting aims to roughly match the formatting used by DXC's /dumpbin flag.

Resolves #152380.

This adds support for printing the signature sections as part of the
`-p` flag for printing private headers.

The formatting aims to roughly match the formatting used by DXC's
`/dumpbin` flag.

Resolves llvm#152380.
@llvmbot
Copy link
Member

llvmbot commented Aug 7, 2025

@llvm/pr-subscribers-backend-directx

Author: Chris B (llvm-beanz)

Changes

This adds support for printing the signature sections as part of the -p flag for printing private headers.

The formatting aims to roughly match the formatting used by DXC's /dumpbin flag.

Resolves #152380.


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

3 Files Affected:

  • (modified) llvm/include/llvm/Object/DXContainer.h (+4)
  • (added) llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml (+161)
  • (modified) llvm/tools/llvm-objdump/DXContainerDump.cpp (+128-2)
diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h
index ad1b2361ff064..8a2efe2e928b0 100644
--- a/llvm/include/llvm/Object/DXContainer.h
+++ b/llvm/include/llvm/Object/DXContainer.h
@@ -603,6 +603,10 @@ class LLVM_ABI DXContainerObjectFile : public ObjectFile {
   }
 
 public:
+  const DXContainer &getDXContainer() const {
+    return Container;
+  }
+
   static bool classof(const Binary *v) { return v->isDXContainer(); }
 
   Expected<StringRef> getSymbolName(DataRefImpl) const override;
diff --git a/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml b/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml
new file mode 100644
index 0000000000000..fbfe17149cfb5
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml
@@ -0,0 +1,161 @@
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objdump -p %t | FileCheck %s
+--- !dxcontainer
+Header:
+  Hash:            [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+                     0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
+  Version:
+    Major:           1
+    Minor:           0
+  FileSize:        630
+  PartCount:       3
+  PartOffsets:     [ 64, 124, 184 ]
+Parts:
+  - Name:            ISG1
+    Size:            52
+    Signature:
+      Parameters:
+        - Stream:          0
+          Name:            AAA_HSFoo
+          Index:           4391238    # This value forces the index column to widen
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        0
+          Mask:            7
+          ExclusiveMask:   2
+          MinPrecision:    Default
+  - Name:            OSG1
+    Size:            52
+    Signature:
+      Parameters:
+        - Stream:          0
+          Name:            SV_Position
+          Index:           0
+          SystemValue:     Position
+          CompType:        Float32
+          Register:        2147483647 # This value forces the register column to widen
+          Mask:            15
+          ExclusiveMask:   0
+          MinPrecision:    Default
+  - Name:            PSG1
+    Size:            402
+    Signature:
+      Parameters:
+        - Stream:          0
+          Name:            SV_TessFactor
+          Index:           0
+          SystemValue:     FinalQuadEdgeTessfactor  # The tessfactor forces the SysVal column to widen
+          CompType:        Float32
+          Register:        0
+          Mask:            8
+          ExclusiveMask:   8
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            BBB
+          Index:           0
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        0
+          Mask:            7
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_TessFactor
+          Index:           1
+          SystemValue:     FinalQuadEdgeTessfactor
+          CompType:        Float32
+          Register:        1
+          Mask:            8
+          ExclusiveMask:   8
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            BBB
+          Index:           1
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        1
+          Mask:            7
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_TessFactor
+          Index:           2
+          SystemValue:     FinalQuadEdgeTessfactor
+          CompType:        Float32
+          Register:        2
+          Mask:            8
+          ExclusiveMask:   8
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            BBB
+          Index:           2
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        2
+          Mask:            7
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_TessFactor
+          Index:           3
+          SystemValue:     FinalQuadEdgeTessfactor
+          CompType:        Float32
+          Register:        3
+          Mask:            8
+          ExclusiveMask:   8
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_InsideTessFactor
+          Index:           0
+          SystemValue:     FinalQuadInsideTessfactor
+          CompType:        Float32
+          Register:        4
+          Mask:            8
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_InsideTessFactor
+          Index:           1
+          SystemValue:     FinalQuadInsideTessfactor
+          CompType:        Float32
+          Register:        5
+          Mask:            8
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            AVeryLongStringThatWillForceWidening # This value forces name column to widen
+          Index:           0
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        6
+          Mask:            15
+          ExclusiveMask:   4
+          MinPrecision:    Default
+...
+
+# CHECK: ; Input signature:
+# CHECK-NEXT: ;
+# CHECK-NEXT: ; Name                       Index  Mask Register   SysValue  Format  Used
+# CHECK-NEXT: ; ------------------------ ------- ----- -------- ---------- ------- -----
+# CHECK-NEXT: ; AAA_HSFoo                4391238  xyz         0  Undefined Float32   y
+
+# CHECK: ; Output signature:
+# CHECK-NEXT: ;
+# CHECK-NEXT: ; Name                     Index  Mask   Register   SysValue  Format  Used
+# CHECK-NEXT: ; ------------------------ ----- ----- ---------- ---------- ------- -----
+# CHECK-NEXT: ; SV_Position                  0  xyzw 2147483647   Position Float32
+
+# CHECK: ; Patch Constant signature:
+# CHECK-NEXT: ;
+# CHECK-NEXT: ; Name                                 Index  Mask Register                  SysValue  Format  Used
+# CHECK-NEXT: ; ------------------------------------ ----- ----- -------- ------------------------- ------- -----
+# CHECK-NEXT: ; SV_TessFactor                            0     w        0   FinalQuadEdgeTessfactor Float32     w
+# CHECK-NEXT: ; BBB                                      0  xyz         0                 Undefined Float32
+# CHECK-NEXT: ; SV_TessFactor                            1     w        1   FinalQuadEdgeTessfactor Float32     w
+# CHECK-NEXT: ; BBB                                      1  xyz         1                 Undefined Float32
+# CHECK-NEXT: ; SV_TessFactor                            2     w        2   FinalQuadEdgeTessfactor Float32     w
+# CHECK-NEXT: ; BBB                                      2  xyz         2                 Undefined Float32
+# CHECK-NEXT: ; SV_TessFactor                            3     w        3   FinalQuadEdgeTessfactor Float32     w
+# CHECK-NEXT: ; SV_InsideTessFactor                      0     w        4 FinalQuadInsideTessfactor Float32
+# CHECK-NEXT: ; SV_InsideTessFactor                      1     w        5 FinalQuadInsideTessfactor Float32
+# CHECK-NEXT: ; AVeryLongStringThatWillForceWidening     0  xyzw        6                 Undefined Float32    z
diff --git a/llvm/tools/llvm-objdump/DXContainerDump.cpp b/llvm/tools/llvm-objdump/DXContainerDump.cpp
index 2fb073473de53..17ae79b133a88 100644
--- a/llvm/tools/llvm-objdump/DXContainerDump.cpp
+++ b/llvm/tools/llvm-objdump/DXContainerDump.cpp
@@ -12,16 +12,142 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm-objdump.h"
+#include "llvm/BinaryFormat/DXContainer.h"
 #include "llvm/Object/DXContainer.h"
+#include "llvm/Support/ScopedPrinter.h"
 
 using namespace llvm;
+using namespace llvm::object;
+
+static llvm::SmallString<4> maskToString(uint8_t Mask) {
+  llvm::SmallString<4> Result("    ");
+  if (Mask & 1)
+    Result[0] = 'x';
+  if (Mask & 2)
+    Result[1] = 'y';
+  if (Mask & 4)
+    Result[2] = 'z';
+  if (Mask & 8)
+    Result[3] = 'w';
+  return Result;
+}
+
+static void printColumnHeader(raw_ostream &OS, size_t Length) {
+  for (size_t I = 0; I < Length; ++I)
+    OS << "-";
+}
+
+static void printColumnHeaders(raw_ostream &OS, ArrayRef<size_t> Lengths) {
+  for (auto L : Lengths) {
+    printColumnHeader(OS, L);
+    OS << " ";
+  }
+  OS << "\n";
+}
+
+static size_t digitsForNumber(size_t N) {
+  return static_cast<size_t>(log10(static_cast<double>(N))) + 1;
+}
 
 namespace {
 class DXContainerDumper : public objdump::Dumper {
+  const DXContainerObjectFile &Obj;
+
 public:
-  DXContainerDumper(const object::DXContainerObjectFile &Obj)
-      : objdump::Dumper(Obj) {}
+  DXContainerDumper(const DXContainerObjectFile &O)
+      : objdump::Dumper(O), Obj(O) {}
+
+  void printPrivateHeaders() override;
+  void printSignature(const DirectX::Signature &S);
 };
+
+void DXContainerDumper::printSignature(const DirectX::Signature &S) {
+  // DXC prints a table like this as part of the shader disassembly:
+  //; Name                 Index   Mask Register SysValue  Format   Used
+  //; -------------------- ----- ------ -------- -------- ------- ------
+  //; NORMAL                   0   xyz         0     NONE   float   xyz
+  //; TEXCOORD                 0   xy          1     NONE   float   xy
+
+  // DXC's implementation doesn't scale columns entirely completely for the
+  // provided input, so this implementation is a bit more complicated in
+  // formatting logic to scale with the size of the printed text.
+
+  // DXC gives names 21 characters for some unknown reason, I arbitrarily chose
+  // to start at 24 so that we're not going shorter but are using a round
+  // number.
+  size_t LongestName = 24;
+  size_t LongestSV = 10;
+  size_t LongestIndex = strlen("Index");
+  size_t LongestRegister = strlen("Register");
+  size_t LongestFormat = strlen("Format");
+  const size_t MaskWidth = 5;
+  // Compute the column widths. Skip calculating the "Mask" and "Used" columns
+  // since they both have widths of 4.
+  for (auto El : S) {
+    LongestName = std::max(LongestName, S.getName(El.NameOffset).size());
+    LongestSV = std::max(
+        LongestSV,
+        enumToStringRef(El.SystemValue, dxbc::getD3DSystemValues()).size());
+    LongestIndex = std::max(LongestIndex, digitsForNumber(El.Index));
+    LongestRegister = std::max(LongestRegister, digitsForNumber(El.Register));
+    LongestFormat = std::max(
+        LongestFormat,
+        enumToStringRef(El.CompType, dxbc::getSigComponentTypes()).size());
+  }
+
+  // Print Column headers
+  OS << "; ";
+  OS << left_justify("Name", LongestName) << " ";
+  OS << right_justify("Index", LongestIndex) << " ";
+  OS << right_justify("Mask", MaskWidth) << " ";
+  OS << right_justify("Register", LongestRegister) << " ";
+  OS << right_justify("SysValue", LongestSV) << " ";
+  OS << right_justify("Format", LongestFormat) << " ";
+  OS << right_justify("Used", MaskWidth) << "\n";
+  OS << "; ";
+  printColumnHeaders(OS, {LongestName, LongestIndex, MaskWidth, LongestRegister,
+                          LongestSV, LongestFormat, MaskWidth});
+
+  for (auto El : S) {
+    OS << "; " << left_justify(S.getName(El.NameOffset), LongestName) << " ";
+    OS << right_justify(std::to_string(El.Index), LongestIndex) << " ";
+    OS << right_justify(maskToString(El.Mask), MaskWidth) << " ";
+    OS << right_justify(std::to_string(El.Register), LongestRegister) << " ";
+    OS << right_justify(
+              enumToStringRef(El.SystemValue, dxbc::getD3DSystemValues()),
+              LongestSV)
+       << " ";
+    OS << right_justify(
+              enumToStringRef(El.CompType, dxbc::getSigComponentTypes()),
+              LongestFormat)
+       << " ";
+    OS << right_justify(maskToString(El.ExclusiveMask), MaskWidth) << "\n";
+  }
+}
+
+void DXContainerDumper::printPrivateHeaders() {
+  const DXContainer &C =
+      cast<object::DXContainerObjectFile>(Obj).getDXContainer();
+
+  if (!C.getInputSignature().isEmpty()) {
+    OS << "; Input signature:\n;\n";
+    printSignature(C.getInputSignature());
+    OS << ";\n";
+  }
+
+  if (!C.getOutputSignature().isEmpty()) {
+    OS << "; Output signature:\n;\n";
+    printSignature(C.getOutputSignature());
+    OS << ";\n";
+  }
+
+  if (!C.getPatchConstantSignature().isEmpty()) {
+    OS << "; Patch Constant signature:\n;\n";
+    printSignature(C.getPatchConstantSignature());
+    OS << ";\n";
+  }
+}
+
 } // namespace
 
 std::unique_ptr<objdump::Dumper> llvm::objdump::createDXContainerDumper(

@llvmbot
Copy link
Member

llvmbot commented Aug 7, 2025

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

Author: Chris B (llvm-beanz)

Changes

This adds support for printing the signature sections as part of the -p flag for printing private headers.

The formatting aims to roughly match the formatting used by DXC's /dumpbin flag.

Resolves #152380.


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

3 Files Affected:

  • (modified) llvm/include/llvm/Object/DXContainer.h (+4)
  • (added) llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml (+161)
  • (modified) llvm/tools/llvm-objdump/DXContainerDump.cpp (+128-2)
diff --git a/llvm/include/llvm/Object/DXContainer.h b/llvm/include/llvm/Object/DXContainer.h
index ad1b2361ff064..8a2efe2e928b0 100644
--- a/llvm/include/llvm/Object/DXContainer.h
+++ b/llvm/include/llvm/Object/DXContainer.h
@@ -603,6 +603,10 @@ class LLVM_ABI DXContainerObjectFile : public ObjectFile {
   }
 
 public:
+  const DXContainer &getDXContainer() const {
+    return Container;
+  }
+
   static bool classof(const Binary *v) { return v->isDXContainer(); }
 
   Expected<StringRef> getSymbolName(DataRefImpl) const override;
diff --git a/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml b/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml
new file mode 100644
index 0000000000000..fbfe17149cfb5
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml
@@ -0,0 +1,161 @@
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objdump -p %t | FileCheck %s
+--- !dxcontainer
+Header:
+  Hash:            [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+                     0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
+  Version:
+    Major:           1
+    Minor:           0
+  FileSize:        630
+  PartCount:       3
+  PartOffsets:     [ 64, 124, 184 ]
+Parts:
+  - Name:            ISG1
+    Size:            52
+    Signature:
+      Parameters:
+        - Stream:          0
+          Name:            AAA_HSFoo
+          Index:           4391238    # This value forces the index column to widen
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        0
+          Mask:            7
+          ExclusiveMask:   2
+          MinPrecision:    Default
+  - Name:            OSG1
+    Size:            52
+    Signature:
+      Parameters:
+        - Stream:          0
+          Name:            SV_Position
+          Index:           0
+          SystemValue:     Position
+          CompType:        Float32
+          Register:        2147483647 # This value forces the register column to widen
+          Mask:            15
+          ExclusiveMask:   0
+          MinPrecision:    Default
+  - Name:            PSG1
+    Size:            402
+    Signature:
+      Parameters:
+        - Stream:          0
+          Name:            SV_TessFactor
+          Index:           0
+          SystemValue:     FinalQuadEdgeTessfactor  # The tessfactor forces the SysVal column to widen
+          CompType:        Float32
+          Register:        0
+          Mask:            8
+          ExclusiveMask:   8
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            BBB
+          Index:           0
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        0
+          Mask:            7
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_TessFactor
+          Index:           1
+          SystemValue:     FinalQuadEdgeTessfactor
+          CompType:        Float32
+          Register:        1
+          Mask:            8
+          ExclusiveMask:   8
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            BBB
+          Index:           1
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        1
+          Mask:            7
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_TessFactor
+          Index:           2
+          SystemValue:     FinalQuadEdgeTessfactor
+          CompType:        Float32
+          Register:        2
+          Mask:            8
+          ExclusiveMask:   8
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            BBB
+          Index:           2
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        2
+          Mask:            7
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_TessFactor
+          Index:           3
+          SystemValue:     FinalQuadEdgeTessfactor
+          CompType:        Float32
+          Register:        3
+          Mask:            8
+          ExclusiveMask:   8
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_InsideTessFactor
+          Index:           0
+          SystemValue:     FinalQuadInsideTessfactor
+          CompType:        Float32
+          Register:        4
+          Mask:            8
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            SV_InsideTessFactor
+          Index:           1
+          SystemValue:     FinalQuadInsideTessfactor
+          CompType:        Float32
+          Register:        5
+          Mask:            8
+          ExclusiveMask:   0
+          MinPrecision:    Default
+        - Stream:          0
+          Name:            AVeryLongStringThatWillForceWidening # This value forces name column to widen
+          Index:           0
+          SystemValue:     Undefined
+          CompType:        Float32
+          Register:        6
+          Mask:            15
+          ExclusiveMask:   4
+          MinPrecision:    Default
+...
+
+# CHECK: ; Input signature:
+# CHECK-NEXT: ;
+# CHECK-NEXT: ; Name                       Index  Mask Register   SysValue  Format  Used
+# CHECK-NEXT: ; ------------------------ ------- ----- -------- ---------- ------- -----
+# CHECK-NEXT: ; AAA_HSFoo                4391238  xyz         0  Undefined Float32   y
+
+# CHECK: ; Output signature:
+# CHECK-NEXT: ;
+# CHECK-NEXT: ; Name                     Index  Mask   Register   SysValue  Format  Used
+# CHECK-NEXT: ; ------------------------ ----- ----- ---------- ---------- ------- -----
+# CHECK-NEXT: ; SV_Position                  0  xyzw 2147483647   Position Float32
+
+# CHECK: ; Patch Constant signature:
+# CHECK-NEXT: ;
+# CHECK-NEXT: ; Name                                 Index  Mask Register                  SysValue  Format  Used
+# CHECK-NEXT: ; ------------------------------------ ----- ----- -------- ------------------------- ------- -----
+# CHECK-NEXT: ; SV_TessFactor                            0     w        0   FinalQuadEdgeTessfactor Float32     w
+# CHECK-NEXT: ; BBB                                      0  xyz         0                 Undefined Float32
+# CHECK-NEXT: ; SV_TessFactor                            1     w        1   FinalQuadEdgeTessfactor Float32     w
+# CHECK-NEXT: ; BBB                                      1  xyz         1                 Undefined Float32
+# CHECK-NEXT: ; SV_TessFactor                            2     w        2   FinalQuadEdgeTessfactor Float32     w
+# CHECK-NEXT: ; BBB                                      2  xyz         2                 Undefined Float32
+# CHECK-NEXT: ; SV_TessFactor                            3     w        3   FinalQuadEdgeTessfactor Float32     w
+# CHECK-NEXT: ; SV_InsideTessFactor                      0     w        4 FinalQuadInsideTessfactor Float32
+# CHECK-NEXT: ; SV_InsideTessFactor                      1     w        5 FinalQuadInsideTessfactor Float32
+# CHECK-NEXT: ; AVeryLongStringThatWillForceWidening     0  xyzw        6                 Undefined Float32    z
diff --git a/llvm/tools/llvm-objdump/DXContainerDump.cpp b/llvm/tools/llvm-objdump/DXContainerDump.cpp
index 2fb073473de53..17ae79b133a88 100644
--- a/llvm/tools/llvm-objdump/DXContainerDump.cpp
+++ b/llvm/tools/llvm-objdump/DXContainerDump.cpp
@@ -12,16 +12,142 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm-objdump.h"
+#include "llvm/BinaryFormat/DXContainer.h"
 #include "llvm/Object/DXContainer.h"
+#include "llvm/Support/ScopedPrinter.h"
 
 using namespace llvm;
+using namespace llvm::object;
+
+static llvm::SmallString<4> maskToString(uint8_t Mask) {
+  llvm::SmallString<4> Result("    ");
+  if (Mask & 1)
+    Result[0] = 'x';
+  if (Mask & 2)
+    Result[1] = 'y';
+  if (Mask & 4)
+    Result[2] = 'z';
+  if (Mask & 8)
+    Result[3] = 'w';
+  return Result;
+}
+
+static void printColumnHeader(raw_ostream &OS, size_t Length) {
+  for (size_t I = 0; I < Length; ++I)
+    OS << "-";
+}
+
+static void printColumnHeaders(raw_ostream &OS, ArrayRef<size_t> Lengths) {
+  for (auto L : Lengths) {
+    printColumnHeader(OS, L);
+    OS << " ";
+  }
+  OS << "\n";
+}
+
+static size_t digitsForNumber(size_t N) {
+  return static_cast<size_t>(log10(static_cast<double>(N))) + 1;
+}
 
 namespace {
 class DXContainerDumper : public objdump::Dumper {
+  const DXContainerObjectFile &Obj;
+
 public:
-  DXContainerDumper(const object::DXContainerObjectFile &Obj)
-      : objdump::Dumper(Obj) {}
+  DXContainerDumper(const DXContainerObjectFile &O)
+      : objdump::Dumper(O), Obj(O) {}
+
+  void printPrivateHeaders() override;
+  void printSignature(const DirectX::Signature &S);
 };
+
+void DXContainerDumper::printSignature(const DirectX::Signature &S) {
+  // DXC prints a table like this as part of the shader disassembly:
+  //; Name                 Index   Mask Register SysValue  Format   Used
+  //; -------------------- ----- ------ -------- -------- ------- ------
+  //; NORMAL                   0   xyz         0     NONE   float   xyz
+  //; TEXCOORD                 0   xy          1     NONE   float   xy
+
+  // DXC's implementation doesn't scale columns entirely completely for the
+  // provided input, so this implementation is a bit more complicated in
+  // formatting logic to scale with the size of the printed text.
+
+  // DXC gives names 21 characters for some unknown reason, I arbitrarily chose
+  // to start at 24 so that we're not going shorter but are using a round
+  // number.
+  size_t LongestName = 24;
+  size_t LongestSV = 10;
+  size_t LongestIndex = strlen("Index");
+  size_t LongestRegister = strlen("Register");
+  size_t LongestFormat = strlen("Format");
+  const size_t MaskWidth = 5;
+  // Compute the column widths. Skip calculating the "Mask" and "Used" columns
+  // since they both have widths of 4.
+  for (auto El : S) {
+    LongestName = std::max(LongestName, S.getName(El.NameOffset).size());
+    LongestSV = std::max(
+        LongestSV,
+        enumToStringRef(El.SystemValue, dxbc::getD3DSystemValues()).size());
+    LongestIndex = std::max(LongestIndex, digitsForNumber(El.Index));
+    LongestRegister = std::max(LongestRegister, digitsForNumber(El.Register));
+    LongestFormat = std::max(
+        LongestFormat,
+        enumToStringRef(El.CompType, dxbc::getSigComponentTypes()).size());
+  }
+
+  // Print Column headers
+  OS << "; ";
+  OS << left_justify("Name", LongestName) << " ";
+  OS << right_justify("Index", LongestIndex) << " ";
+  OS << right_justify("Mask", MaskWidth) << " ";
+  OS << right_justify("Register", LongestRegister) << " ";
+  OS << right_justify("SysValue", LongestSV) << " ";
+  OS << right_justify("Format", LongestFormat) << " ";
+  OS << right_justify("Used", MaskWidth) << "\n";
+  OS << "; ";
+  printColumnHeaders(OS, {LongestName, LongestIndex, MaskWidth, LongestRegister,
+                          LongestSV, LongestFormat, MaskWidth});
+
+  for (auto El : S) {
+    OS << "; " << left_justify(S.getName(El.NameOffset), LongestName) << " ";
+    OS << right_justify(std::to_string(El.Index), LongestIndex) << " ";
+    OS << right_justify(maskToString(El.Mask), MaskWidth) << " ";
+    OS << right_justify(std::to_string(El.Register), LongestRegister) << " ";
+    OS << right_justify(
+              enumToStringRef(El.SystemValue, dxbc::getD3DSystemValues()),
+              LongestSV)
+       << " ";
+    OS << right_justify(
+              enumToStringRef(El.CompType, dxbc::getSigComponentTypes()),
+              LongestFormat)
+       << " ";
+    OS << right_justify(maskToString(El.ExclusiveMask), MaskWidth) << "\n";
+  }
+}
+
+void DXContainerDumper::printPrivateHeaders() {
+  const DXContainer &C =
+      cast<object::DXContainerObjectFile>(Obj).getDXContainer();
+
+  if (!C.getInputSignature().isEmpty()) {
+    OS << "; Input signature:\n;\n";
+    printSignature(C.getInputSignature());
+    OS << ";\n";
+  }
+
+  if (!C.getOutputSignature().isEmpty()) {
+    OS << "; Output signature:\n;\n";
+    printSignature(C.getOutputSignature());
+    OS << ";\n";
+  }
+
+  if (!C.getPatchConstantSignature().isEmpty()) {
+    OS << "; Patch Constant signature:\n;\n";
+    printSignature(C.getPatchConstantSignature());
+    OS << ";\n";
+  }
+}
+
 } // namespace
 
 std::unique_ptr<objdump::Dumper> llvm::objdump::createDXContainerDumper(

Copy link

github-actions bot commented Aug 7, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

Copy link
Collaborator

@jh7370 jh7370 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This'll need someone with more experience with DirectX than me, but I've made some stylistic comments anyway.

@@ -0,0 +1,161 @@
# RUN: yaml2obj %s -o %t
# RUN: llvm-objdump -p %t | FileCheck %s
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few nits/suggestions:

  1. I'd add a blank line between the RUN and YAML lines.
  2. I'd add a brief comment at the start of the test describing the feature being tested.
  3. I'd add --match-full-lines and --strict-whitespace to the FileCheck command, to ensure the formatting matches the expected.

enumToStringRef(El.CompType, dxbc::getSigComponentTypes()).size());
}

// Print Column headers
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// Print Column headers
// Print Column headers.

OS << ";\n";
}
}

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: the namespace starts with no blank lines after the opening brace, but finishes with one before the closing one. I don't think the coding standards have a stated preferred style, but mismatching seems wrong regardless!

Copy link
Member

@hekota hekota left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

../llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml
Copy link
Collaborator

@jh7370 jh7370 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One suggestion. Otherwise, LGTM.

Comment on lines +4 to +7
# This test covers llvm-objdump printing private headers for the ISG1, OSG1, and
# PSG1 "parts" of the DX container file format. The test uses a few absurdly
# large values and long string names to ensure that the columns in the printed
# table widen correctly.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: sorry, should have said: newer llvm-objdump tests tend to use ## for comments to help distinguish them from RUN and CHECK lines.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry I missed this before merging, will put up a commit to fix this momentarily.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Posted: #153311

@llvm-beanz llvm-beanz enabled auto-merge (squash) August 12, 2025 17:48
@llvm-beanz llvm-beanz disabled auto-merge August 12, 2025 21:59
@llvm-beanz llvm-beanz merged commit 9526d3b into llvm:main Aug 12, 2025
7 of 9 checks passed
@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 12, 2025

LLVM Buildbot has detected a new failure on builder arc-builder running on arc-worker while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/3/builds/20456

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: tools/llvm-objdump/DXContainer/input-output-signatures.yaml' FAILED ********************
Exit Code: 134

Command Output (stderr):
--
/buildbot/worker/arc-folder/build/bin/yaml2obj /buildbot/worker/arc-folder/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /buildbot/worker/arc-folder/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp # RUN: at line 1
+ /buildbot/worker/arc-folder/build/bin/yaml2obj /buildbot/worker/arc-folder/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /buildbot/worker/arc-folder/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
/buildbot/worker/arc-folder/build/bin/llvm-objdump -p /buildbot/worker/arc-folder/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp | /buildbot/worker/arc-folder/build/bin/FileCheck /buildbot/worker/arc-folder/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace # RUN: at line 2
+ /buildbot/worker/arc-folder/build/bin/llvm-objdump -p /buildbot/worker/arc-folder/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
+ /buildbot/worker/arc-folder/build/bin/FileCheck /buildbot/worker/arc-folder/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace
LLVM ERROR: out of memory
Allocation failed
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /buildbot/worker/arc-folder/build/bin/FileCheck /buildbot/worker/arc-folder/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  FileCheck       0x0000000000481dc8
1  FileCheck       0x000000000047f205
2  libpthread.so.0 0x00007f2245e00630
3  libc.so.6       0x00007f2244b503d7 gsignal + 55
4  libc.so.6       0x00007f2244b51ac8 abort + 328
5  FileCheck       0x000000000044fe72
6  FileCheck       0x00000000004555ee
7  FileCheck       0x0000000000455e22
8  FileCheck       0x000000000047b2eb
9  FileCheck       0x0000000000452021
10 FileCheck       0x0000000000452241
11 FileCheck       0x0000000000453088
12 FileCheck       0x000000000040673d
13 libc.so.6       0x00007f2244b3c555 __libc_start_main + 245
14 FileCheck       0x00000000004083ae
/buildbot/worker/arc-folder/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.script: line 2: 13781 Broken pipe             /buildbot/worker/arc-folder/build/bin/llvm-objdump -p /buildbot/worker/arc-folder/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
     13782 Aborted                 | /buildbot/worker/arc-folder/build/bin/FileCheck /buildbot/worker/arc-folder/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace

--

********************


@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 12, 2025

LLVM Buildbot has detected a new failure on builder clang-m68k-linux-cross running on suse-gary-m68k-cross while building llvm at step 5 "ninja check 1".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/27/builds/14482

Here is the relevant piece of the build log for the reference
Step 5 (ninja check 1) failure: stage 1 checked (failure)
******************** TEST 'LLVM :: tools/llvm-objdump/DXContainer/input-output-signatures.yaml' FAILED ********************
Exit Code: 137

Command Output (stderr):
--
/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/bin/yaml2obj /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp # RUN: at line 1
+ /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/bin/yaml2obj /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/bin/llvm-objdump -p /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp | /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/bin/FileCheck /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace # RUN: at line 2
+ /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/bin/llvm-objdump -p /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
+ /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/bin/FileCheck /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace
/var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.script: line 2: 386938 Broken pipe             /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/bin/llvm-objdump -p /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
     386939 Killed                  | /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/stage1/bin/FileCheck /var/lib/buildbot/workers/suse-gary-m68k-cross/clang-m68k-linux-cross/llvm/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace

--

********************


@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 12, 2025

LLVM Buildbot has detected a new failure on builder llvm-clang-x86_64-gcc-ubuntu running on sie-linux-worker3 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/174/builds/22678

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: tools/llvm-objdump/DXContainer/input-output-signatures.yaml' FAILED ********************
Exit Code: 137

Command Output (stderr):
--
/home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/bin/yaml2obj /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp # RUN: at line 1
+ /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/bin/yaml2obj /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
/home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/bin/llvm-objdump -p /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp | /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/bin/FileCheck /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace # RUN: at line 2
+ /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/bin/FileCheck /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace
+ /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/bin/llvm-objdump -p /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
/home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.script: line 2: 3310179 Broken pipe             /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/bin/llvm-objdump -p /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
     3310181 Killed                  | /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/build/bin/FileCheck /home/buildbot/buildbot-root/llvm-clang-x86_64-gcc-ubuntu/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace

--

********************


@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 12, 2025

LLVM Buildbot has detected a new failure on builder llvm-clang-aarch64-darwin running on doug-worker-4 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/190/builds/25296

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: tools/llvm-objdump/DXContainer/input-output-signatures.yaml' FAILED ********************
Exit Code: 1

Command Output (stderr):
--
/Users/buildbot/buildbot-root/aarch64-darwin/build/bin/yaml2obj /Users/buildbot/buildbot-root/aarch64-darwin/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /Users/buildbot/buildbot-root/aarch64-darwin/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp # RUN: at line 1
+ /Users/buildbot/buildbot-root/aarch64-darwin/build/bin/yaml2obj /Users/buildbot/buildbot-root/aarch64-darwin/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /Users/buildbot/buildbot-root/aarch64-darwin/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
/Users/buildbot/buildbot-root/aarch64-darwin/build/bin/llvm-objdump -p /Users/buildbot/buildbot-root/aarch64-darwin/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp | /Users/buildbot/buildbot-root/aarch64-darwin/build/bin/FileCheck /Users/buildbot/buildbot-root/aarch64-darwin/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace # RUN: at line 2
+ /Users/buildbot/buildbot-root/aarch64-darwin/build/bin/llvm-objdump -p /Users/buildbot/buildbot-root/aarch64-darwin/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
+ /Users/buildbot/buildbot-root/aarch64-darwin/build/bin/FileCheck /Users/buildbot/buildbot-root/aarch64-darwin/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace
�[1m/Users/buildbot/buildbot-root/aarch64-darwin/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml:142:9: �[0m�[0;1;31merror: �[0m�[1mCHECK: expected string not found in input
�[0m# CHECK: ; Input signature:
�[0;1;32m        ^
�[0m�[1m<stdin>:1:1: �[0m�[0;1;30mnote: �[0m�[1mscanning from here
�[0m
�[0;1;32m^
�[0m�[1m<stdin>:3:1: �[0m�[0;1;30mnote: �[0m�[1mpossible intended match here
�[0m; Input signature:
�[0;1;32m^
�[0m
Input file: <stdin>
Check file: /Users/buildbot/buildbot-root/aarch64-darwin/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml

-dump-input=help explains the following input dump.

Input was:
<<<<<<
�[1m�[0m�[0;1;30m             1: �[0m�[1m�[0;1;46m �[0m
�[0;1;31mcheck:142'0     X error: no match found
�[0m�[0;1;30m             2: �[0m�[1m�[0;1;46m:	file format directx container �[0m
�[0;1;31mcheck:142'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
�[0m�[0;1;30m             3: �[0m�[1m�[0;1;46m; Input signature: �[0m
�[0;1;31mcheck:142'0     ~~~~~~~~~~~~~~~~~~~
�[0m�[0;1;35mcheck:142'1     ?                   possible intended match
�[0m�[0;1;30m             4: �[0m�[1m�[0;1;46m; �[0m
�[0;1;31mcheck:142'0     ~~
�[0m�[0;1;30m             5: �[0m�[1m�[0;1;46m; Name                       Index  Mask Register   SysValue  Format  Used �[0m
�[0;1;31mcheck:142'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
�[0m�[0;1;30m             6: �[0m�[1m�[0;1;46m; ------------------------ ------- ----- -------- ---------- ------- -----  �[0m
�[0;1;31mcheck:142'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
�[0m�[0;1;30m             7: �[0m�[1m�[0;1;46m; AAA_HSFoo                4391238  xyz         0  Undefined Float32   y   �[0m
�[0;1;31mcheck:142'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
�[0m�[0;1;30m             8: �[0m�[1m�[0;1;46m; �[0m
�[0;1;31mcheck:142'0     ~~
�[0m�[0;1;30m             9: �[0m�[1m�[0;1;46m; Output signature: �[0m
�[0;1;31mcheck:142'0     ~~~~~~~~~~~~~~~~~~~~
�[0m�[0;1;30m            10: �[0m�[1m�[0;1;46m; �[0m
�[0;1;31mcheck:142'0     ~~
�[0m�[0;1;30m            11: �[0m�[1m�[0;1;46m; Name                     Index  Mask   Register   SysValue  Format  Used �[0m
�[0;1;31mcheck:142'0     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...

@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 12, 2025

LLVM Buildbot has detected a new failure on builder llvm-clang-x86_64-sie-ubuntu-fast running on sie-linux-worker while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/144/builds/32642

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: tools/llvm-objdump/DXContainer/input-output-signatures.yaml' FAILED ********************
Exit Code: 137

Command Output (stderr):
--
/home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/bin/yaml2obj /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp # RUN: at line 1
+ /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/bin/yaml2obj /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
/home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/bin/llvm-objdump -p /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp | /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/bin/FileCheck /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace # RUN: at line 2
+ /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/bin/llvm-objdump -p /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
+ /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/bin/FileCheck /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace
/home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.script: line 2: 677488 Broken pipe             /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/bin/llvm-objdump -p /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
     677490 Killed                  | /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/build/bin/FileCheck /home/buildbot/buildbot-root/llvm-clang-x86_64-sie-ubuntu-fast/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace

--

********************


llvm-beanz added a commit to llvm-beanz/llvm-project that referenced this pull request Aug 12, 2025
This addresses feedback on PR llvm#152531 which I missed before merging.

../llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml
llvm-beanz added a commit that referenced this pull request Aug 12, 2025
@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 12, 2025

LLVM Buildbot has detected a new failure on builder ml-opt-dev-x86-64 running on ml-opt-dev-x86-64-b1 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/137/builds/23427

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: tools/llvm-objdump/DXContainer/input-output-signatures.yaml' FAILED ********************
Exit Code: 137

Command Output (stderr):
--
/b/ml-opt-dev-x86-64-b1/build/bin/yaml2obj /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /b/ml-opt-dev-x86-64-b1/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp # RUN: at line 1
+ /b/ml-opt-dev-x86-64-b1/build/bin/yaml2obj /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml -o /b/ml-opt-dev-x86-64-b1/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
/b/ml-opt-dev-x86-64-b1/build/bin/llvm-objdump -p /b/ml-opt-dev-x86-64-b1/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp | /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace # RUN: at line 2
+ /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace
+ /b/ml-opt-dev-x86-64-b1/build/bin/llvm-objdump -p /b/ml-opt-dev-x86-64-b1/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
/b/ml-opt-dev-x86-64-b1/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.script: line 2: 412564 Broken pipe             /b/ml-opt-dev-x86-64-b1/build/bin/llvm-objdump -p /b/ml-opt-dev-x86-64-b1/build/test/tools/llvm-objdump/DXContainer/Output/input-output-signatures.yaml.tmp
     412565 Killed                  | /b/ml-opt-dev-x86-64-b1/build/bin/FileCheck /b/ml-opt-dev-x86-64-b1/llvm-project/llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml --match-full-lines --strict-whitespace

--

********************


@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 12, 2025

LLVM Buildbot has detected a new failure on builder ml-opt-rel-x86-64 running on ml-opt-rel-x86-64-b1 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/185/builds/23282

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-all) failure: 1200 seconds without output running [b'ninja', b'check-all'], attempting to kill
...
PASS: lit :: allow-retries.py (59622 of 59632)
PASS: LLVM-Unit :: Support/./SupportTests/15/24 (59623 of 59632)
PASS: LLVM-Unit :: Support/./SupportTests/16/24 (59624 of 59632)
PASS: lit :: selecting.py (59625 of 59632)
PASS: lit :: max-time.py (59626 of 59632)
PASS: lit :: shtest-shell.py (59627 of 59632)
PASS: lit :: shtest-define.py (59628 of 59632)
PASS: LLVM-Unit :: Support/./SupportTests/14/24 (59629 of 59632)
PASS: LLVM :: tools/llvm-reduce/parallel-workitem-kill.ll (59630 of 59632)
PASS: mlgo-utils :: pytype.test (59631 of 59632)
command timed out: 1200 seconds without output running [b'ninja', b'check-all'], attempting to kill
process killed by signal 9
program finished with exit code -1
elapsedTime=1593.548863

llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Aug 12, 2025
@llvm-ci
Copy link
Collaborator

llvm-ci commented Aug 12, 2025

LLVM Buildbot has detected a new failure on builder ml-opt-devrel-x86-64 running on ml-opt-devrel-x86-64-b2 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/175/builds/23280

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-all) failure: 1200 seconds without output running [b'ninja', b'check-all'], attempting to kill
...
PASS: lit :: allow-retries.py (59622 of 59632)
PASS: LLVM-Unit :: Support/./SupportTests/15/24 (59623 of 59632)
PASS: LLVM-Unit :: Support/./SupportTests/16/24 (59624 of 59632)
PASS: lit :: selecting.py (59625 of 59632)
PASS: lit :: max-time.py (59626 of 59632)
PASS: lit :: shtest-shell.py (59627 of 59632)
PASS: lit :: shtest-define.py (59628 of 59632)
PASS: LLVM-Unit :: Support/./SupportTests/14/24 (59629 of 59632)
PASS: LLVM :: tools/llvm-reduce/parallel-workitem-kill.ll (59630 of 59632)
PASS: mlgo-utils :: pytype.test (59631 of 59632)
command timed out: 1200 seconds without output running [b'ninja', b'check-all'], attempting to kill
process killed by signal 9
program finished with exit code -1
elapsedTime=1577.901873

llvm-beanz added a commit to llvm-beanz/llvm-project that referenced this pull request Aug 13, 2025
This adds support for printing the signature sections as part of the
`-p` flag for printing private headers.

The formatting aims to roughly match the formatting used by DXC's
`/dumpbin` flag.

Resolves llvm#152380.

../llvm/test/tools/llvm-objdump/DXContainer/input-output-signatures.yaml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[DirectX][objdump] Support for dumping shader signature parts
6 participants