[llvm-readobj] Add a reusable LLVMReadobjDriver library - #222917
[llvm-readobj] Add a reusable LLVMReadobjDriver library#222917anutosh491 wants to merge 1 commit into
Conversation
|
@llvm/pr-subscribers-llvm-binary-utilities Author: Anutosh Bhat (anutosh491) ChangesPlease read: RFC: Embeddable LLVM tool drivers for long-lived hosts This follows the same direction as the recent
The immediate consumer is WasmBolt(try here), which runs LLVM tools repeatedly inside one long-lived WebAssembly process. I have tested the real <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:
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 = [
|
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
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
left a comment
There was a problem hiding this comment.
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).
|
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 |
527e7ab to
e2e1fff
Compare
|
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. |
e2e1fff to
e604ced
Compare
Please read: RFC: Embeddable LLVM tool drivers for long-lived hosts
This follows the same direction as the recent
LLVMLlcDriverandLLVMOptDriverchanges. See #221896 & #222840llvm-readobjalready exposes its implementation throughllvm_readobj_main, but the implementation is currently compiled directly into the standalone executable. This patch moves that implementation into a reusableLLVMReadobjDriverlibrary 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-readobjimplementation in the browser with file headers, sections, symbols and relocations on WebAssembly object files.