diff options
author | Marek Sokolowski <mnbvmar@gmail.com> | 2017-09-20 18:33:35 +0000 |
---|---|---|
committer | Marek Sokolowski <mnbvmar@gmail.com> | 2017-09-20 18:33:35 +0000 |
commit | c2189b8311affb1a8de08862767b597415010d96 (patch) | |
tree | c9d466dc5ca75e0651503ec7553e712d58f9ae28 /llvm/tools/llvm-readobj/llvm-readobj.cpp | |
parent | 8f27eef230a841daaef26e47329399bd58e7bfe8 (diff) | |
download | bcm5719-llvm-c2189b8311affb1a8de08862767b597415010d96.tar.gz bcm5719-llvm-c2189b8311affb1a8de08862767b597415010d96.zip |
[llvm-readobj] Teach readobj to dump .res files (WindowsResource).
This enables readobj to output Windows resource files (.res). This way,
we'll be able to test .res outputs without comparing them byte-by-byte
with "magic binary files" generated by MS toolchain.
Differential Revision: https://reviews.llvm.org/D38058
llvm-svn: 313790
Diffstat (limited to 'llvm/tools/llvm-readobj/llvm-readobj.cpp')
-rw-r--r-- | llvm/tools/llvm-readobj/llvm-readobj.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index 7bfb18fab12..f24ce67da84 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -22,12 +22,14 @@ #include "llvm-readobj.h" #include "Error.h" #include "ObjDumper.h" +#include "WindowsResourceDumper.h" #include "llvm/DebugInfo/CodeView/TypeTableBuilder.h" #include "llvm/Object/Archive.h" #include "llvm/Object/COFFImportFile.h" #include "llvm/Object/ELFObjectFile.h" #include "llvm/Object/MachOUniversal.h" #include "llvm/Object/ObjectFile.h" +#include "llvm/Object/WindowsResource.h" #include "llvm/Support/Casting.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/DataTypes.h" @@ -522,6 +524,15 @@ static void dumpMachOUniversalBinary(const MachOUniversalBinary *UBinary) { } } +/// @brief Dumps \a WinRes, Windows Resource (.res) file; +static void dumpWindowsResourceFile(WindowsResource *WinRes) { + ScopedPrinter Printer{outs()}; + WindowsRes::Dumper Dumper(WinRes, Printer); + if (auto Err = Dumper.printData()) + reportError(WinRes->getFileName(), std::move(Err)); +} + + /// @brief Opens \a File and dumps it. static void dumpInput(StringRef File) { @@ -540,6 +551,8 @@ static void dumpInput(StringRef File) { dumpObject(Obj); else if (COFFImportFile *Import = dyn_cast<COFFImportFile>(&Binary)) dumpCOFFImportFile(Import); + else if (WindowsResource *WinRes = dyn_cast<WindowsResource>(&Binary)) + dumpWindowsResourceFile(WinRes); else reportError(File, readobj_error::unrecognized_file_format); } |