blob: 9ed965cc941404d982a72dede2d4da754b44c329 [file] [log] [blame]
Martin Storsjoe84a0b52018-12-19 07:24:38 +00001//===- COFFObjcopy.cpp ----------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "COFFObjcopy.h"
11#include "Buffer.h"
12#include "CopyConfig.h"
13#include "Object.h"
14#include "Reader.h"
15#include "Writer.h"
16#include "llvm-objcopy.h"
17
18#include "llvm/Object/Binary.h"
19#include "llvm/Object/COFF.h"
20#include <cassert>
21
22namespace llvm {
23namespace objcopy {
24namespace coff {
25
26using namespace object;
27using namespace COFF;
28
29void executeObjcopyOnBinary(const CopyConfig &Config,
30 object::COFFObjectFile &In, Buffer &Out) {
31 COFFReader Reader(In);
Martin Storsjo0a5d5b12018-12-30 20:35:43 +000032 Expected<std::unique_ptr<Object>> ObjOrErr = Reader.create();
33 if (!ObjOrErr)
34 reportError(Config.InputFilename, ObjOrErr.takeError());
35 Object *Obj = ObjOrErr->get();
Martin Storsjoe84a0b52018-12-19 07:24:38 +000036 assert(Obj && "Unable to deserialize COFF object");
37 COFFWriter Writer(*Obj, Out);
Martin Storsjo0a5d5b12018-12-30 20:35:43 +000038 if (Error E = Writer.write())
39 reportError(Config.OutputFilename, std::move(E));
Martin Storsjoe84a0b52018-12-19 07:24:38 +000040}
41
42} // end namespace coff
43} // end namespace objcopy
44} // end namespace llvm