mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
579a3edad4
The debug directory payload is not located directly after the debug directory entry itself, but can essentially be located anywhere in the binary (even outside of mapped sections, although we don't handle that case). Differential Revision: https://reviews.llvm.org/D78921
63 lines
1.6 KiB
C++
63 lines
1.6 KiB
C++
//===- 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();
|
|
Expected<uint32_t> virtualAddressToFileAddress(uint32_t RVA);
|
|
|
|
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
|