Skip to content

[llvm-readobj] Add a reusable LLVMReadobjDriver library - #222917

Open
anutosh491 wants to merge 1 commit into
llvm:mainfrom
anutosh491:wasmbolt-readobj-driver
Open

[llvm-readobj] Add a reusable LLVMReadobjDriver library#222917
anutosh491 wants to merge 1 commit into
llvm:mainfrom
anutosh491:wasmbolt-readobj-driver

Conversation

@anutosh491

@anutosh491 anutosh491 commented Sep 11, 2026

Copy link
Copy Markdown
Member

Please read: RFC: Embeddable LLVM tool drivers for long-lived hosts

This follows the same direction as the recent LLVMLlcDriver and LLVMOptDriver changes. See #221896 & #222840

llvm-readobj already exposes its implementation through llvm_readobj_main, but the implementation is currently compiled directly into the standalone executable. This patch moves that implementation into a reusable LLVMReadobjDriver library and keeps the generated command-line wrapper as a thin executable linked against it.

The immediate consumer is WasmBolt (try here), which runs LLVM tools repeatedly inside one long-lived WebAssembly process. I have tested the real llvm-readobj implementation in the browser with file headers, sections, symbols and relocations on WebAssembly object files.

image

@llvmorg-github-actions llvmorg-github-actions Bot added bazel "Peripheral" support tier build system: utils/bazel llvm:binary-utilities labels Sep 11, 2026
@llvmorg-github-actions

Copy link
Copy Markdown

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

Author: Anutosh Bhat (anutosh491)

Changes

Please read: RFC: Embeddable LLVM tool drivers for long-lived hosts

This follows the same direction as the recent LLVMLlcDriver and LLVMOptDriver changes. See #221896 & #222840

llvm-readobj already exposes its implementation through llvm_readobj_main, but the implementation is currently compiled directly into the standalone executable. This patch moves that implementation into a reusable LLVMReadobjDriver library and keeps the generated command-line wrapper as a thin executable linked against it.

The immediate consumer is WasmBolt(try here), which runs LLVM tools repeatedly inside one long-lived WebAssembly process. I have tested the real llvm-readobj implementation in the browser with file headers, sections, symbols and relocations on WebAssembly object files.

<img width="500" height="300" alt="image" src="https://github.com/user-attachments/assets/d93d15f2-6ceb-4af9-954a-d0d954421885" />


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

25 Files Affected:

  • (modified) llvm/tools/llvm-readobj/CMakeLists.txt (+3-17)
  • (renamed) llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h ()
  • (renamed) llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h ()
  • (added) llvm/tools/llvm-readobj/lib/CMakeLists.txt (+21)
  • (renamed) llvm/tools/llvm-readobj/lib/COFFDumper.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h ()
  • (renamed) llvm/tools/llvm-readobj/lib/ELFDumper.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/MachODumper.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/ObjDumper.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/ObjDumper.h ()
  • (renamed) llvm/tools/llvm-readobj/lib/Opts.td ()
  • (renamed) llvm/tools/llvm-readobj/lib/StackMapPrinter.h ()
  • (renamed) llvm/tools/llvm-readobj/lib/WasmDumper.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/Win64EHDumper.h ()
  • (renamed) llvm/tools/llvm-readobj/lib/WindowsResourceDumper.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/WindowsResourceDumper.h ()
  • (renamed) llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/llvm-readobj.cpp ()
  • (renamed) llvm/tools/llvm-readobj/lib/llvm-readobj.h ()
  • (modified) llvm/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn (+1-31)
  • (added) llvm/utils/gn/secondary/llvm/tools/llvm-readobj/lib/BUILD.gn (+35)
  • (modified) utils/bazel/llvm-project-overlay/llvm/BUILD.bazel (+5-5)
diff --git a/llvm/tools/llvm-readobj/CMakeLists.txt b/llvm/tools/llvm-readobj/CMakeLists.txt
index 0051f87b3c103..488cc1864c994 100644
--- a/llvm/tools/llvm-readobj/CMakeLists.txt
+++ b/llvm/tools/llvm-readobj/CMakeLists.txt
@@ -9,27 +9,13 @@ set(LLVM_LINK_COMPONENTS
   TargetParser
   )
 
-set(LLVM_TARGET_DEFINITIONS Opts.td)
-tablegen(LLVM Opts.inc -gen-opt-parser-defs)
-add_public_tablegen_target(ReadobjOptsTableGen)
-
 add_llvm_tool(llvm-readobj
-  ARMWinEHPrinter.cpp
-  COFFDumper.cpp
-  COFFImportDumper.cpp
-  ELFDumper.cpp
-  llvm-readobj.cpp
-  MachODumper.cpp
-  ObjDumper.cpp
-  WasmDumper.cpp
-  Win64EHDumper.cpp
-  WindowsResourceDumper.cpp
-  XCOFFDumper.cpp
-  DEPENDS
-  ReadobjOptsTableGen
   GENERATE_DRIVER
   )
 
+add_subdirectory(lib)
+target_link_libraries(llvm-readobj PRIVATE LLVMReadobjDriver)
+
 setup_host_tool(llvm-readobj LLVM_READOBJ llvm_readobj_exe llvm_readobj_target)
 
 add_llvm_tool_symlink(llvm-readelf llvm-readobj)
diff --git a/llvm/tools/llvm-readobj/ARMEHABIPrinter.h b/llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h
similarity index 100%
rename from llvm/tools/llvm-readobj/ARMEHABIPrinter.h
rename to llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h
diff --git a/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp b/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
rename to llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp
diff --git a/llvm/tools/llvm-readobj/ARMWinEHPrinter.h b/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h
similarity index 100%
rename from llvm/tools/llvm-readobj/ARMWinEHPrinter.h
rename to llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h
diff --git a/llvm/tools/llvm-readobj/lib/CMakeLists.txt b/llvm/tools/llvm-readobj/lib/CMakeLists.txt
new file mode 100644
index 0000000000000..a779934e61a8c
--- /dev/null
+++ b/llvm/tools/llvm-readobj/lib/CMakeLists.txt
@@ -0,0 +1,21 @@
+set(LLVM_TARGET_DEFINITIONS Opts.td)
+tablegen(LLVM Opts.inc -gen-opt-parser-defs)
+add_public_tablegen_target(ReadobjOptsTableGen)
+
+add_llvm_library(LLVMReadobjDriver
+  STATIC
+  ARMWinEHPrinter.cpp
+  COFFDumper.cpp
+  COFFImportDumper.cpp
+  ELFDumper.cpp
+  llvm-readobj.cpp
+  MachODumper.cpp
+  ObjDumper.cpp
+  WasmDumper.cpp
+  Win64EHDumper.cpp
+  WindowsResourceDumper.cpp
+  XCOFFDumper.cpp
+
+  DEPENDS
+  ReadobjOptsTableGen
+  )
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/lib/COFFDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/COFFDumper.cpp
rename to llvm/tools/llvm-readobj/lib/COFFDumper.cpp
diff --git a/llvm/tools/llvm-readobj/COFFImportDumper.cpp b/llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/COFFImportDumper.cpp
rename to llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp
diff --git a/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h b/llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h
similarity index 100%
rename from llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
rename to llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/lib/ELFDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/ELFDumper.cpp
rename to llvm/tools/llvm-readobj/lib/ELFDumper.cpp
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/lib/MachODumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/MachODumper.cpp
rename to llvm/tools/llvm-readobj/lib/MachODumper.cpp
diff --git a/llvm/tools/llvm-readobj/ObjDumper.cpp b/llvm/tools/llvm-readobj/lib/ObjDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/ObjDumper.cpp
rename to llvm/tools/llvm-readobj/lib/ObjDumper.cpp
diff --git a/llvm/tools/llvm-readobj/ObjDumper.h b/llvm/tools/llvm-readobj/lib/ObjDumper.h
similarity index 100%
rename from llvm/tools/llvm-readobj/ObjDumper.h
rename to llvm/tools/llvm-readobj/lib/ObjDumper.h
diff --git a/llvm/tools/llvm-readobj/Opts.td b/llvm/tools/llvm-readobj/lib/Opts.td
similarity index 100%
rename from llvm/tools/llvm-readobj/Opts.td
rename to llvm/tools/llvm-readobj/lib/Opts.td
diff --git a/llvm/tools/llvm-readobj/StackMapPrinter.h b/llvm/tools/llvm-readobj/lib/StackMapPrinter.h
similarity index 100%
rename from llvm/tools/llvm-readobj/StackMapPrinter.h
rename to llvm/tools/llvm-readobj/lib/StackMapPrinter.h
diff --git a/llvm/tools/llvm-readobj/WasmDumper.cpp b/llvm/tools/llvm-readobj/lib/WasmDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/WasmDumper.cpp
rename to llvm/tools/llvm-readobj/lib/WasmDumper.cpp
diff --git a/llvm/tools/llvm-readobj/Win64EHDumper.cpp b/llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/Win64EHDumper.cpp
rename to llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp
diff --git a/llvm/tools/llvm-readobj/Win64EHDumper.h b/llvm/tools/llvm-readobj/lib/Win64EHDumper.h
similarity index 100%
rename from llvm/tools/llvm-readobj/Win64EHDumper.h
rename to llvm/tools/llvm-readobj/lib/Win64EHDumper.h
diff --git a/llvm/tools/llvm-readobj/WindowsResourceDumper.cpp b/llvm/tools/llvm-readobj/lib/WindowsResourceDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/WindowsResourceDumper.cpp
rename to llvm/tools/llvm-readobj/lib/WindowsResourceDumper.cpp
diff --git a/llvm/tools/llvm-readobj/WindowsResourceDumper.h b/llvm/tools/llvm-readobj/lib/WindowsResourceDumper.h
similarity index 100%
rename from llvm/tools/llvm-readobj/WindowsResourceDumper.h
rename to llvm/tools/llvm-readobj/lib/WindowsResourceDumper.h
diff --git a/llvm/tools/llvm-readobj/XCOFFDumper.cpp b/llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/XCOFFDumper.cpp
rename to llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/lib/llvm-readobj.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/llvm-readobj.cpp
rename to llvm/tools/llvm-readobj/lib/llvm-readobj.cpp
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.h b/llvm/tools/llvm-readobj/lib/llvm-readobj.h
similarity index 100%
rename from llvm/tools/llvm-readobj/llvm-readobj.h
rename to llvm/tools/llvm-readobj/lib/llvm-readobj.h
diff --git a/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn b/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn
index 2fd748e40bebc..f7b93a4c0c6b0 100644
--- a/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn
@@ -1,13 +1,7 @@
 import("//llvm/tools/binutils_symlinks.gni")
-import("//llvm/utils/TableGen/tablegen.gni")
 import("//llvm/utils/gn/build/driver_executable.gni")
 import("//llvm/utils/gn/build/symlink_or_copy.gni")
 
