aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-readobj/llvm-readobj.cpp
diff options
context:
space:
mode:
authorJacek Caban <jacek@codeweavers.com>2024-08-09 15:55:28 +0200
committerGitHub <noreply@github.com>2024-08-09 15:55:28 +0200
commit1d77dd50f1bab20d2025d25f79784d5be1520847 (patch)
tree4fc063bf23f7dcb46fdbc4c631d44f71cb3fe2b2 /llvm/tools/llvm-readobj/llvm-readobj.cpp
parentcf54cae26b65fc3201eff7200ffb9b0c9e8f9a13 (diff)
downloadllvm-1d77dd50f1bab20d2025d25f79784d5be1520847.zip
llvm-1d77dd50f1bab20d2025d25f79784d5be1520847.tar.gz
llvm-1d77dd50f1bab20d2025d25f79784d5be1520847.tar.bz2
[llvm-readobj][COFF] Dump hybrid objects for ARM64X files. (#102245)
Diffstat (limited to 'llvm/tools/llvm-readobj/llvm-readobj.cpp')
-rw-r--r--llvm/tools/llvm-readobj/llvm-readobj.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp
index 15d8386..3e76cda 100644
--- a/llvm/tools/llvm-readobj/llvm-readobj.cpp
+++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp
@@ -580,6 +580,22 @@ static void dumpMachOUniversalBinary(const MachOUniversalBinary *UBinary,
}
}
+/// Dumps \a COFF file;
+static void dumpCOFFObject(COFFObjectFile *Obj, ScopedPrinter &Writer) {
+ dumpObject(*Obj, Writer);
+
+ // Dump a hybrid object when available.
+ std::unique_ptr<MemoryBuffer> HybridView = Obj->getHybridObjectView();
+ if (!HybridView)
+ return;
+ Expected<std::unique_ptr<COFFObjectFile>> HybridObjOrErr =
+ COFFObjectFile::create(*HybridView);
+ if (!HybridObjOrErr)
+ reportError(HybridObjOrErr.takeError(), Obj->getFileName().str());
+ DictScope D(Writer, "HybridObject");
+ dumpObject(**HybridObjOrErr, Writer);
+}
+
/// Dumps \a WinRes, Windows Resource (.res) file;
static void dumpWindowsResourceFile(WindowsResource *WinRes,
ScopedPrinter &Printer) {
@@ -617,6 +633,8 @@ static void dumpInput(StringRef File, ScopedPrinter &Writer) {
else if (MachOUniversalBinary *UBinary =
dyn_cast<MachOUniversalBinary>(Bin.get()))
dumpMachOUniversalBinary(UBinary, Writer);
+ else if (COFFObjectFile *Obj = dyn_cast<COFFObjectFile>(Bin.get()))
+ dumpCOFFObject(Obj, Writer);
else if (ObjectFile *Obj = dyn_cast<ObjectFile>(Bin.get()))
dumpObject(*Obj, Writer);
else if (COFFImportFile *Import = dyn_cast<COFFImportFile>(Bin.get()))