diff options
author | Jacek Caban <jacek@codeweavers.com> | 2024-08-09 15:55:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-09 15:55:28 +0200 |
commit | 1d77dd50f1bab20d2025d25f79784d5be1520847 (patch) | |
tree | 4fc063bf23f7dcb46fdbc4c631d44f71cb3fe2b2 /llvm/tools/llvm-readobj/llvm-readobj.cpp | |
parent | cf54cae26b65fc3201eff7200ffb9b0c9e8f9a13 (diff) | |
download | llvm-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.cpp | 18 |
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())) |