-tablegen("Opts") {
-  visibility = [ ":llvm-readobj" ]
-  args = [ "-gen-opt-parser-defs" ]
-}
-
 symlinks = [ "llvm-readelf" ]
 if (llvm_install_binutils_symlinks) {
   symlinks += [ "readelf" ]
@@ -29,29 +23,5 @@ group("symlinks") {
 }
 
 driver_executable("llvm-readobj") {
-  deps = [
-    ":Opts",
-    "//llvm/lib/BinaryFormat",
-    "//llvm/lib/DebugInfo/CodeView",
-    "//llvm/lib/DebugInfo/DWARF",
-    "//llvm/lib/DebugInfo/MSF",
-    "//llvm/lib/DebugInfo/PDB",
-    "//llvm/lib/Object",
-    "//llvm/lib/Option",
-    "//llvm/lib/Support",
-    "//llvm/lib/TargetParser",
-  ]
-  sources = [
-    "ARMWinEHPrinter.cpp",
-    "COFFDumper.cpp",
-    "COFFImportDumper.cpp",
-    "ELFDumper.cpp",
-    "MachODumper.cpp",
-    "ObjDumper.cpp",
-    "WasmDumper.cpp",
-    "Win64EHDumper.cpp",
-    "WindowsResourceDumper.cpp",
-    "XCOFFDumper.cpp",
-    "llvm-readobj.cpp",
-  ]
+  deps = [ "lib" ]
 }
diff --git a/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/lib/BUILD.gn b/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/lib/BUILD.gn
new file mode 100644
index 0000000000000..e34ad76f1f18c
--- /dev/null
+++ b/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/lib/BUILD.gn
@@ -0,0 +1,35 @@
+import("//llvm/utils/TableGen/tablegen.gni")
+
+tablegen("Opts") {
+  visibility = [ ":lib" ]
+  args = [ "-gen-opt-parser-defs" ]
+}
+
+static_library("lib") {
+  output_name = "LLVMReadobjDriver"
+  deps = [
+    ":Opts",
+    "//llvm/lib/BinaryFormat",
+    "//llvm/lib/DebugInfo/CodeView",
+    "//llvm/lib/DebugInfo/DWARF",
+    "//llvm/lib/DebugInfo/MSF",
+    "//llvm/lib/DebugInfo/PDB",
+    "//llvm/lib/Object",
+    "//llvm/lib/Option",
+    "//llvm/lib/Support",
+    "//llvm/lib/TargetParser",
+  ]
+  sources = [
+    "ARMWinEHPrinter.cpp",
+    "COFFDumper.cpp",
+    "COFFImportDumper.cpp",
+    "ELFDumper.cpp",
+    "MachODumper.cpp",
+    "ObjDumper.cpp",
+    "WasmDumper.cpp",
+    "Win64EHDumper.cpp",
+    "WindowsResourceDumper.cpp",
+    "XCOFFDumper.cpp",
+    "llvm-readobj.cpp",
+  ]
+}
diff --git a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
index 225c77c6775c1..2cda2d1082cdc 100644
--- a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
@@ -6315,18 +6315,18 @@ binary_alias(
 
 gentbl_cc_library(
     name = "ReadobjOptsTableGen",
-    strip_include_prefix = "tools/llvm-readobj",
-    tbl_outs = {"tools/llvm-readobj/Opts.inc": ["-gen-opt-parser-defs"]},
+    strip_include_prefix = "tools/llvm-readobj/lib",
+    tbl_outs = {"tools/llvm-readobj/lib/Opts.inc": ["-gen-opt-parser-defs"]},
     tblgen = ":llvm-tblgen",
-    td_file = "tools/llvm-readobj/Opts.td",
+    td_file = "tools/llvm-readobj/lib/Opts.td",
     deps = [":OptParserTdFiles"],
 )
 
 cc_library(
     name = "llvm-readobj-lib",
     srcs = glob([
-        "tools/llvm-readobj/*.cpp",
-        "tools/llvm-readobj/*.h",
+        "tools/llvm-readobj/lib/*.cpp",
+        "tools/llvm-readobj/lib/*.h",
     ]),
     copts = llvm_copts,
     deps = [

@github-actions

github-actions Bot commented Sep 11, 2026

Copy link
Copy Markdown

⚠️ C/C++ code formatter, clang-format found issues in your code. ⚠️

You can test this locally with the following command:
git-clang-format --diff origin/main HEAD --extensions cpp,h -- llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h llvm/tools/llvm-readobj/lib/COFFDumper.cpp llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h llvm/tools/llvm-readobj/lib/ELFDumper.cpp llvm/tools/llvm-readobj/lib/MachODumper.cpp llvm/tools/llvm-readobj/lib/ObjDumper.cpp llvm/tools/llvm-readobj/lib/ObjDumper.h llvm/tools/llvm-readobj/lib/StackMapPrinter.h llvm/tools/llvm-readobj/lib/WasmDumper.cpp llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp llvm/tools/llvm-readobj/lib/Win64EHDumper.h llvm/tools/llvm-readobj/lib/WindowsResourceDumper.cpp llvm/tools/llvm-readobj/lib/WindowsResourceDumper.h llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp llvm/tools/llvm-readobj/lib/llvm-readobj.cpp llvm/tools/llvm-readobj/lib/llvm-readobj.h --diff_from_common_commit

⚠️
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing origin/main to the base branch/commit you want to compare against.
⚠️

View the diff from clang-format here.
diff --git a/llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h b/llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h
index 5f3cc7dcb..26a2560a2 100644
--- a/llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h
+++ b/llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h
@@ -1,4 +1,5 @@
-//===--- ARMEHABIPrinter.h - ARM EHABI Unwind Information Printer ----------===//
+//===--- ARMEHABIPrinter.h - ARM EHABI Unwind Information Printer
+//----------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -112,9 +113,8 @@ inline void OpcodeDecoder::Decode_1000iiii_iiiiiiii(const uint8_t *Opcodes,
   uint8_t Opcode1 = Opcodes[OI++ ^ 3];
 
   uint16_t GPRMask = (Opcode1 << 4) | ((Opcode0 & 0x0f) << 12);
-  SW.startLine()
-    << format("0x%02X 0x%02X ; %s",
-              Opcode0, Opcode1, GPRMask ? "pop " : "refuse to unwind");
+  SW.startLine() << format("0x%02X 0x%02X ; %s", Opcode0, Opcode1,
+                           GPRMask ? "pop " : "refuse to unwind");
   if (GPRMask)
     PrintGPR(GPRMask);
   OS << '\n';
@@ -132,7 +132,8 @@ inline void OpcodeDecoder::Decode_10011111(const uint8_t *Opcodes,
 inline void OpcodeDecoder::Decode_1001nnnn(const uint8_t *Opcodes,
                                            unsigned &OI) {
   uint8_t Opcode = Opcodes[OI++ ^ 3];
-  SW.startLine() << format("0x%02X      ; vsp = r%u\n", Opcode, (Opcode & 0x0f));
+  SW.startLine() << format("0x%02X      ; vsp = r%u\n", Opcode,
+                           (Opcode & 0x0f));
 }
 inline void OpcodeDecoder::Decode_10100nnn(const uint8_t *Opcodes,
                                            unsigned &OI) {
@@ -170,7 +171,9 @@ inline void OpcodeDecoder::Decode_10110010_uleb128(const uint8_t *Opcodes,
   SW.startLine() << format("0x%02X ", Opcode);
 
   SmallVector<uint8_t, 4> ULEB;
-  do { ULEB.push_back(Opcodes[OI ^ 3]); } while (Opcodes[OI++ ^ 3] & 0x80);
+  do {
+    ULEB.push_back(Opcodes[OI ^ 3]);
+  } while (Opcodes[OI++ ^ 3] & 0x80);
 
   for (unsigned BI = 0, BE = ULEB.size(); BI != BE; ++BI)
     OS << format("0x%02X ", ULEB[BI]);
@@ -218,11 +221,11 @@ inline void OpcodeDecoder::Decode_11000111_0000iiii(const uint8_t *Opcodes,
                                                     unsigned &OI) {
   uint8_t Opcode0 = Opcodes[OI++ ^ 3];
   uint8_t Opcode1 = Opcodes[OI++ ^ 3];
-  SW.startLine()
-    << format("0x%02X 0x%02X ; %s", Opcode0, Opcode1,
-              ((Opcode1 & 0xf0) || Opcode1 == 0x00) ? "spare" : "pop ");
+  SW.startLine() << format("0x%02X 0x%02X ; %s", Opcode0, Opcode1,
+                           ((Opcode1 & 0xf0) || Opcode1 == 0x00) ? "spare"
+                                                                 : "pop ");
   if ((Opcode1 & 0xf0) == 0x00 && Opcode1)
-      PrintRegisters(Opcode1 & 0x0f, "wCGR");
+    PrintRegisters(Opcode1 & 0x0f, "wCGR");
   OS << '\n';
 }
 inline void OpcodeDecoder::Decode_11001000_sssscccc(const uint8_t *Opcodes,
@@ -272,9 +275,8 @@ inline void OpcodeDecoder::Decode_11xxxyyy(const uint8_t *Opcodes,
 
 inline void OpcodeDecoder::PrintGPR(uint16_t GPRMask) {
   static const char *GPRRegisterNames[16] = {
-    "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
-    "fp", "ip", "sp", "lr", "pc"
-  };
+      "r0", "r1", "r2",  "r3", "r4", "r5", "r6", "r7",
+      "r8", "r9", "r10", "fp", "ip", "sp", "lr", "pc"};
 
   OS << '{';
   bool Comma = false;
@@ -305,7 +307,7 @@ inline void OpcodeDecoder::PrintRegisters(uint32_t VFPMask, StringRef Prefix) {
 
 inline void OpcodeDecoder::Decode(const uint8_t *Opcodes, off_t Offset,
                                   size_t Length) {
-  for (unsigned OCI = Offset; OCI < Length + Offset; ) {
+  for (unsigned OCI = Offset; OCI < Length + Offset;) {
     bool Decoded = false;
     for (const auto &RE : ring()) {
       if ((Opcodes[OCI ^ 3] & RE.Mask) == RE.Value) {
@@ -319,8 +321,7 @@ inline void OpcodeDecoder::Decode(const uint8_t *Opcodes, off_t Offset,
   }
 }
 
-template <typename ET>
-class PrinterContext {
+template <typename ET> class PrinterContext {
   typedef typename ET::Sym Elf_Sym;
   typedef typename ET::Shdr Elf_Shdr;
   typedef typename ET::Rel Elf_Rel;
@@ -337,7 +338,7 @@ class PrinterContext {
   static uint64_t PREL31(uint32_t Address, uint32_t Place) {
     uint64_t Location = Address & 0x7fffffff;
     if (Location & 0x40000000)
-      Location |= (uint64_t) ~0x7fffffff;
+      Location |= (uint64_t)~0x7fffffff;
     return Location + Place;
   }
 
@@ -360,8 +361,7 @@ public:
   void PrintUnwindInformation() const;
 };
 
-template <typename ET>
-const size_t PrinterContext<ET>::IndexTableEntrySize = 8;
+template <typename ET> const size_t PrinterContext<ET>::IndexTableEntrySize = 8;
 
 template <typename ET>
 ErrorOr<StringRef> PrinterContext<ET>::FunctionAtAddress(
@@ -475,7 +475,8 @@ void PrinterContext<ET>::PrintExceptionTable(const Elf_Shdr &EHT,
   /// |  more personality routine data   |
 
   const support::ulittle32_t Word =
-    *reinterpret_cast<const support::ulittle32_t *>(Contents->data() + TableEntryOffset);
+      *reinterpret_cast<const support::ulittle32_t *>(Contents->data() +
+                                                      TableEntryOffset);
 
   if (Word & 0x80000000) {
     SW.printString("Model", StringRef("Compact"));
@@ -509,8 +510,8 @@ void PrinterContext<ET>::PrintExceptionTable(const Elf_Shdr &EHT,
 }
 
 template <typename ET>
-void PrinterContext<ET>::PrintOpcodes(const uint8_t *Entry,
-                                      size_t Length, off_t Offset) const {
+void PrinterContext<ET>::PrintOpcodes(const uint8_t *Entry, size_t Length,
+                                      off_t Offset) const {
   ListScope OCC(SW, "Opcodes");
   OpcodeDecoder(SW).Decode(Entry, Offset, Length);
 }
@@ -534,7 +535,7 @@ void PrinterContext<ET>::PrintIndexTable(unsigned SectionIndex,
   ///     frames cannot be unwound
 
   const support::ulittle32_t *Data =
-    reinterpret_cast<const support::ulittle32_t *>(Contents->data());
+      reinterpret_cast<const support::ulittle32_t *>(Contents->data());
   const unsigned Entries = IT->sh_size / IndexTableEntrySize;
   const bool IsRelocatable = ELF.getHeader().e_type == ELF::ET_REL;
 
@@ -543,9 +544,9 @@ void PrinterContext<ET>::PrintIndexTable(unsigned SectionIndex,
     DictScope E(SW, "Entry");
 
     const support::ulittle32_t Word0 =
-      Data[Entry * (IndexTableEntrySize / sizeof(*Data)) + 0];
+        Data[Entry * (IndexTableEntrySize / sizeof(*Data)) + 0];
     const support::ulittle32_t Word1 =
-      Data[Entry * (IndexTableEntrySize / sizeof(*Data)) + 1];
+        Data[Entry * (IndexTableEntrySize / sizeof(*Data)) + 1];
 
     if (Word0 & 0x80000000) {
       errs() << "corrupt unwind data in section " << SectionIndex << "\n";
@@ -620,8 +621,7 @@ void PrinterContext<ET>::PrintIndexTable(unsigned SectionIndex,
   }
 }
 
-template <typename ET>
-void PrinterContext<ET>::PrintUnwindInformation() const {
+template <typename ET> void PrinterContext<ET>::PrintUnwindInformation() const {
   DictScope UI(SW, "UnwindInformation");
 
   int SectionIndex = 0;
@@ -640,8 +640,8 @@ void PrinterContext<ET>::PrintUnwindInformation() const {
     ++SectionIndex;
   }
 }
-}
-}
-}
+} // namespace EHABI
+} // namespace ARM
+} // namespace llvm
 
 #endif
diff --git a/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp b/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp
index 32e3d059f..8b0c7ef70 100644
--- a/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp
+++ b/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp
@@ -89,7 +89,7 @@ raw_ostream &operator<<(raw_ostream &OS, const ARM::WinEH::ReturnType &RT) {
   }
   return OS;
 }
-}
+} // namespace llvm
 
 static std::string formatSymbol(StringRef Name, uint64_t Address,
                                 uint64_t Offset = 0) {
@@ -116,31 +116,32 @@ const size_t Decoder::PDataEntrySize = sizeof(RuntimeFunction);
 
 // TODO name the uops more appropriately
 const Decoder::RingEntry Decoder::Ring[] = {
-  { 0x80, 0x00, 1, &Decoder::opcode_0xxxxxxx },  // UOP_STACK_FREE (16-bit)
-  { 0xc0, 0x80, 2, &Decoder::opcode_10Lxxxxx },  // UOP_POP (32-bit)
-  { 0xf0, 0xc0, 1, &Decoder::opcode_1100xxxx },  // UOP_STACK_SAVE (16-bit)
-  { 0xf8, 0xd0, 1, &Decoder::opcode_11010Lxx },  // UOP_POP (16-bit)
-  { 0xf8, 0xd8, 1, &Decoder::opcode_11011Lxx },  // UOP_POP (32-bit)
-  { 0xf8, 0xe0, 1, &Decoder::opcode_11100xxx },  // UOP_VPOP (32-bit)
-  { 0xfc, 0xe8, 2, &Decoder::opcode_111010xx },  // UOP_STACK_FREE (32-bit)
-  { 0xfe, 0xec, 2, &Decoder::opcode_1110110L },  // UOP_POP (16-bit)
-  { 0xff, 0xee, 2, &Decoder::opcode_11101110 },  // UOP_MICROSOFT_SPECIFIC (16-bit)
-                                              // UOP_PUSH_MACHINE_FRAME
-                                              // UOP_PUSH_CONTEXT
-                                              // UOP_PUSH_TRAP_FRAME
-                                              // UOP_REDZONE_RESTORE_LR
-  { 0xff, 0xef, 2, &Decoder::opcode_11101111 },  // UOP_LDRPC_POSTINC (32-bit)
-  { 0xff, 0xf5, 2, &Decoder::opcode_11110101 },  // UOP_VPOP (32-bit)
-  { 0xff, 0xf6, 2, &Decoder::opcode_11110110 },  // UOP_VPOP (32-bit)
-  { 0xff, 0xf7, 3, &Decoder::opcode_11110111 },  // UOP_STACK_RESTORE (16-bit)
-  { 0xff, 0xf8, 4, &Decoder::opcode_11111000 },  // UOP_STACK_RESTORE (16-bit)
-  { 0xff, 0xf9, 3, &Decoder::opcode_11111001 },  // UOP_STACK_RESTORE (32-bit)
-  { 0xff, 0xfa, 4, &Decoder::opcode_11111010 },  // UOP_STACK_RESTORE (32-bit)
-  { 0xff, 0xfb, 1, &Decoder::opcode_11111011 },  // UOP_NOP (16-bit)
-  { 0xff, 0xfc, 1, &Decoder::opcode_11111100 },  // UOP_NOP (32-bit)
-  { 0xff, 0xfd, 1, &Decoder::opcode_11111101 },  // UOP_NOP (16-bit) / END
-  { 0xff, 0xfe, 1, &Decoder::opcode_11111110 },  // UOP_NOP (32-bit) / END
-  { 0xff, 0xff, 1, &Decoder::opcode_11111111 },  // UOP_END
+    {0x80, 0x00, 1, &Decoder::opcode_0xxxxxxx}, // UOP_STACK_FREE (16-bit)
+    {0xc0, 0x80, 2, &Decoder::opcode_10Lxxxxx}, // UOP_POP (32-bit)
+    {0xf0, 0xc0, 1, &Decoder::opcode_1100xxxx}, // UOP_STACK_SAVE (16-bit)
+    {0xf8, 0xd0, 1, &Decoder::opcode_11010Lxx}, // UOP_POP (16-bit)
+    {0xf8, 0xd8, 1, &Decoder::opcode_11011Lxx}, // UOP_POP (32-bit)
+    {0xf8, 0xe0, 1, &Decoder::opcode_11100xxx}, // UOP_VPOP (32-bit)
+    {0xfc, 0xe8, 2, &Decoder::opcode_111010xx}, // UOP_STACK_FREE (32-bit)
+    {0xfe, 0xec, 2, &Decoder::opcode_1110110L}, // UOP_POP (16-bit)
+    {0xff, 0xee, 2,
+     &Decoder::opcode_11101110}, // UOP_MICROSOFT_SPECIFIC (16-bit)
+                                 // UOP_PUSH_MACHINE_FRAME
+                                 // UOP_PUSH_CONTEXT
+                                 // UOP_PUSH_TRAP_FRAME
+                                 // UOP_REDZONE_RESTORE_LR
+    {0xff, 0xef, 2, &Decoder::opcode_11101111}, // UOP_LDRPC_POSTINC (32-bit)
+    {0xff, 0xf5, 2, &Decoder::opcode_11110101}, // UOP_VPOP (32-bit)
+    {0xff, 0xf6, 2, &Decoder::opcode_11110110}, // UOP_VPOP (32-bit)
+    {0xff, 0xf7, 3, &Decoder::opcode_11110111}, // UOP_STACK_RESTORE (16-bit)
+    {0xff, 0xf8, 4, &Decoder::opcode_11111000}, // UOP_STACK_RESTORE (16-bit)
+    {0xff, 0xf9, 3, &Decoder::opcode_11111001}, // UOP_STACK_RESTORE (32-bit)
+    {0xff, 0xfa, 4, &Decoder::opcode_11111010}, // UOP_STACK_RESTORE (32-bit)
+    {0xff, 0xfb, 1, &Decoder::opcode_11111011}, // UOP_NOP (16-bit)
+    {0xff, 0xfc, 1, &Decoder::opcode_11111100}, // UOP_NOP (32-bit)
+    {0xff, 0xfd, 1, &Decoder::opcode_11111101}, // UOP_NOP (16-bit) / END
+    {0xff, 0xfe, 1, &Decoder::opcode_11111110}, // UOP_NOP (32-bit) / END
+    {0xff, 0xff, 1, &Decoder::opcode_11111111}, // UOP_END
 };
 
 // Unwind opcodes for ARM64.
@@ -329,10 +330,9 @@ ErrorOr<SymbolRef> Decoder::getSymbolForLocation(
 bool Decoder::opcode_0xxxxxxx(const uint8_t *OC, unsigned &Offset,
                               unsigned Length, bool Prologue) {
   uint8_t Imm = OC[Offset] & 0x7f;
-  SW.startLine() << format("0x%02x                ; %s sp, #(%u * 4)\n",
-                           OC[Offset],
-                           static_cast<const char *>(Prologue ? "sub" : "add"),
-                           Imm);
+  SW.startLine() << format(
+      "0x%02x                ; %s sp, #(%u * 4)\n", OC[Offset],
+      static_cast<const char *>(Prologue ? "sub" : "add"), Imm);
   ++Offset;
   return false;
 }
@@ -340,15 +340,14 @@ bool Decoder::opcode_0xxxxxxx(const uint8_t *OC, unsigned &Offset,
 bool Decoder::opcode_10Lxxxxx(const uint8_t *OC, unsigned &Offset,
                               unsigned Length, bool Prologue) {
   unsigned Link = (OC[Offset] & 0x20) >> 5;
-  uint16_t RegisterMask = (Link << (Prologue ? 14 : 15))
-                        | ((OC[Offset + 0] & 0x1f) << 8)
-                        | ((OC[Offset + 1] & 0xff) << 0);
+  uint16_t RegisterMask = (Link << (Prologue ? 14 : 15)) |
+                          ((OC[Offset + 0] & 0x1f) << 8) |
+                          ((OC[Offset + 1] & 0xff) << 0);
   assert((~RegisterMask & (1 << 13)) && "sp must not be set");
   assert((~RegisterMask & (1 << (Prologue ? 15 : 14))) && "pc must not be set");
 
-  SW.startLine() << format("0x%02x 0x%02x           ; %s.w ",
-                           OC[Offset + 0], OC[Offset + 1],
-                           Prologue ? "push" : "pop");
+  SW.startLine() << format("0x%02x 0x%02x           ; %s.w ", OC[Offset + 0],
+                           OC[Offset + 1], Prologue ? "push" : "pop");
   printGPRMask(RegisterMask);
   OS << '\n';
 
@@ -373,8 +372,8 @@ bool Decoder::opcode_11010Lxx(const uint8_t *OC, unsigned &Offset,
   unsigned Link = (OC[Offset] & 0x4) >> 2;
   unsigned Count = (OC[Offset] & 0x3);
 
-  uint16_t GPRMask = (Link << (Prologue ? 14 : 15))
-                   | (((1 << (Count + 1)) - 1) << 4);
+  uint16_t GPRMask =
+      (Link << (Prologue ? 14 : 15)) | (((1 << (Count + 1)) - 1) << 4);
 
   SW.startLine() << format("0x%02x                ; %s ", OC[Offset],
                            Prologue ? "push" : "pop");
@@ -390,8 +389,8 @@ bool Decoder::opcode_11011Lxx(const uint8_t *OC, unsigned &Offset,
   unsigned Link = (OC[Offset] & 0x4) >> 2;
   unsigned Count = (OC[Offset] & 0x3) + 4;
 
-  uint16_t GPRMask = (Link << (Prologue ? 14 : 15))
-                   | (((1 << (Count + 1)) - 1) << 4);
+  uint16_t GPRMask =
+      (Link << (Prologue ? 14 : 15)) | (((1 << (Count + 1)) - 1) << 4);
 
   SW.startLine() << format("0x%02x                ; %s.w ", OC[Offset],
                            Prologue ? "push" : "pop");
@@ -418,12 +417,12 @@ bool Decoder::opcode_11100xxx(const uint8_t *OC, unsigned &Offset,
 
 bool Decoder::opcode_111010xx(const uint8_t *OC, unsigned &Offset,
                               unsigned Length, bool Prologue) {
-  uint16_t Imm = ((OC[Offset + 0] & 0x03) << 8) | ((OC[Offset + 1] & 0xff) << 0);
+  uint16_t Imm =
+      ((OC[Offset + 0] & 0x03) << 8) | ((OC[Offset + 1] & 0xff) << 0);
 
-  SW.startLine() << format("0x%02x 0x%02x           ; %s.w sp, #(%u * 4)\n",
-                           OC[Offset + 0], OC[Offset + 1],
-                           static_cast<const char *>(Prologue ? "sub" : "add"),
-                           Imm);
+  SW.startLine() << format(
+      "0x%02x 0x%02x           ; %s.w sp, #(%u * 4)\n", OC[Offset + 0],
+      OC[Offset + 1], static_cast<const char *>(Prologue ? "sub" : "add"), Imm);
 
   Offset += 2;
   return false;
@@ -431,8 +430,8 @@ bool Decoder::opcode_111010xx(const uint8_t *OC, unsigned &Offset,
 
 bool Decoder::opcode_1110110L(const uint8_t *OC, unsigned &Offset,
                               unsigned Length, bool Prologue) {
-  uint16_t GPRMask = ((OC[Offset + 0] & 0x01) << (Prologue ? 14 : 15))
-                   | ((OC[Offset + 1] & 0xff) << 0);
+  uint16_t GPRMask = ((OC[Offset + 0] & 0x01) << (Prologue ? 14 : 15)) |
+                     ((OC[Offset + 1] & 0xff) << 0);
 
   SW.startLine() << format("0x%02x 0x%02x           ; %s ", OC[Offset + 0],
                            OC[Offset + 1], Prologue ? "push" : "pop");
@@ -449,11 +448,11 @@ bool Decoder::opcode_11101110(const uint8_t *OC, unsigned &Offset,
 
   if (OC[Offset + 1] & 0xf0)
     SW.startLine() << format("0x%02x 0x%02x           ; reserved\n",
-                             OC[Offset + 0], OC[Offset +  1]);
+                             OC[Offset + 0], OC[Offset + 1]);
   else
-    SW.startLine()
-      << format("0x%02x 0x%02x           ; microsoft-specific (type: %u)\n",
-                OC[Offset + 0], OC[Offset + 1], OC[Offset + 1] & 0x0f);
+    SW.startLine() << format(
+        "0x%02x 0x%02x           ; microsoft-specific (type: %u)\n",
+        OC[Offset + 0], OC[Offset + 1], OC[Offset + 1] & 0x0f);
 
   Offset += 2;
   return false;
@@ -463,15 +462,15 @@ bool Decoder::opcode_11101111(const uint8_t *OC, unsigned &Offset,
                               unsigned Length, bool Prologue) {
   if (OC[Offset + 1] & 0xf0)
     SW.startLine() << format("0x%02x 0x%02x           ; reserved\n",
-                             OC[Offset + 0], OC[Offset +  1]);
+                             OC[Offset + 0], OC[Offset + 1]);
   else if (Prologue)
-    SW.startLine()
-      << format("0x%02x 0x%02x           ; str.w lr, [sp, #-%u]!\n",
-                OC[Offset + 0], OC[Offset + 1], OC[Offset + 1] << 2);
+    SW.startLine() << format(
+        "0x%02x 0x%02x           ; str.w lr, [sp, #-%u]!\n", OC[Offset + 0],
+        OC[Offset + 1], OC[Offset + 1] << 2);
   else
-    SW.startLine()
-      << format("0x%02x 0x%02x           ; ldr.w lr, [sp], #%u\n",
-                OC[Offset + 0], OC[Offset + 1], OC[Offset + 1] << 2);
+    SW.startLine() << format("0x%02x 0x%02x           ; ldr.w lr, [sp], #%u\n",
+                             OC[Offset + 0], OC[Offset + 1],
+                             OC[Offset + 1] << 2);
 
   Offset += 2;
   return false;
@@ -522,14 +521,13 @@ bool Decoder::opcode_11110111(const uint8_t *OC, unsigned &Offset,
 
 bool Decoder::opcode_11111000(const uint8_t *OC, unsigned &Offset,
                               unsigned Length, bool Prologue) {
-  uint32_t Imm = (OC[Offset + 1] << 16)
-               | (OC[Offset + 2] << 8)
-               | (OC[Offset + 3] << 0);
+  uint32_t Imm =
+      (OC[Offset + 1] << 16) | (OC[Offset + 2] << 8) | (OC[Offset + 3] << 0);
 
-  SW.startLine()
-    << format("0x%02x 0x%02x 0x%02x 0x%02x ; %s sp, sp, #(%u * 4)\n",
-              OC[Offset + 0], OC[Offset + 1], OC[Offset + 2], OC[Offset + 3],
-              static_cast<const char *>(Prologue ? "sub" : "add"), Imm);
+  SW.startLine() << format(
+      "0x%02x 0x%02x 0x%02x 0x%02x ; %s sp, sp, #(%u * 4)\n", OC[Offset + 0],
+      OC[Offset + 1], OC[Offset + 2], OC[Offset + 3],
+      static_cast<const char *>(Prologue ? "sub" : "add"), Imm);
 
   Offset += 4;
   return false;
@@ -539,10 +537,10 @@ bool Decoder::opcode_11111001(const uint8_t *OC, unsigned &Offset,
                               unsigned Length, bool Prologue) {
   uint32_t Imm = (OC[Offset + 1] << 8) | (OC[Offset + 2] << 0);
 
-  SW.startLine()
-    << format("0x%02x 0x%02x 0x%02x      ; %s.w sp, sp, #(%u * 4)\n",
-              OC[Offset + 0], OC[Offset + 1], OC[Offset + 2],
-              static_cast<const char *>(Prologue ? "sub" : "add"), Imm);
+  SW.startLine() << format(
+      "0x%02x 0x%02x 0x%02x      ; %s.w sp, sp, #(%u * 4)\n", OC[Offset + 0],
+      OC[Offset + 1], OC[Offset + 2],
+      static_cast<const char *>(Prologue ? "sub" : "add"), Imm);
 
   Offset += 3;
   return false;
@@ -550,14 +548,13 @@ bool Decoder::opcode_11111001(const uint8_t *OC, unsigned &Offset,
 
 bool Decoder::opcode_11111010(const uint8_t *OC, unsigned &Offset,
                               unsigned Length, bool Prologue) {
-  uint32_t Imm = (OC[Offset + 1] << 16)
-               | (OC[Offset + 2] << 8)
-               | (OC[Offset + 3] << 0);
+  uint32_t Imm =
+      (OC[Offset + 1] << 16) | (OC[Offset + 2] << 8) | (OC[Offset + 3] << 0);
 
-  SW.startLine()
-    << format("0x%02x 0x%02x 0x%02x 0x%02x ; %s.w sp, sp, #(%u * 4)\n",
-              OC[Offset + 0], OC[Offset + 1], OC[Offset + 2], OC[Offset + 3],
-              static_cast<const char *>(Prologue ? "sub" : "add"), Imm);
+  SW.startLine() << format(
+      "0x%02x 0x%02x 0x%02x 0x%02x ; %s.w sp, sp, #(%u * 4)\n", OC[Offset + 0],
+      OC[Offset + 1], OC[Offset + 2], OC[Offset + 3],
+      static_cast<const char *>(Prologue ? "sub" : "add"), Imm);
 
   Offset += 4;
   return false;
@@ -586,7 +583,8 @@ bool Decoder::opcode_11111101(const uint8_t *OC, unsigned &Offset,
 
 bool Decoder::opcode_11111110(const uint8_t *OC, unsigned &Offset,
                               unsigned Length, bool Prologue) {
-  SW.startLine() << format("0x%02x                ; b.w <target>\n", OC[Offset]);
+  SW.startLine() << format("0x%02x                ; b.w <target>\n",
+                           OC[Offset]);
   ++Offset;
   return true;
 }
@@ -649,10 +647,9 @@ bool Decoder::opcode_alloc_m(const uint8_t *OC, unsigned &Offset,
   uint32_t NumBytes = ((OC[Offset] & 0x07) << 8);
   NumBytes |= (OC[Offset + 1] & 0xFF);
   NumBytes <<= 4;
-  SW.startLine() << format("0x%02x%02x              ; %s sp, #%u\n",
-                           OC[Offset], OC[Offset + 1],
-                           static_cast<const char *>(Prologue ? "sub" : "add"),
-                           NumBytes);
+  SW.startLine() << format(
+      "0x%02x%02x              ; %s sp, #%u\n", OC[Offset], OC[Offset + 1],
+      static_cast<const char *>(Prologue ? "sub" : "add"), NumBytes);
   Offset += 2;
   return false;
 }
@@ -664,10 +661,10 @@ bool Decoder::opcode_save_regp(const uint8_t *OC, unsigned &Offset,
   Reg >>= 6;
   Reg += 19;
   uint32_t Off = (OC[Offset + 1] & 0x3F) << 3;
-  SW.startLine() << format(
-      "0x%02x%02x              ; %s x%u, x%u, [sp, #%u]\n",
-      OC[Offset], OC[Offset + 1],
-      static_cast<const char *>(Prologue ? "stp" : "ldp"), Reg, Reg + 1, Off);
+  SW.startLine() << format("0x%02x%02x              ; %s x%u, x%u, [sp, #%u]\n",
+                           OC[Offset], OC[Offset + 1],
+                           static_cast<const char *>(Prologue ? "stp" : "ldp"),
+                           Reg, Reg + 1, Off);
   Offset += 2;
   return false;
 }
@@ -681,14 +678,12 @@ bool Decoder::opcode_save_regp_x(const uint8_t *OC, unsigned &Offset,
   uint32_t Off = ((OC[Offset + 1] & 0x3F) + 1) << 3;
   if (Prologue)
     SW.startLine() << format(
-        "0x%02x%02x              ; stp x%u, x%u, [sp, #-%u]!\n",
-        OC[Offset], OC[Offset + 1], Reg,
-        Reg + 1, Off);
+        "0x%02x%02x              ; stp x%u, x%u, [sp, #-%u]!\n", OC[Offset],
+        OC[Offset + 1], Reg, Reg + 1, Off);
   else
     SW.startLine() << format(
-        "0x%02x%02x              ; ldp x%u, x%u, [sp], #%u\n",
-        OC[Offset], OC[Offset + 1], Reg,
-        Reg + 1, Off);
+        "0x%02x%02x              ; ldp x%u, x%u, [sp], #%u\n", OC[Offset],
+        OC[Offset + 1], Reg, Reg + 1, Off);
   Offset += 2;
   return false;
 }
@@ -795,13 +790,11 @@ bool Decoder::opcode_save_freg_x(const uint8_t *OC, unsigned &Offset,
   uint32_t Reg = ((OC[Offset + 1] & 0xE0) >> 5) + 8;
   uint32_t Off = ((OC[Offset + 1] & 0x1F) + 1) << 3;
   if (Prologue)
-    SW.startLine() << format(
-        "0x%02x%02x              ; str d%u, [sp, #-%u]!\n", OC[Offset],
-        OC[Offset + 1], Reg, Off);
+    SW.startLine() << format("0x%02x%02x              ; str d%u, [sp, #-%u]!\n",
+                             OC[Offset], OC[Offset + 1], Reg, Off);
   else
-    SW.startLine() << format(
-        "0x%02x%02x              ; ldr d%u, [sp], #%u\n", OC[Offset],
-        OC[Offset + 1], Reg, Off);
+    SW.startLine() << format("0x%02x%02x              ; ldr d%u, [sp], #%u\n",
+                             OC[Offset], OC[Offset + 1], Reg, Off);
   Offset += 2;
   return false;
 }
@@ -1051,9 +1044,9 @@ bool Decoder::opcode_pac_sign_lr(const uint8_t *OC, unsigned &Offset,
 void Decoder::decodeOpcodes(ArrayRef<uint8_t> Opcodes, unsigned Offset,
                             bool Prologue) {
   assert((!Prologue || Offset == 0) && "prologue should always use offset 0");
-  const RingEntry* DecodeRing = isAArch64 ? Ring64 : Ring;
+  const RingEntry *DecodeRing = isAArch64 ? Ring64 : Ring;
   bool Terminated = false;
-  for (unsigned OI = Offset, OE = Opcodes.size(); !Terminated && OI < OE; ) {
+  for (unsigned OI = Offset, OE = Opcodes.size(); !Terminated && OI < OE;) {
     for (unsigned DI = 0;; ++DI) {
       if ((isAArch64 && (DI >= std::size(Ring64))) ||
           (!isAArch64 && (DI >= std::size(Ring)))) {
@@ -1066,7 +1059,7 @@ void Decoder::decodeOpcodes(ArrayRef<uint8_t> Opcodes, unsigned Offset,
       if ((Opcodes[OI] & DecodeRing[DI].Mask) == DecodeRing[DI].Value) {
         if (OI + DecodeRing[DI].Length > OE) {
           SW.startLine() << format("Opcode 0x%02x goes past the unwind data\n",
-                                    Opcodes[OI]);
+                                   Opcodes[OI]);
           OI += DecodeRing[DI].Length;
           break;
         }
@@ -1088,7 +1081,7 @@ bool Decoder::dumpXDataRecord(const COFFObjectFile &COFF,
   uint64_t SectionVA = Section.getAddress();
   uint64_t Offset = VA - SectionVA;
   const ulittle32_t *Data =
-    reinterpret_cast<const ulittle32_t *>(Contents.data() + Offset);
+      reinterpret_cast<const ulittle32_t *>(Contents.data() + Offset);
 
   // Sanity check to ensure that the .xdata header is present.
   // A header is one or two words, followed by at least one word to describe
@@ -1098,9 +1091,9 @@ bool Decoder::dumpXDataRecord(const COFFObjectFile &COFF,
 
   const ExceptionDataRecord XData(Data, isAArch64);
   DictScope XRS(SW, "ExceptionData");
-  SW.printNumber("FunctionLength",
-                 isAArch64 ? XData.FunctionLengthInBytesAArch64() :
-                 XData.FunctionLengthInBytesARM());
+  SW.printNumber("FunctionLength", isAArch64
+                                       ? XData.FunctionLengthInBytesAArch64()
+                                       : XData.FunctionLengthInBytesARM());
   SW.printNumber("Version", XData.Vers());
   SW.printBoolean("ExceptionData", XData.X());
   SW.printBoolean("EpiloguePacked", XData.E());
@@ -1140,9 +1133,9 @@ bool Decoder::dumpXDataRecord(const COFFObjectFile &COFF,
       SW.printNumber("StartOffset", ES.EpilogueStartOffset());
       if (!isAArch64)
         SW.printNumber("Condition", ES.Condition());
-      SW.printNumber("EpilogueStartIndex",
-                     isAArch64 ? ES.EpilogueStartIndexAArch64()
-                               : ES.EpilogueStartIndexARM());
+      SW.printNumber("EpilogueStartIndex", isAArch64
+                                               ? ES.EpilogueStartIndexAArch64()
+                                               : ES.EpilogueStartIndexARM());
       unsigned ReservedMask = isAArch64 ? 0xF : 0x3;
       if ((ES.ES >> 18) & ReservedMask)
         SW.printNumber("ReservedBits", (ES.ES >> 18) & ReservedMask);
@@ -1493,7 +1486,7 @@ bool Decoder::dumpProcedureDataEntry(const COFFObjectFile &COFF,
                                      ArrayRef<uint8_t> Contents) {
   uint64_t Offset = PDataEntrySize * Index;
   const ulittle32_t *Data =
-    reinterpret_cast<const ulittle32_t *>(Contents.data() + Offset);
+      reinterpret_cast<const ulittle32_t *>(Contents.data() + Offset);
 
   const RuntimeFunction Entry(Data);
   DictScope RFS(SW, "RuntimeFunction");
@@ -1534,6 +1527,6 @@ Error Decoder::dumpProcedureData(const COFFObjectFile &COFF) {
   }
   return Error::success();
 }
-}
-}
-}
+} // namespace WinEH
+} // namespace ARM
+} // namespace llvm
diff --git a/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h b/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h
index b412c4a8a..7c11c2338 100644
--- a/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h
+++ b/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h
@@ -144,8 +144,7 @@ class Decoder {
   bool opcode_pac_sign_lr(const uint8_t *Opcodes, unsigned &Offset,
                           unsigned Length, bool Prologue);
 
-  void decodeOpcodes(ArrayRef<uint8_t> Opcodes, unsigned Offset,
-                     bool Prologue);
+  void decodeOpcodes(ArrayRef<uint8_t> Opcodes, unsigned Offset, bool Prologue);
 
   void printGPRMask(uint16_t Mask);
   void printVFPMask(uint32_t Mask);
@@ -153,9 +152,9 @@ class Decoder {
   ErrorOr<object::SectionRef>
   getSectionContaining(const object::COFFObjectFile &COFF, uint64_t Address);
 
-  ErrorOr<object::SymbolRef>
-  getSymbol(const object::COFFObjectFile &COFF, uint64_t Address,
-            bool FunctionOnly = false);
+  ErrorOr<object::SymbolRef> getSymbol(const object::COFFObjectFile &COFF,
+                                       uint64_t Address,
+                                       bool FunctionOnly = false);
 
   ErrorOr<object::SymbolRef>
   getRelocatedSymbol(const object::COFFObjectFile &COFF,
@@ -191,13 +190,12 @@ class Decoder {
                          const object::SectionRef Section);
 
 public:
-  Decoder(ScopedPrinter &SW, bool isAArch64) : SW(SW),
-                                               OS(SW.getOStream()),
-                                               isAArch64(isAArch64) {}
+  Decoder(ScopedPrinter &SW, bool isAArch64)
+      : SW(SW), OS(SW.getOStream()), isAArch64(isAArch64) {}
   Error dumpProcedureData(const object::COFFObjectFile &COFF);
 };
-}
-}
-}
+} // namespace WinEH
+} // namespace ARM
+} // namespace llvm
 
 #endif
diff --git a/llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp b/llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp
index 0ab2a1765..6da7a5f56 100644
--- a/llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp
+++ b/llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp
@@ -27,9 +27,15 @@ void dumpCOFFImportFile(const COFFImportFile *File, ScopedPrinter &Writer) {
 
   const coff_import_header *H = File->getCOFFImportHeader();
   switch (H->getType()) {
-  case COFF::IMPORT_CODE:  Writer.printString("Type", "code"); break;
-  case COFF::IMPORT_DATA:  Writer.printString("Type", "data"); break;
-  case COFF::IMPORT_CONST: Writer.printString("Type", "const"); break;
+  case COFF::IMPORT_CODE:
+    Writer.printString("Type", "code");
+    break;
+  case COFF::IMPORT_DATA:
+    Writer.printString("Type", "data");
+    break;
+  case COFF::IMPORT_CONST:
+    Writer.printString("Type", "const");
+    break;
   }
 
   switch (H->getNameType()) {
diff --git a/llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h b/llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h
index ae5a4e399..7f8360036 100644
--- a/llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h
+++ b/llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h
@@ -98,8 +98,10 @@ void PrinterContext<ELFT>::printEHFrameHdr(const Elf_Phdr *EHFramePHdr) const {
   DictScope L(W, "EHFrameHeader");
   uint64_t EHFrameHdrAddress = EHFramePHdr->p_vaddr;
   W.startLine() << format("Address: 0x%" PRIx64 "\n", EHFrameHdrAddress);
-  W.startLine() << format("Offset: 0x%" PRIx64 "\n", (uint64_t)EHFramePHdr->p_offset);
-  W.startLine() << format("Size: 0x%" PRIx64 "\n", (uint64_t)EHFramePHdr->p_memsz);
+  W.startLine() << format("Offset: 0x%" PRIx64 "\n",
+                          (uint64_t)EHFramePHdr->p_offset);
+  W.startLine() << format("Size: 0x%" PRIx64 "\n",
+                          (uint64_t)EHFramePHdr->p_memsz);
 
   const object::ELFFile<ELFT> &Obj = ObjF.getELFFile();
   if (const Elf_Shdr *EHFrameHdr =
diff --git a/llvm/tools/llvm-readobj/lib/ELFDumper.cpp b/llvm/tools/llvm-readobj/lib/ELFDumper.cpp
index ab81de626..96b74ed11 100644
--- a/llvm/tools/llvm-readobj/lib/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/lib/ELFDumper.cpp
@@ -92,8 +92,7 @@ using namespace ELF;
 namespace {
 
 template <class ELFT> struct RelSymbol {
-  RelSymbol(const typename ELFT::Sym *S, StringRef N)
-      : Sym(S), Name(N.str()) {}
+  RelSymbol(const typename ELFT::Sym *S, StringRef N) : Sym(S), Name(N.str()) {}
   const typename ELFT::Sym *Sym;
   std::string Name;
 };
@@ -408,9 +407,9 @@ protected:
   std::optional<uint64_t> SONameOffset;
   std::optional<DenseMap<uint64_t, std::vector<uint32_t>>> AddressToIndexMap;
 
-  const Elf_Shdr *SymbolVersionSection = nullptr;   // .gnu.version
+  const Elf_Shdr *SymbolVersionSection = nullptr;     // .gnu.version
   const Elf_Shdr *SymbolVersionNeedSection = nullptr; // .gnu.version_r
-  const Elf_Shdr *SymbolVersionDefSection = nullptr; // .gnu.version_d
+  const Elf_Shdr *SymbolVersionDefSection = nullptr;  // .gnu.version_d
 
   // Used for tracking the current RISCV vendor name when printing relocations.
   // When an R_RISCV_VENDOR relocation is encountered, we record the symbol name
@@ -823,8 +822,7 @@ public:
                         const Archive *A) override;
   void printZeroSymbolOtherField(const Elf_Sym &Symbol) const override;
 
-  void printDefaultRelRelaReloc(const Relocation<ELFT> &R,
-                                StringRef SymbolName,
+  void printDefaultRelRelaReloc(const Relocation<ELFT> &R, StringRef SymbolName,
                                 StringRef RelocName) override;
 
   void printRelocationSectionInfo(const Elf_Shdr &Sec, StringRef Name,
@@ -1821,18 +1819,18 @@ constexpr auto ElfRISCVSymOtherFlags =
 
 static const char *getElfMipsOptionsOdkType(unsigned Odk) {
   switch (Odk) {
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_NULL);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_REGINFO);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_EXCEPTIONS);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_PAD);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_HWPATCH);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_FILL);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_TAGS);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_HWAND);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_HWOR);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_GP_GROUP);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_IDENT);
-  LLVM_READOBJ_ENUM_CASE(ELF, ODK_PAGESIZE);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_NULL);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_REGINFO);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_EXCEPTIONS);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_PAD);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_HWPATCH);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_FILL);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_TAGS);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_HWAND);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_HWOR);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_GP_GROUP);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_IDENT);
+    LLVM_READOBJ_ENUM_CASE(ELF, ODK_PAGESIZE);
   default:
     return "Unknown";
   }
@@ -1895,8 +1893,7 @@ ELFDumper<ELFT>::findDynamic() {
   return std::make_pair(DynamicPhdr, DynamicSec);
 }
 
-template <typename ELFT>
-void ELFDumper<ELFT>::loadDynamicTable() {
+template <typename ELFT> void ELFDumper<ELFT>::loadDynamicTable() {
   const Elf_Phdr *DynamicPhdr;
   const Elf_Shdr *DynamicSec;
   std::tie(DynamicPhdr, DynamicSec) = findDynamic();
@@ -2405,22 +2402,22 @@ std::string ELFDumper<ELFT>::getDynamicEntry(uint64_t Type,
       return std::to_string(Value);
     case DT_AARCH64_MEMTAG_MODE:
       switch (Value) {
-        case 0:
-          return "Synchronous (0)";
-        case 1:
-          return "Asynchronous (1)";
-        default:
-          return (Twine("Unknown (") + Twine(Value) + ")").str();
+      case 0:
+        return "Synchronous (0)";
+      case 1:
+        return "Asynchronous (1)";
+      default:
+        return (Twine("Unknown (") + Twine(Value) + ")").str();
       }
     case DT_AARCH64_MEMTAG_HEAP:
     case DT_AARCH64_MEMTAG_STACK:
       switch (Value) {
-        case 0:
-          return "Disabled (0)";
-        case 1:
-          return "Enabled (1)";
-        default:
-          return (Twine("Unknown (") + Twine(Value) + ")").str();
+      case 0:
+        return "Disabled (0)";
+      case 1:
+        return "Enabled (1)";
+      default:
+        return (Twine("Unknown (") + Twine(Value) + ")").str();
       }
     case DT_AARCH64_MEMTAG_GLOBALS:
       return (Twine("0x") + utohexstr(Value, /*LowerCase=*/true)).str();
@@ -2762,8 +2759,7 @@ getGnuHashTableChains(std::optional<DynRegionInfo> DynSymRegion,
   return ArrayRef<typename ELFT::Word>();
 }
 
-template <typename ELFT>
-void ELFDumper<ELFT>::printGnuHashTable() {
+template <typename ELFT> void ELFDumper<ELFT>::printGnuHashTable() {
   DictScope D(W, "GnuHashTable");
   if (!GnuHashTable)
     return;
@@ -2838,16 +2834,16 @@ void ELFDumper<ELFT>::printHashHistogram(const Elf_Hash &HashTable) const {
     BitVector Visited(NChain);
     for (size_t C = Buckets[B]; C < NChain; C = Chains[C]) {
       if (C == ELF::STN_UNDEF)
-          break;
+        break;
       if (Visited[C]) {
-          this->reportUniqueWarning(
-              ".hash section is invalid: bucket " + Twine(C) +
-              ": a cycle was detected in the linked chain");
-          break;
+        this->reportUniqueWarning(".hash section is invalid: bucket " +
+                                  Twine(C) +
+                                  ": a cycle was detected in the linked chain");
+        break;
       }
       Visited[C] = true;
       if (MaxChain <= ++ChainLen[B])
-          ++MaxChain;
+        ++MaxChain;
     }
     TotalSyms += ChainLen[B];
   }
@@ -2893,7 +2889,7 @@ void ELFDumper<ELFT>::printGnuHashHistogram(
     for (size_t C = Buckets[B] - Symndx;
          C < Chains.size() && (Chains[C] & 1) == 0; ++C)
       if (MaxChain < ++Len)
-          ++MaxChain;
+        ++MaxChain;
     ChainLen[B] = Len;
     TotalSyms += Len;
   }
@@ -3034,11 +3030,11 @@ public:
   Entries getOtherEntries() const;
   Entries getPltEntries() const;
 
-  uint64_t getGotAddress(const Entry * E) const;
-  int64_t getGotOffset(const Entry * E) const;
+  uint64_t getGotAddress(const Entry *E) const;
+  int64_t getGotOffset(const Entry *E) const;
   const Elf_Sym *getGotSym(const Entry *E) const;
 
-  uint64_t getPltAddress(const Entry * E) const;
+  uint64_t getPltAddress(const Entry *E) const;
   const Elf_Sym *getPltSym(const Entry *E) const;
 
   StringRef getPltStrTable() const { return PltStrTable; }
@@ -3455,11 +3451,11 @@ readMipsOptions(const uint8_t *SecBegin, ArrayRef<uint8_t> &SecData,
 
   if (IsSupported)
     if (Size < ExpectedSize)
-      return createError(
-          "a .MIPS.options entry of kind " +
-          Twine(getElfMipsOptionsOdkType(O->kind)) +
-          " has an invalid size (0x" + Twine::utohexstr(Size) +
-          "), the expected size is 0x" + Twine::utohexstr(ExpectedSize));
+      return createError("a .MIPS.options entry of kind " +
+                         Twine(getElfMipsOptionsOdkType(O->kind)) +
+                         " has an invalid size (0x" + Twine::utohexstr(Size) +
+                         "), the expected size is 0x" +
+                         Twine::utohexstr(ExpectedSize));
 
   SecData = SecData.drop_front(Size);
   return O;
@@ -3733,7 +3729,8 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
     Str = Name.str();
   } else {
     if (e.e_type >= ET_LOPROC)
-      Str = "Processor Specific: (" + utohexstr(e.e_type, /*LowerCase=*/true) + ")";
+      Str = "Processor Specific: (" + utohexstr(e.e_type, /*LowerCase=*/true) +
+            ")";
     else if (e.e_type >= ET_LOOS)
       Str = "OS Specific: (" + utohexstr(e.e_type, /*LowerCase=*/true) + ")";
     else
@@ -4250,7 +4247,8 @@ template <class ELFT> void GNUELFDumper<ELFT>::printSectionHeaders() {
   unsigned Bias = ELFT::Is64Bits ? 0 : 8;
   OS << "There are " << to_string(Sections.size())
      << " section headers, starting at offset "
-     << "0x" << utohexstr(this->Obj.getHeader().e_shoff, /*LowerCase=*/true) << ":\n\n";
+     << "0x" << utohexstr(this->Obj.getHeader().e_shoff, /*LowerCase=*/true)
+     << ":\n\n";
   OS << "Section Headers:\n";
   Field Fields[11] = {
       {"[Nr]", 2},        {"Name", 7},        {"Type", 25},
@@ -4618,7 +4616,7 @@ void GNUELFDumper<ELFT>::printGnuHashTableSymbols(const Elf_GnuHash &GnuHash) {
         break;
       }
 
-       // Chain ends at symbol with stopper bit.
+      // Chain ends at symbol with stopper bit.
       if ((Values[SymIndex - GnuHash.symndx] & 1) == 1)
         break;
     }
@@ -4662,7 +4660,8 @@ template <class ELFT> void GNUELFDumper<ELFT>::printSectionDetails() {
   }
   OS << "There are " << to_string(Sections.size())
      << " section headers, starting at offset "
-     << "0x" << utohexstr(this->Obj.getHeader().e_shoff, /*LowerCase=*/true) << ":\n\n";
+     << "0x" << utohexstr(this->Obj.getHeader().e_shoff, /*LowerCase=*/true)
+     << ":\n\n";
 
   OS << "Section Headers:\n";
 
@@ -6037,16 +6036,18 @@ static AMDNote getAMDNote(uint32_t NoteType, ArrayRef<uint8_t> Desc) {
     if (Desc.size() < sizeof(IsaVersion))
       return {"AMD HSA ISA Version", "Invalid AMD HSA ISA Version"};
     auto Isa = reinterpret_cast<const IsaVersion *>(Desc.data());
-    if (Desc.size() < sizeof(IsaVersion) +
-                          Isa->VendorNameSize + Isa->ArchitectureNameSize ||
+    if (Desc.size() < sizeof(IsaVersion) + Isa->VendorNameSize +
+                          Isa->ArchitectureNameSize ||
         Isa->VendorNameSize == 0 || Isa->ArchitectureNameSize == 0)
       return {"AMD HSA ISA Version", "Invalid AMD HSA ISA Version"};
     std::string IsaString;
     raw_string_ostream StrOS(IsaString);
     StrOS << "[Vendor: "
-          << StringRef((const char*)Desc.data() + sizeof(IsaVersion), Isa->VendorNameSize - 1)
+          << StringRef((const char *)Desc.data() + sizeof(IsaVersion),
+                       Isa->VendorNameSize - 1)
           << ", Architecture: "
-          << StringRef((const char*)Desc.data() + sizeof(IsaVersion) + Isa->VendorNameSize,
+          << StringRef((const char *)Desc.data() + sizeof(IsaVersion) +
+                           Isa->VendorNameSize,
                        Isa->ArchitectureNameSize - 1)
           << ", Major: " << Isa->Major << ", Minor: " << Isa->Minor
           << ", Stepping: " << Isa->Stepping << "]";
@@ -6055,9 +6056,9 @@ static AMDNote getAMDNote(uint32_t NoteType, ArrayRef<uint8_t> Desc) {
   case ELF::NT_AMD_HSA_METADATA: {
     if (Desc.size() == 0)
       return {"AMD HSA Metadata", ""};
-    return {
-        "AMD HSA Metadata",
-        std::string(reinterpret_cast<const char *>(Desc.data()), Desc.size() - 1)};
+    return {"AMD HSA Metadata",
+            std::string(reinterpret_cast<const char *>(Desc.data()),
+                        Desc.size() - 1)};
   }
   case ELF::NT_AMD_HSA_ISA_NAME: {
     if (Desc.size() == 0)
@@ -6262,7 +6263,8 @@ const NoteType AMDNoteTypes[] = {
     {ELF::NT_AMD_HSA_CODE_OBJECT_VERSION,
      "NT_AMD_HSA_CODE_OBJECT_VERSION (AMD HSA Code Object Version)"},
     {ELF::NT_AMD_HSA_HSAIL, "NT_AMD_HSA_HSAIL (AMD HSA HSAIL Properties)"},
-    {ELF::NT_AMD_HSA_ISA_VERSION, "NT_AMD_HSA_ISA_VERSION (AMD HSA ISA Version)"},
+    {ELF::NT_AMD_HSA_ISA_VERSION,
+     "NT_AMD_HSA_ISA_VERSION (AMD HSA ISA Version)"},
     {ELF::NT_AMD_HSA_METADATA, "NT_AMD_HSA_METADATA (AMD HSA Metadata)"},
     {ELF::NT_AMD_HSA_ISA_NAME, "NT_AMD_HSA_ISA_NAME (AMD HSA ISA Name)"},
     {ELF::NT_AMD_PAL_METADATA, "NT_AMD_PAL_METADATA (AMD PAL Metadata)"},
@@ -6614,7 +6616,8 @@ constexpr uint64_t MemtagStepVarintReservedBits = 3;
 constexpr uint64_t MemtagGranuleSize = 16;
 
 template <typename ELFT> void ELFDumper<ELFT>::printMemtag() {
-  if (Obj.getHeader().e_machine != EM_AARCH64) return;
+  if (Obj.getHeader().e_machine != EM_AARCH64)
+    return;
   std::vector<std::pair<std::string, std::string>> DynamicEntries;
   uint64_t MemtagGlobalsSz = 0;
   uint64_t MemtagGlobals = 0;
@@ -6692,7 +6695,8 @@ template <typename ELFT> void ELFDumper<ELFT>::printMemtag() {
       if (Error) {
         reportUniqueWarning(
             "error decoding size-only uleb, " + Twine(DecodedBytes) +
-            " byte(s) into SHT_AARCH64_MEMTAG_GLOBALS_DYNAMIC: " + Twine(Error));
+            " byte(s) into SHT_AARCH64_MEMTAG_GLOBALS_DYNAMIC: " +
+            Twine(Error));
         GlobalDescriptors.clear();
         break;
       }
@@ -7332,29 +7336,28 @@ void ELFDumper<ELFT>::printRelocatableStackSizes(
     SupportsRelocation IsSupportedFn;
     RelocationResolver Resolver;
     std::tie(IsSupportedFn, Resolver) = getRelocationResolver(this->ObjF);
-    ArrayRef<uint8_t> Contents =
-        unwrapOrError(this->FileName, Obj.getSectionContents(*StackSizesELFSec));
+    ArrayRef<uint8_t> Contents = unwrapOrError(
+        this->FileName, Obj.getSectionContents(*StackSizesELFSec));
     DataExtractor Data(Contents, Obj.isLE());
 
-    forEachRelocationDo(
-        *RelocSec, [&](const Relocation<ELFT> &R, unsigned Ndx,
-                       const Elf_Shdr &Sec, const Elf_Shdr *SymTab) {
-          if (!IsSupportedFn || !IsSupportedFn(R.Type)) {
-            reportUniqueWarning(
-                describe(*RelocSec) +
-                " contains an unsupported relocation with index " + Twine(Ndx) +
-                ": " + Obj.getRelocationTypeName(R.Type));
-            return;
-          }
+    forEachRelocationDo(*RelocSec, [&](const Relocation<ELFT> &R, unsigned Ndx,
+                                       const Elf_Shdr &Sec,
+                                       const Elf_Shdr *SymTab) {
+      if (!IsSupportedFn || !IsSupportedFn(R.Type)) {
+        reportUniqueWarning(describe(*RelocSec) +
+                            " contains an unsupported relocation with index " +
+                            Twine(Ndx) + ": " +
+                            Obj.getRelocationTypeName(R.Type));
+        return;
+      }
 
-          this->printStackSize(R, *RelocSec, Ndx, SymTab, FunctionSec,
-                               *StackSizesELFSec, Resolver, Data);
-        });
+      this->printStackSize(R, *RelocSec, Ndx, SymTab, FunctionSec,
+                           *StackSizesELFSec, Resolver, Data);
+    });
   }
 }
 
-template <class ELFT>
-void GNUELFDumper<ELFT>::printStackSizes() {
+template <class ELFT> void GNUELFDumper<ELFT>::printStackSizes() {
   bool HeaderHasBeenPrinted = false;
   auto PrintHeader = [&]() {
     if (HeaderHasBeenPrinted)
@@ -7521,7 +7524,7 @@ getMipsAbiFlagsSection(const ELFDumper<ELFT> &Dumper) {
 
   if (DataOrErr->size() != sizeof(Elf_Mips_ABIFlags<ELFT>))
     return createError(ErrPrefix + "it has a wrong size (" +
-        Twine(DataOrErr->size()) + ")");
+                       Twine(DataOrErr->size()) + ")");
   return reinterpret_cast<const Elf_Mips_ABIFlags<ELFT> *>(DataOrErr->data());
 }
 
diff --git a/llvm/tools/llvm-readobj/lib/MachODumper.cpp b/llvm/tools/llvm-readobj/lib/MachODumper.cpp
index 28d2c03c8..c23ac1a55 100644
--- a/llvm/tools/llvm-readobj/lib/MachODumper.cpp
+++ b/llvm/tools/llvm-readobj/lib/MachODumper.cpp
@@ -51,11 +51,10 @@ public:
   void printMachODysymtab() override;
   void printMachOSegment() override;
   void printMachOIndirectSymbols() override;
-  void printMachOLinkerOptions () override;
+  void printMachOLinkerOptions() override;
 
 private:
-  template<class MachHeader>
-  void printFileHeaders(const MachHeader &Header);
+  template <class MachHeader> void printFileHeaders(const MachHeader &Header);
 
   StringRef getSymbolName(const SymbolRef &Symbol) const;
   uint8_t getSymbolType(const SymbolRef &Symbol) const;
@@ -78,7 +77,6 @@ private:
 
 } // namespace
 
-
 namespace llvm {
 
 std::unique_ptr<ObjDumper> createMachODumper(const object::MachOObjectFile &Obj,
@@ -317,46 +315,45 @@ constexpr EnumStringDef<unsigned> MachOSymbolTypesDefs[] = {
 constexpr auto MachOSymbolTypes = BUILD_ENUM_STRINGS(MachOSymbolTypesDefs);
 
 namespace {
-  struct MachOSection {
-    ArrayRef<char> Name;
-    ArrayRef<char> SegmentName;
-    uint64_t Address;
-    uint64_t Size;
-    uint32_t Offset;
-    uint32_t Alignment;
-    uint32_t RelocationTableOffset;
-    uint32_t NumRelocationTableEntries;
-    uint32_t Flags;
-    uint32_t Reserved1;
-    uint32_t Reserved2;
-    uint32_t Reserved3;
-  };
-
-  struct MachOSegment {
-    std::string CmdName;
-    std::string SegName;
-    uint64_t cmdsize;
-    uint64_t vmaddr;
-    uint64_t vmsize;
-    uint64_t fileoff;
-    uint64_t filesize;
-    uint32_t maxprot;
-    uint32_t initprot;
-    uint32_t nsects;
-    uint32_t flags;
-  };
-
-  struct MachOSymbol {
-    uint32_t StringIndex;
-    uint8_t Type;
-    uint8_t SectionIndex;
-    uint16_t Flags;
-    uint64_t Value;
-  };
-}
+struct MachOSection {
+  ArrayRef<char> Name;
+  ArrayRef<char> SegmentName;
+  uint64_t Address;
+  uint64_t Size;
+  uint32_t Offset;
+  uint32_t Alignment;
+  uint32_t RelocationTableOffset;
+  uint32_t NumRelocationTableEntries;
+  uint32_t Flags;
+  uint32_t Reserved1;
+  uint32_t Reserved2;
+  uint32_t Reserved3;
+};
+
+struct MachOSegment {
+  std::string CmdName;
+  std::string SegName;
+  uint64_t cmdsize;
+  uint64_t vmaddr;
+  uint64_t vmsize;
+  uint64_t fileoff;
+  uint64_t filesize;
+  uint32_t maxprot;
+  uint32_t initprot;
+  uint32_t nsects;
+  uint32_t flags;
+};
+
+struct MachOSymbol {
+  uint32_t StringIndex;
+  uint8_t Type;
+  uint8_t SectionIndex;
+  uint16_t Flags;
+  uint64_t Value;
+};
+} // namespace
 
-static std::string getMask(uint32_t prot)
-{
+static std::string getMask(uint32_t prot) {
   // TODO (davide): This always assumes prot is valid.
   // Catch mistakes and report if needed.
   std::string Prot;
@@ -367,33 +364,32 @@ static std::string getMask(uint32_t prot)
   return Prot;
 }
 
-static void getSection(const MachOObjectFile *Obj,
-                       DataRefImpl Sec,
+static void getSection(const MachOObjectFile *Obj, DataRefImpl Sec,
                        MachOSection &Section) {
   if (!Obj->is64Bit()) {
     MachO::section Sect = Obj->getSection(Sec);
-    Section.Address     = Sect.addr;
-    Section.Size        = Sect.size;
-    Section.Offset      = Sect.offset;
-    Section.Alignment   = Sect.align;
+    Section.Address = Sect.addr;
+    Section.Size = Sect.size;
+    Section.Offset = Sect.offset;
+    Section.Alignment = Sect.align;
     Section.RelocationTableOffset = Sect.reloff;
     Section.NumRelocationTableEntries = Sect.nreloc;
-    Section.Flags       = Sect.flags;
-    Section.Reserved1   = Sect.reserved1;
-    Section.Reserved2   = Sect.reserved2;
+    Section.Flags = Sect.flags;
+    Section.Reserved1 = Sect.reserved1;
+    Section.Reserved2 = Sect.reserved2;
     return;
   }
   MachO::section_64 Sect = Obj->getSection64(Sec);
-  Section.Address     = Sect.addr;
-  Section.Size        = Sect.size;
-  Section.Offset      = Sect.offset;
-  Section.Alignment   = Sect.align;
+  Section.Address = Sect.addr;
+  Section.Size = Sect.size;
+  Section.Offset = Sect.offset;
+  Section.Alignment = Sect.align;
   Section.RelocationTableOffset = Sect.reloff;
   Section.NumRelocationTableEntries = Sect.nreloc;
-  Section.Flags       = Sect.flags;
-  Section.Reserved1   = Sect.reserved1;
-  Section.Reserved2   = Sect.reserved2;
-  Section.Reserved3   = Sect.reserved3;
+  Section.Flags = Sect.flags;
+  Section.Reserved1 = Sect.reserved1;
+  Section.Reserved2 = Sect.reserved2;
+  Section.Reserved3 = Sect.reserved3;
 }
 
 static void getSegment(const MachOObjectFile *Obj,
@@ -428,24 +424,23 @@ static void getSegment(const MachOObjectFile *Obj,
   Segment.flags = SC.flags;
 }
 
-static void getSymbol(const MachOObjectFile *Obj,
-                      DataRefImpl DRI,
+static void getSymbol(const MachOObjectFile *Obj, DataRefImpl DRI,
                       MachOSymbol &Symbol) {
   if (!Obj->is64Bit()) {
     MachO::nlist Entry = Obj->getSymbolTableEntry(DRI);
-    Symbol.StringIndex  = Entry.n_strx;
-    Symbol.Type         = Entry.n_type;
+    Symbol.StringIndex = Entry.n_strx;
+    Symbol.Type = Entry.n_type;
     Symbol.SectionIndex = Entry.n_sect;
-    Symbol.Flags        = Entry.n_desc;
-    Symbol.Value        = Entry.n_value;
+    Symbol.Flags = Entry.n_desc;
+    Symbol.Value = Entry.n_value;
     return;
   }
   MachO::nlist_64 Entry = Obj->getSymbol64TableEntry(DRI);
-  Symbol.StringIndex  = Entry.n_strx;
-  Symbol.Type         = Entry.n_type;
+  Symbol.StringIndex = Entry.n_strx;
+  Symbol.Type = Entry.n_type;
   Symbol.SectionIndex = Entry.n_sect;
-  Symbol.Flags        = Entry.n_desc;
-  Symbol.Value        = Entry.n_value;
+  Symbol.Flags = Entry.n_desc;
+  Symbol.Value = Entry.n_value;
 }
 
 void MachODumper::printFileHeaders() {
@@ -458,7 +453,7 @@ void MachODumper::printFileHeaders() {
   }
 }
 
-template<class MachHeader>
+template <class MachHeader>
 void MachODumper::printFileHeaders(const MachHeader &Header) {
   W.printEnum("Magic", Header.magic, EnumStrings(MachOMagics));
   W.printEnum("CpuType", Header.cputype, EnumStrings(MachOHeaderCpuTypes));
@@ -632,17 +627,14 @@ void MachODumper::printRelocation(const MachOObjectFile *Obj,
       SymbolNameOrOffset = TargetName;
     }
 
-    raw_ostream& OS = W.startLine();
-    OS << W.hex(Offset)
-       << " " << Obj->getAnyRelocationPCRel(RE)
-       << " " << Obj->getAnyRelocationLength(RE);
+    raw_ostream &OS = W.startLine();
+    OS << W.hex(Offset) << " " << Obj->getAnyRelocationPCRel(RE) << " "
+       << Obj->getAnyRelocationLength(RE);
     if (IsScattered)
       OS << " n/a";
     else
       OS << " " << Obj->getPlainRelocationExternal(RE);
-    OS << " " << RelocName
-       << " " << IsScattered
-       << " " << SymbolNameOrOffset
+    OS << " " << RelocName << " " << IsScattered << " " << SymbolNameOrOffset
        << "\n";
   }
 }
@@ -657,8 +649,8 @@ StringRef MachODumper::getSymbolName(const SymbolRef &Symbol) const {
 
 uint8_t MachODumper::getSymbolType(const SymbolRef &Symbol) const {
   return Obj->is64Bit()
-      ? Obj->getSymbol64TableEntry(Symbol.getRawDataRefImpl()).n_type
-      : Obj->getSymbolTableEntry(Symbol.getRawDataRefImpl()).n_type;
+             ? Obj->getSymbol64TableEntry(Symbol.getRawDataRefImpl()).n_type
+             : Obj->getSymbolTableEntry(Symbol.getRawDataRefImpl()).n_type;
 }
 
 bool MachODumper::compareSymbolsByName(SymbolRef LHS, SymbolRef RHS) const {
@@ -833,7 +825,7 @@ void MachODumper::printNeededLibraries() {
         Command.C.cmd == MachO::LC_LOAD_UPWARD_DYLIB) {
       MachO::dylib_command Dl = Obj->getDylibIDLoadCommand(Command);
       if (Dl.dylib.name < Dl.cmdsize) {
-        auto *P = static_cast<const char*>(Command.Ptr) + Dl.dylib.name;
+        auto *P = static_cast<const char *>(Command.Ptr) + Dl.dylib.name;
         Libs.push_back(P);
       }
     }
@@ -848,7 +840,7 @@ void MachODumper::printNeededLibraries() {
 
 void MachODumper::printMachODataInCode() {
   for (const auto &Load : Obj->load_commands()) {
-    if (Load.C.cmd  == MachO::LC_DATA_IN_CODE) {
+    if (Load.C.cmd == MachO::LC_DATA_IN_CODE) {
       MachO::linkedit_data_command LLC = Obj->getLinkeditDataLoadCommand(Load);
       DictScope Group(W, "DataInCode");
       W.printNumber("Data offset", LLC.dataoff);
@@ -856,8 +848,8 @@ void MachODumper::printMachODataInCode() {
       ListScope D(W, "Data entries");
       unsigned NumRegions = LLC.datasize / sizeof(MachO::data_in_code_entry);
       for (unsigned i = 0; i < NumRegions; ++i) {
-        MachO::data_in_code_entry DICE = Obj->getDataInCodeTableEntry(
-                                                              LLC.dataoff, i);
+        MachO::data_in_code_entry DICE =
+            Obj->getDataInCodeTableEntry(LLC.dataoff, i);
         DictScope Group(W, "Entry");
         W.printNumber("Index", i);
         W.printNumber("Offset", DICE.offset);
@@ -1021,7 +1013,7 @@ void MachODumper::printMachOLinkerOptions() {
       const char *P = Load.Ptr + sizeof(MachO::linker_option_command);
       StringRef Data(P, DataSize);
       for (unsigned i = 0; i < LOLC.count; ++i) {
-        std::pair<StringRef,StringRef> Split = Data.split('\0');
+        std::pair<StringRef, StringRef> Split = Data.split('\0');
         W.printString("Value", Split.first);
         Data = Split.second;
       }
diff --git a/llvm/tools/llvm-readobj/lib/ObjDumper.h b/llvm/tools/llvm-readobj/lib/ObjDumper.h
index 3942e5b56..634e4c1bd 100644
--- a/llvm/tools/llvm-readobj/lib/ObjDumper.h
+++ b/llvm/tools/llvm-readobj/lib/ObjDumper.h
@@ -117,11 +117,11 @@ public:
 
   // Only implemented for ELF at this time.
   virtual void printDependentLibs() {}
-  virtual void printDynamicRelocations() { }
-  virtual void printDynamicTable() { }
-  virtual void printNeededLibraries() { }
+  virtual void printDynamicRelocations() {}
+  virtual void printDynamicTable() {}
+  virtual void printNeededLibraries() {}
   virtual void printSectionAsHex(StringRef SectionName) {}
-  virtual void printHashTable() { }
+  virtual void printHashTable() {}
   virtual void printGnuHashTable() {}
   virtual void printHashSymbols() {}
   virtual void printLoadName() {}
@@ -143,16 +143,16 @@ public:
   virtual void printSectionsAsSFrame(ArrayRef<std::string> Sections) {}
 
   // Only implemented for PE/COFF.
-  virtual void printCOFFImports() { }
-  virtual void printCOFFExports() { }
-  virtual void printCOFFDirectives() { }
-  virtual void printCOFFBaseReloc() { }
+  virtual void printCOFFImports() {}
+  virtual void printCOFFExports() {}
+  virtual void printCOFFDirectives() {}
+  virtual void printCOFFBaseReloc() {}
   virtual void printCOFFPseudoReloc() {}
-  virtual void printCOFFDebugDirectory() { }
+  virtual void printCOFFDebugDirectory() {}
   virtual void printCOFFTLSDirectory() {}
   virtual void printCOFFResources() {}
-  virtual void printCOFFLoadConfig() { }
-  virtual void printCodeViewDebugInfo() { }
+  virtual void printCOFFLoadConfig() {}
+  virtual void printCodeViewDebugInfo() {}
   virtual void
   mergeCodeViewTypes(llvm::codeview::MergingTypeTableBuilder &CVIDs,
                      llvm::codeview::MergingTypeTableBuilder &CVTypes,
@@ -170,13 +170,13 @@ public:
                                   bool PrintRelocations) {}
 
   // Only implemented for MachO.
-  virtual void printMachODataInCode() { }
-  virtual void printMachOVersionMin() { }
+  virtual void printMachODataInCode() {}
+  virtual void printMachOVersionMin() {}
   virtual void printMachOTargetTriple() {}
-  virtual void printMachODysymtab() { }
-  virtual void printMachOSegment() { }
-  virtual void printMachOIndirectSymbols() { }
-  virtual void printMachOLinkerOptions() { }
+  virtual void printMachODysymtab() {}
+  virtual void printMachOSegment() {}
+  virtual void printMachOIndirectSymbols() {}
+  virtual void printMachOLinkerOptions() {}
 
   virtual void printStackMap() const = 0;
 
diff --git a/llvm/tools/llvm-readobj/lib/StackMapPrinter.h b/llvm/tools/llvm-readobj/lib/StackMapPrinter.h
index ef7575640..3f9a677a6 100644
--- a/llvm/tools/llvm-readobj/lib/StackMapPrinter.h
+++ b/llvm/tools/llvm-readobj/lib/StackMapPrinter.h
@@ -18,14 +18,14 @@ namespace llvm {
 template <typename StackMapParserT>
 void prettyPrintStackMap(ScopedPrinter &W, const StackMapParserT &SMP) {
 
-  W.printNumber("LLVM StackMap Version",  SMP.getVersion());
+  W.printNumber("LLVM StackMap Version", SMP.getVersion());
   W.printNumber("Num Functions", SMP.getNumFunctions());
 
   // Functions:
   for (const auto &F : SMP.functions())
     W.startLine() << "  Function address: " << F.getFunctionAddress()
-       << ", stack size: " << F.getStackSize()
-       << ", callsite record count: " << F.getRecordCount() << "\n";
+                  << ", stack size: " << F.getStackSize()
+                  << ", callsite record count: " << F.getRecordCount() << "\n";
 
   // Constants:
   W.printNumber("Num Constants", SMP.getNumConstants());
@@ -70,12 +70,12 @@ void prettyPrintStackMap(ScopedPrinter &W, const StackMapParserT &SMP) {
     raw_ostream &OS = W.startLine();
     OS << "    " << R.getNumLiveOuts() << " live-outs: [ ";
     for (const auto &LO : R.liveouts())
-      OS << "R#" << LO.getDwarfRegNum() << " ("
-         << LO.getSizeInBytes() << "-bytes) ";
+      OS << "R#" << LO.getDwarfRegNum() << " (" << LO.getSizeInBytes()
+         << "-bytes) ";
     OS << "]\n";
   }
 }
 
-}
+} // namespace llvm
 
 #endif
diff --git a/llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp b/llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp
index 1091103d0..cdbf33028 100644
--- a/llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp
+++ b/llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp
@@ -55,9 +55,9 @@ constexpr EnumStringDef<unsigned> UnwindOpInfoDefs[] = {
 constexpr auto UnwindOpInfo = BUILD_ENUM_STRINGS(UnwindOpInfoDefs);
 // clang-format on
 
-static uint64_t getOffsetOfLSDA(const UnwindInfo& UI) {
-  return static_cast<const char*>(UI.getLanguageSpecificData())
-         - reinterpret_cast<const char*>(&UI);
+static uint64_t getOffsetOfLSDA(const UnwindInfo &UI) {
+  return static_cast<const char *>(UI.getLanguageSpecificData()) -
+         reinterpret_cast<const char *>(&UI);
 }
 
 static uint32_t getLargeSlotValue(ArrayRef<UnwindCode> UC) {
@@ -69,16 +69,26 @@ static uint32_t getLargeSlotValue(ArrayRef<UnwindCode> UC) {
 // Returns the name of the unwind code.
 static StringRef getUnwindCodeTypeName(uint8_t Code) {
   switch (Code) {
-  default: llvm_unreachable("Invalid unwind code");
-  case UOP_PushNonVol: return "PUSH_NONVOL";
-  case UOP_AllocLarge: return "ALLOC_LARGE";
-  case UOP_AllocSmall: return "ALLOC_SMALL";
-  case UOP_SetFPReg: return "SET_FPREG";
-  case UOP_SaveNonVol: return "SAVE_NONVOL";
-  case UOP_SaveNonVolBig: return "SAVE_NONVOL_FAR";
-  case UOP_SaveXMM128: return "SAVE_XMM128";
-  case UOP_SaveXMM128Big: return "SAVE_XMM128_FAR";
-  case UOP_PushMachFrame: return "PUSH_MACHFRAME";
+  default:
+    llvm_unreachable("Invalid unwind code");
+  case UOP_PushNonVol:
+    return "PUSH_NONVOL";
+  case UOP_AllocLarge:
+    return "ALLOC_LARGE";
+  case UOP_AllocSmall:
+    return "ALLOC_SMALL";
+  case UOP_SetFPReg:
+    return "SET_FPREG";
+  case UOP_SaveNonVol:
+    return "SAVE_NONVOL";
+  case UOP_SaveNonVolBig:
+    return "SAVE_NONVOL_FAR";
+  case UOP_SaveXMM128:
+    return "SAVE_XMM128";
+  case UOP_SaveXMM128Big:
+    return "SAVE_XMM128_FAR";
+  case UOP_PushMachFrame:
+    return "PUSH_MACHFRAME";
   case UOP_Epilog:
     return "EPILOG";
   }
@@ -87,30 +97,48 @@ static StringRef getUnwindCodeTypeName(uint8_t Code) {
 // Returns the name of a referenced register.
 static StringRef getUnwindRegisterName(uint8_t Reg) {
   switch (Reg) {
-  default: llvm_unreachable("Invalid register");
-  case 0: return "RAX";
-  case 1: return "RCX";
-  case 2: return "RDX";
-  case 3: return "RBX";
-  case 4: return "RSP";
-  case 5: return "RBP";
-  case 6: return "RSI";
-  case 7: return "RDI";
-  case 8: return "R8";
-  case 9: return "R9";
-  case 10: return "R10";
-  case 11: return "R11";
-  case 12: return "R12";
-  case 13: return "R13";
-  case 14: return "R14";
-  case 15: return "R15";
+  default:
+    llvm_unreachable("Invalid register");
+  case 0:
+    return "RAX";
+  case 1:
+    return "RCX";
+  case 2:
+    return "RDX";
+  case 3:
+    return "RBX";
+  case 4:
+    return "RSP";
+  case 5:
+    return "RBP";
+  case 6:
+    return "RSI";
+  case 7:
+    return "RDI";
+  case 8:
+    return "R8";
+  case 9:
+    return "R9";
+  case 10:
+    return "R10";
+  case 11:
+    return "R11";
+  case 12:
+    return "R12";
+  case 13:
+    return "R13";
+  case 14:
+    return "R14";
+  case 15:
+    return "R15";
   }
 }
 
 // Calculates the number of array slots required for the unwind code.
 static unsigned getNumUsedSlots(const UnwindCode &UnwindCode) {
   switch (UnwindCode.getUnwindOp()) {
-  default: llvm_unreachable("Invalid unwind code");
+  default:
+    llvm_unreachable("Invalid unwind code");
   case UOP_PushNonVol:
   case UOP_AllocSmall:
   case UOP_SetFPReg:
@@ -366,7 +394,8 @@ void Dumper::printUnwindInfo(const Context &Ctx, const coff_section *Section,
     ListScope UCS(SW, "UnwindCodes");
     ArrayRef<UnwindCode> UC(&UI.UnwindCodes[0], UI.NumCodes);
     bool SeenFirstEpilog = false;
-    for (const UnwindCode *UCI = UC.begin(), *UCE = UC.end(); UCI < UCE; ++UCI) {
+    for (const UnwindCode *UCI = UC.begin(), *UCE = UC.end(); UCI < UCE;
+         ++UCI) {
       unsigned UsedSlots = getNumUsedSlots(*UCI);
       if (UsedSlots > UC.size()) {
         errs() << "corrupt unwind data";
@@ -679,7 +708,7 @@ void Dumper::printData(const Context &Ctx) {
       continue;
 
     const RuntimeFunction *Entries =
-      reinterpret_cast<const RuntimeFunction *>(Contents.data());
+        reinterpret_cast<const RuntimeFunction *>(Contents.data());
     const size_t Count = Contents.size() / sizeof(RuntimeFunction);
     ArrayRef<RuntimeFunction> RuntimeFunctions(Entries, Count);
 
@@ -691,6 +720,5 @@ void Dumper::printData(const Context &Ctx) {
     }
   }
 }
-}
-}
-
+} // namespace Win64EH
+} // namespace llvm
diff --git a/llvm/tools/llvm-readobj/lib/Win64EHDumper.h b/llvm/tools/llvm-readobj/lib/Win64EHDumper.h
index 29479e1b4..0b00cb1b2 100644
--- a/llvm/tools/llvm-readobj/lib/Win64EHDumper.h
+++ b/llvm/tools/llvm-readobj/lib/Win64EHDumper.h
@@ -17,7 +17,7 @@ namespace object {
 class COFFObjectFile;
 class SymbolRef;
 struct coff_section;
-}
+} // namespace object
 
 namespace Win64EH {
 class Dumper {
@@ -36,7 +36,7 @@ public:
 
     Context(const object::COFFObjectFile &COFF, SymbolResolver Resolver,
             void *UserData)
-      : COFF(COFF), ResolveSymbol(Resolver), UserData(UserData) {}
+        : COFF(COFF), ResolveSymbol(Resolver), UserData(UserData) {}
   };
 
 private:
@@ -60,7 +60,7 @@ public:
 
   void printData(const Context &Ctx);
 };
-}
-}
+} // namespace Win64EH
+} // namespace llvm
 
 #endif
diff --git a/llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp b/llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp
index 2aae7c4ca..a17a307f8 100644
--- a/llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp
@@ -101,8 +101,8 @@ void XCOFFDumper::printFileHeaders() {
 
     char FormattedTime[80] = {};
 
-    size_t BytesFormatted =
-      strftime(FormattedTime, sizeof(FormattedTime), "%F %T", gmtime(&TimeDate));
+    size_t BytesFormatted = strftime(FormattedTime, sizeof(FormattedTime),
+                                     "%F %T", gmtime(&TimeDate));
     if (BytesFormatted)
       W.printHex("TimeStamp", FormattedTime, TimeStamp);
     else
@@ -496,7 +496,8 @@ void XCOFFDumper::printRelocations(ArrayRef<Shdr> Sections) {
     if (Sec.Flags != XCOFF::STYP_TEXT && Sec.Flags != XCOFF::STYP_DATA &&
         Sec.Flags != XCOFF::STYP_TDATA && Sec.Flags != XCOFF::STYP_DWARF)
       continue;
-    Expected<ArrayRef<RelTy>> ErrOrRelocations = Obj.relocations<Shdr, RelTy>(Sec);
+    Expected<ArrayRef<RelTy>> ErrOrRelocations =
+        Obj.relocations<Shdr, RelTy>(Sec);
     if (Error E = ErrOrRelocations.takeError()) {
       reportUniqueWarning(std::move(E));
       continue;
@@ -977,7 +978,7 @@ void XCOFFDumper::printNeededLibraries() {
   // archive_member_name. The first entry is a default LIBPATH value and other
   // entries have no path_name. We just dump the base_name and
   // archive_member_name here.
-  OS << left_justify("BASE", BaseWidth)  << " MEMBER\n";
+  OS << left_justify("BASE", BaseWidth) << " MEMBER\n";
   CurrentStr = ImportFileTable.data();
   for (size_t StrIndex = 0; CurrentStr < TableEnd;
        ++StrIndex, CurrentStr += strlen(CurrentStr) + 1) {
diff --git a/llvm/tools/llvm-readobj/lib/llvm-readobj.cpp b/llvm/tools/llvm-readobj/lib/llvm-readobj.cpp
index d06221fbf..aca8fb55e 100644
--- a/llvm/tools/llvm-readobj/lib/llvm-readobj.cpp
+++ b/llvm/tools/llvm-readobj/lib/llvm-readobj.cpp
@@ -633,7 +633,6 @@ static void dumpWindowsResourceFile(WindowsResource *WinRes,
     reportError(std::move(Err), WinRes->getFileName());
 }
 
-
 /// Opens \a File and dumps it.
 static void dumpInput(StringRef File, ScopedPrinter &Writer) {
   ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr =
diff --git a/llvm/tools/llvm-readobj/lib/llvm-readobj.h b/llvm/tools/llvm-readobj/lib/llvm-readobj.h
index f46526b4b..35cd0dc69 100644
--- a/llvm/tools/llvm-readobj/lib/llvm-readobj.h
+++ b/llvm/tools/llvm-readobj/lib/llvm-readobj.h
@@ -18,19 +18,19 @@
 #include "llvm/Support/ErrorOr.h"
 
 namespace llvm {
-  namespace object {
-    class RelocationRef;
-  }
-
-  // Various helper functions.
-  [[noreturn]] void reportError(Error Err, StringRef Input);
-  void reportWarning(Error Err, StringRef Input);
-
-  template <class T> T unwrapOrError(StringRef Input, Expected<T> EO) {
-    if (EO)
-      return *EO;
-    reportError(EO.takeError(), Input);
-  }
+namespace object {
+class RelocationRef;
+}
+
+// Various helper functions.
+[[noreturn]] void reportError(Error Err, StringRef Input);
+void reportWarning(Error Err, StringRef Input);
+
+template <class T> T unwrapOrError(StringRef Input, Expected<T> EO) {
+  if (EO)
+    return *EO;
+  reportError(EO.takeError(), Input);
+}
 } // namespace llvm
 
 namespace opts {

@jh7370
jh7370 requested review from MaskRay and jh7370 September 11, 2026 11:04

@jh7370 jh7370 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

While I'm not necessarily opposed to moving stuff into a library (if there's a strong reason to do so that isn't already covered by the existing options), I'm a bit concerned that the RFC is being used as the justification, yet nothing in that RFC mentions llvm-readobj or even strongly implies it's going to be modified. I think the RFC needs clarifying as to what the scope of the changes are, as I suspect support for the changes is without being informed about the scope. For example, my reading of it was that it was going to impact clang/lld/opt/llc and not the tools I really care about (llvm-readobj/objdump/nm etc).

@anutosh491

anutosh491 commented Sep 11, 2026

Copy link
Copy Markdown
Member Author

Oops I'm sorry If I missed some communication. I shall update the RFC if that's what helps all of us !

My goal was to mostly have a good chunk of the LLVM stack on WasmBolt. I currently support clang, llc, opt, mlir-opt and thought of working on llvm-readobj, llvm-cxxfilt, llvm-nm and other tools & this was the first PR to get my work started on the llvm tools.

@anutosh491
anutosh491 force-pushed the wasmbolt-readobj-driver branch 2 times, most recently from 527e7ab to e2e1fff Compare September 11, 2026 11:18
Comment thread llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h Outdated
@anutosh491

Copy link
Copy Markdown
Member Author

cc @jh7370

Thanks for raising a fair concern. The RFC was too narrow in the tools it named, even though my intended WasmBolt scope also included selected LLVM utilities. I have added a clarification to the RFC and will hold off on opening the other utility patches until we agree on the appropriate boundary.

@anutosh491
anutosh491 force-pushed the wasmbolt-readobj-driver branch from e2e1fff to e604ced Compare September 11, 2026 12:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bazel "Peripheral" support tier build system: utils/bazel llvm:binary-utilities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants