[llvm-objcopy] [COFF] Use Error/Expected returns instead of calling reportError....
[llvm-core.git] / tools / llvm-objcopy / COFF / Writer.h
blobf2e814a0f99eb1eeb7f6753d32e6153af3ed60d8
1 //===- Writer.h -------------------------------------------------*- C++ -*-===//
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 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_TOOLS_OBJCOPY_COFF_WRITER_H
11 #define LLVM_TOOLS_OBJCOPY_COFF_WRITER_H
13 #include "Buffer.h"
14 #include "llvm/MC/StringTableBuilder.h"
15 #include "llvm/Support/Error.h"
16 #include <cstddef>
17 #include <utility>
19 namespace llvm {
20 namespace objcopy {
21 namespace coff {
23 struct Object;
25 class Writer {
26 protected:
27 Object &Obj;
28 Buffer &Buf;
30 public:
31 virtual ~Writer();
32 virtual Error write() = 0;
34 Writer(Object &O, Buffer &B) : Obj(O), Buf(B) {}
37 class COFFWriter : public Writer {
38 size_t FileSize;
39 size_t FileAlignment;
40 size_t SizeOfInitializedData;
41 StringTableBuilder StrTabBuilder;
43 void layoutSections();
44 size_t finalizeStringTable();
45 template <class SymbolTy> std::pair<size_t, size_t> finalizeSymbolTable();
47 void finalize(bool IsBigObj);
49 void writeHeaders(bool IsBigObj);
50 void writeSections();
51 template <class SymbolTy> void writeSymbolStringTables();
53 Error write(bool IsBigObj);
55 Error patchDebugDirectory();
57 public:
58 virtual ~COFFWriter() {}
59 Error write() override;
61 COFFWriter(Object &Obj, Buffer &Buf)
62 : Writer(Obj, Buf), StrTabBuilder(StringTableBuilder::WinCOFF) {}
65 } // end namespace coff
66 } // end namespace objcopy
67 } // end namespace llvm
69 #endif // LLVM_TOOLS_OBJCOPY_COFF_WRITER_H