diff options
Diffstat (limited to 'llvm/tools/llvm-objcopy/COFF/Writer.h')
| -rw-r--r-- | llvm/tools/llvm-objcopy/COFF/Writer.h | 61 | 
1 files changed, 61 insertions, 0 deletions
diff --git a/llvm/tools/llvm-objcopy/COFF/Writer.h b/llvm/tools/llvm-objcopy/COFF/Writer.h new file mode 100644 index 0000000000000..681a8d5e4a66c --- /dev/null +++ b/llvm/tools/llvm-objcopy/COFF/Writer.h @@ -0,0 +1,61 @@ +//===- Writer.h -------------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TOOLS_OBJCOPY_COFF_WRITER_H +#define LLVM_TOOLS_OBJCOPY_COFF_WRITER_H + +#include "Buffer.h" +#include "llvm/MC/StringTableBuilder.h" +#include "llvm/Support/Error.h" +#include <cstddef> +#include <utility> + +namespace llvm { +namespace objcopy { +namespace coff { + +struct Object; + +class COFFWriter { +  Object &Obj; +  Buffer &Buf; + +  size_t FileSize; +  size_t FileAlignment; +  size_t SizeOfInitializedData; +  StringTableBuilder StrTabBuilder; + +  template <class SymbolTy> std::pair<size_t, size_t> finalizeSymbolTable(); +  Error finalizeRelocTargets(); +  Error finalizeSymbolContents(); +  void layoutSections(); +  size_t finalizeStringTable(); + +  Error finalize(bool IsBigObj); + +  void writeHeaders(bool IsBigObj); +  void writeSections(); +  template <class SymbolTy> void writeSymbolStringTables(); + +  Error write(bool IsBigObj); + +  Error patchDebugDirectory(); + +public: +  virtual ~COFFWriter() {} +  Error write(); + +  COFFWriter(Object &Obj, Buffer &Buf) +      : Obj(Obj), Buf(Buf), StrTabBuilder(StringTableBuilder::WinCOFF) {} +}; + +} // end namespace coff +} // end namespace objcopy +} // end namespace llvm + +#endif // LLVM_TOOLS_OBJCOPY_COFF_WRITER_H  | 
