1 //===- Writer.h -------------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_TOOLS_OBJCOPY_COFF_WRITER_H
11 #define LLVM_TOOLS_OBJCOPY_COFF_WRITER_H
14 #include "llvm/MC/StringTableBuilder.h"
15 #include "llvm/Support/Error.h"
32 virtual Error
write() = 0;
34 Writer(Object
&O
, Buffer
&B
) : Obj(O
), Buf(B
) {}
37 class COFFWriter
: public Writer
{
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
);
51 template <class SymbolTy
> void writeSymbolStringTables();
53 Error
write(bool IsBigObj
);
55 Error
patchDebugDirectory();
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